Skip to content

Commit

Permalink
Reapply "External insulin dialog"
Browse files Browse the repository at this point in the history
This reverts commit 7c67ac7.
  • Loading branch information
avouspierre committed Apr 13, 2024
1 parent 15b2d74 commit c7d2c67
Show file tree
Hide file tree
Showing 10 changed files with 201 additions and 43 deletions.
13 changes: 11 additions & 2 deletions FreeAPS/Sources/APS/Storage/PumpHistoryStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
durationMin: nil,
rate: nil,
temp: nil,
carbInput: nil
carbInput: nil,
isExternalInsulin: dose.manuallyEntered
)]
case .tempBasal:
guard let dose = event.dose else { return [] }
Expand Down Expand Up @@ -209,6 +210,13 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
}
}

func determineBolusEventType(for event: PumpHistoryEvent) -> EventType {
if event.isExternalInsulin ?? false {
return .externalInsulin
}
return event.type
}

func nightscoutTretmentsNotUploaded() -> [NigtscoutTreatment] {
let events = recent()
guard !events.isEmpty else { return [] }
Expand Down Expand Up @@ -249,13 +257,14 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
let bolusesAndCarbs = events.compactMap { event -> NigtscoutTreatment? in
switch event.type {
case .bolus:
let eventType = determineBolusEventType(for: event)
return NigtscoutTreatment(
duration: event.duration,
rawDuration: nil,
rawRate: nil,
absolute: nil,
rate: nil,
eventType: .bolus,
eventType: eventType,
createdAt: event.timestamp,
enteredBy: NigtscoutTreatment.local,
bolus: event,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1222,7 +1222,7 @@ Enact a temp Basal or a temp target */
/* An Automatic delivered bolus (SMB) */
"SMB" = "SMB";

/* A manually entered dose of external insulin */
/* A manually entered dose of non-pump insulin */
"External Insulin" = "Externes Insulin";

/* Status highlight when manual temp basal is running. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,7 @@ Enact a temp Basal or a temp target */
/* An Automatic delivered bolus (SMB) */
"SMB" = "SMB";

/* A manually entered dose of external insulin */
/* A manually entered dose of non-pump insulin */
"External Insulin" = "External Insulin";

/* Status highlight when manual temp basal is running. */
Expand Down
9 changes: 7 additions & 2 deletions FreeAPS/Sources/Models/PumpHistoryEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ struct PumpHistoryEvent: JSON, Equatable {
let temp: TempType?
let carbInput: Int?
let note: String?
let isExternalInsulin: Bool?

init(
id: String,
Expand All @@ -22,7 +23,8 @@ struct PumpHistoryEvent: JSON, Equatable {
rate: Decimal? = nil,
temp: TempType? = nil,
carbInput: Int? = nil,
note: String? = nil
note: String? = nil,
isExternalInsulin: Bool? = nil
) {
self.id = id
self.type = type
Expand All @@ -34,12 +36,14 @@ struct PumpHistoryEvent: JSON, Equatable {
self.temp = temp
self.carbInput = carbInput
self.note = note
self.isExternalInsulin = isExternalInsulin
}
}

enum EventType: String, JSON {
case bolus = "Bolus"
case mealBulus = "Meal Bolus"
case externalInsulin = "External Insulin"
case mealBolus = "Meal Bolus"
case correctionBolus = "Correction Bolus"
case snackBolus = "Snack Bolus"
case bolusWizard = "BolusWizard"
Expand Down Expand Up @@ -80,5 +84,6 @@ extension PumpHistoryEvent {
case temp
case carbInput = "carb_input"
case note
case isExternalInsulin
}
}
3 changes: 2 additions & 1 deletion FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ extension Bolus {
durationMin: nil,
rate: nil,
temp: nil,
carbInput: nil
carbInput: nil,
isExternalInsulin: true
)
]
)
Expand Down
28 changes: 3 additions & 25 deletions FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -81,33 +81,11 @@ extension Bolus {
label: { Text("Enact bolus") }
.disabled(state.amount <= 0)
}
Section {
if waitForSuggestion {
if waitForSuggestion {
Section {
Button { state.showModal(for: nil) }
label: { Text("Continue without bolus") }
} else {
Button { isAddInsulinAlertPresented = true }
label: { Text("Add insulin without actually bolusing") }
.disabled(state.amount <= 0)
}
}
.alert(isPresented: $isAddInsulinAlertPresented) {
Alert(
title: Text("Are you sure?"),
message: Text(
NSLocalizedString("Add", comment: "Add insulin without bolusing alert") + " " + formatter
.string(from: state.amount as NSNumber)! + NSLocalizedString(" U", comment: "Insulin unit") +
NSLocalizedString(" without bolusing", comment: "Add insulin without bolusing alert")
),
primaryButton: .destructive(
Text("Add"),
action: {
state.addWithoutBolus()
isAddInsulinAlertPresented = false
}
),
secondaryButton: .cancel()
)
}.frame(maxWidth: .infinity, alignment: .center)
}
}
}
Expand Down
26 changes: 18 additions & 8 deletions FreeAPS/Sources/Modules/DataTable/DataTableDataFlow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,9 @@ enum DataTable {
let isFPU: Bool?
let fpuID: String?
let note: String?
let isExternal: Bool?

private var numberFormater: NumberFormatter {
private var numberFormatter: NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
Expand All @@ -92,7 +93,8 @@ enum DataTable {
idPumpEvent: String? = nil,
isFPU: Bool? = false,
fpuID: String? = nil,
note: String? = nil
note: String? = nil,
isExternal: Bool? = nil
) {
self.units = units
self.type = type
Expand All @@ -105,6 +107,7 @@ enum DataTable {
self.isFPU = isFPU
self.fpuID = fpuID
self.note = note
self.isExternal = isExternal
}

static func == (lhs: Treatment, rhs: Treatment) -> Bool {
Expand All @@ -126,14 +129,21 @@ enum DataTable {

switch type {
case .carbs:
return numberFormater.string(from: amount as NSNumber)! + NSLocalizedString(" g", comment: "gram of carbs")
return numberFormatter.string(from: amount as NSNumber)! + NSLocalizedString(" g", comment: "gram of carbs")
case .fpus:
return numberFormater
return numberFormatter
.string(from: amount as NSNumber)! + NSLocalizedString(" g", comment: "gram of carb equilvalents")
case .bolus:
return numberFormater.string(from: amount as NSNumber)! + NSLocalizedString(" U", comment: "Insulin unit")
var bolusText = ""

if isExternal ?? false {
bolusText += " " + NSLocalizedString("External", comment: "External Insulin")
}

return numberFormatter
.string(from: amount as NSNumber)! + NSLocalizedString(" U", comment: "Insulin unit") + bolusText
case .tempBasal:
return numberFormater
return numberFormatter
.string(from: amount as NSNumber)! + NSLocalizedString(" U/hr", comment: "Unit insulin per hour")
case .tempTarget:
var converted = amount
Expand All @@ -142,7 +152,7 @@ enum DataTable {
}

guard var secondAmount = secondAmount else {
return numberFormater.string(from: converted as NSNumber)! + " \(units.rawValue)"
return numberFormatter.string(from: converted as NSNumber)! + " \(units.rawValue)"
}
if units == .mmolL {
secondAmount = secondAmount.asMmolL
Expand Down Expand Up @@ -177,7 +187,7 @@ enum DataTable {
guard let duration = duration, duration > 0 else {
return nil
}
return numberFormater.string(from: duration as NSNumber)! + " min"
return numberFormatter.string(from: duration as NSNumber)! + " min"
}
}

Expand Down
6 changes: 6 additions & 0 deletions FreeAPS/Sources/Modules/DataTable/DataTableProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ extension DataTable {
pumpHistoryStorage.recent()
}

func pumpSettings() -> PumpSettings {
storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
?? PumpSettings(insulinActionCurve: 6, maxBolus: 10, maxBasal: 2)
}

func tempTargets() -> [TempTarget] {
tempTargetsStorage.recent()
}
Expand Down
48 changes: 47 additions & 1 deletion FreeAPS/Sources/Modules/DataTable/DataTableStateModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,23 @@ extension DataTable {
@Injected() var broadcaster: Broadcaster!
@Injected() var unlockmanager: UnlockManager!
@Injected() private var storage: FileStorage!
@Injected() var pumpHistoryStorage: PumpHistoryStorage!

let coredataContext = CoreDataStack.shared.persistentContainer.viewContext

@Published var mode: Mode = .treatments
@Published var treatments: [Treatment] = []
@Published var glucose: [Glucose] = []
@Published var manualGlcuose: Decimal = 0
@Published var maxBolus: Decimal = 0
@Published var externalInsulinAmount: Decimal = 0
@Published var externalInsulinDate = Date()

var units: GlucoseUnits = .mmolL

override func subscribe() {
units = settingsManager.settings.units
maxBolus = provider.pumpSettings().maxBolus
setupTreatments()
setupGlucose()
broadcaster.register(SettingsObserver.self, observer: self)
Expand Down Expand Up @@ -66,7 +71,14 @@ extension DataTable {
let boluses = self.provider.pumpHistory()
.filter { $0.type == .bolus }
.map {
Treatment(units: units, type: .bolus, date: $0.timestamp, amount: $0.amount, idPumpEvent: $0.id)
Treatment(
units: units,
type: .bolus,
date: $0.timestamp,
amount: $0.amount,
idPumpEvent: $0.id,
isExternal: $0.isExternalInsulin
)
}

let tempBasals = self.provider.pumpHistory()
Expand Down Expand Up @@ -181,6 +193,40 @@ extension DataTable {
provider.glucoseStorage.storeGlucose([saveToJSON])
debug(.default, "Manual Glucose saved to glucose.json")
}

func addExternalInsulin() {
guard externalInsulinAmount > 0 else {
showModal(for: nil)
return
}

externalInsulinAmount = min(externalInsulinAmount, maxBolus * 3) // Allow for 3 * Max Bolus for external insulin
unlockmanager.unlock()
.sink { _ in } receiveValue: { [weak self] _ in
guard let self = self else { return }
pumpHistoryStorage.storeEvents(
[
PumpHistoryEvent(
id: UUID().uuidString,
type: .bolus,
timestamp: externalInsulinDate,
amount: externalInsulinAmount,
duration: nil,
durationMin: nil,
rate: nil,
temp: nil,
carbInput: nil,
isExternalInsulin: true
)
]
)
debug(.default, "External insulin saved to pumphistory.json")

// Reset amount to 0 for next entry
externalInsulinAmount = 0
}
.store(in: &lifetime)
}
}
}

Expand Down
Loading

0 comments on commit c7d2c67

Please sign in to comment.