فهرست منبع

Allow Override of target glucose in profiles override

Jon Mårtensson 3 سال پیش
والد
کامیت
5852dcbb42

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
FreeAPS/Resources/javascript/bundle/determine-basal.js


+ 29 - 4
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -47,6 +47,15 @@ extension Home {
             return formatter
         }
 
+        private var fetchedTargetFormatter: NumberFormatter {
+            let formatter = NumberFormatter()
+            formatter.numberStyle = .decimal
+            if state.units == .mmolL {
+                formatter.maximumFractionDigits = 1
+            } else { formatter.maximumFractionDigits = 0 }
+            return formatter
+        }
+
         private var targetFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
@@ -216,10 +225,26 @@ extension Home {
             guard fetchedPercent.first?.enabled ?? false else {
                 return nil
             }
-            let percentString = "\((fetchedPercent.first?.percentage ?? 100).formatted(.number)) %"
-            let durationString = (fetchedPercent.first?.indefinite ?? false) ?
-                "" : ", " + (tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") + " min"
-            return percentString + durationString
+            var percentString = "\((fetchedPercent.first?.percentage ?? 100).formatted(.number)) %"
+            var target = (fetchedPercent.first?.target ?? 100) as Decimal
+            let indefinite = (fetchedPercent.first?.indefinite ?? false)
+            let unit = state.units.rawValue
+            if state.units == .mmolL {
+                target = target.asMmolL
+            }
+            var targetString = (fetchedTargetFormatter.string(from: target as NSNumber) ?? "") + " " + unit
+            if tempTargetString != nil || target == 0 { targetString = "" }
+            percentString = percentString == "100 %" ? "" : percentString
+            let durationString = indefinite ?
+                "" : ((tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") + " min")
+
+            var comma1 = ", "
+            var comma2 = comma1
+            if targetString == "" { comma1 = "" }
+            if percentString == "" { comma1 = "" }
+            if indefinite { comma2 = "" }
+
+            return percentString + comma1 + targetString + comma2 + durationString
         }
 
         var infoPanel: some View {

+ 9 - 5
FreeAPS/Sources/Modules/OverrideProfilesConfig/OverrideProfilesStateModel.swift

@@ -13,8 +13,7 @@ extension OverrideProfilesConfig {
         var units: GlucoseUnits = .mmolL
 
         override func subscribe() {
-            let units = settingsManager.settings.units
-            self.units = units
+            units = settingsManager.settings.units
         }
 
         let coredataContext = CoreDataStack.shared.persistentContainer.viewContext
@@ -27,7 +26,12 @@ extension OverrideProfilesConfig {
                 saveOverride.percentage = self.percentage
                 saveOverride.enabled = self.isEnabled
                 saveOverride.date = Date()
-                saveOverride.target = units == .mmolL ? target.asMgdL as NSDecimalNumber : target as NSDecimalNumber
+                if override_target {
+                    if units == .mmolL {
+                        target = target.asMgdL
+                    }
+                    saveOverride.target = target as NSDecimalNumber
+                } else { saveOverride.target = 0 }
                 try? self.coredataContext.save()
             }
         }
@@ -55,9 +59,9 @@ extension OverrideProfilesConfig {
                         isEnabled = false
                     }
                     newDuration = Date().distance(to: date.addingTimeInterval(addedMinutes.minutes.timeInterval)).minutes
-                    if (overrideArray.first?.target ?? 0) != 0 {
+                    if overrideTarget != 0 {
                         override_target = true
-                        target = units == .mgdL ? overrideTarget : overrideTarget.asMmolL
+                        target = units == .mmolL ? overrideTarget.asMmolL : overrideTarget
                     }
                 }
 

+ 24 - 10
FreeAPS/Sources/Modules/OverrideProfilesConfig/View/OverrideProfilesRootView.swift

@@ -44,7 +44,8 @@ extension OverrideProfilesConfig {
                         if !state.isEnabled {
                             state.duration = 0
                             state.percentage = 100
-                            state._indefinite = false
+                            state._indefinite = true
+                            state.override_target = false
                             state.saveSettings()
                         }
                     })
@@ -102,16 +103,30 @@ extension OverrideProfilesConfig {
                             showAlert.toggle()
 
                             alertSring = "Selected Override:\n\n\(state.percentage.formatted(.number)) %, " +
-                                (state.duration > 0 ? "\(state.duration) min" : " infinite duration.") +
-                                (state.target == 0 ? "" : (" Target: \(state.target) " + state.units.rawValue + "."))
+                                (
+                                    state.duration > 0 || !state
+                                        ._indefinite ?
+                                        (
+                                            state
+                                                .duration
+                                                .formatted(.number.grouping(.never).rounded().precision(.fractionLength(0))) +
+                                                " min."
+                                        ) :
+                                        " infinite duration."
+                                ) +
+                                (
+                                    (state.target == 0 || !state.override_target) ? "" :
+                                        (" Target: " + state.target.formatted() + " " + state.units.rawValue + ".")
+                                )
                                 +
                                 "\n\n"
                                 +
-                                "Saving this override will change your basal insulin, ISF, CR and eventual Target Glucose during the entire selected duration. Tapping save will start your new overide or edit your current active override."
+                                "Saving this override will change your Profiles and/or your Target Glucose used for looping during the entire selected duration. Tapping save will start your new overide or edit your current active override."
                         }
                         .disabled(
-                            state.isEnabled == false || state
-                                .percentage == 100 || (!state._indefinite && state.duration == 0)
+                            !state
+                                .isEnabled || (state.percentage == 100 && !state.override_target) ||
+                                (!state._indefinite && state.duration == 0 || (state.override_target && state.target == 0))
                         )
                         .accentColor(.orange)
                         .buttonStyle(BorderlessButtonStyle())
@@ -124,9 +139,6 @@ extension OverrideProfilesConfig {
                             actions: {
                                 Button("Cancel", role: .cancel) {}
                                 Button("Start Override", role: .destructive) {
-                                    if state.percentage == 100 {
-                                        state.isEnabled = false
-                                    } else { state.isEnabled = true }
                                     if state._indefinite {
                                         state.duration = 0
                                     } else if state.duration == 0 {
@@ -139,7 +151,9 @@ extension OverrideProfilesConfig {
                         )
                     }
                 }
-            }.onAppear { state.savedSettings() }
+            }
+            .onAppear(perform: configureView)
+            .onAppear { state.savedSettings() }
         }
     }
 }