Просмотр исходного кода

Allow Override of target glucose in profiles override

Jon Mårtensson 3 лет назад
Родитель
Сommit
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
             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 {
         private var targetFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
             formatter.numberStyle = .decimal
@@ -216,10 +225,26 @@ extension Home {
             guard fetchedPercent.first?.enabled ?? false else {
             guard fetchedPercent.first?.enabled ?? false else {
                 return nil
                 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 {
         var infoPanel: some View {

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

@@ -13,8 +13,7 @@ extension OverrideProfilesConfig {
         var units: GlucoseUnits = .mmolL
         var units: GlucoseUnits = .mmolL
 
 
         override func subscribe() {
         override func subscribe() {
-            let units = settingsManager.settings.units
-            self.units = units
+            units = settingsManager.settings.units
         }
         }
 
 
         let coredataContext = CoreDataStack.shared.persistentContainer.viewContext
         let coredataContext = CoreDataStack.shared.persistentContainer.viewContext
@@ -27,7 +26,12 @@ extension OverrideProfilesConfig {
                 saveOverride.percentage = self.percentage
                 saveOverride.percentage = self.percentage
                 saveOverride.enabled = self.isEnabled
                 saveOverride.enabled = self.isEnabled
                 saveOverride.date = Date()
                 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()
                 try? self.coredataContext.save()
             }
             }
         }
         }
@@ -55,9 +59,9 @@ extension OverrideProfilesConfig {
                         isEnabled = false
                         isEnabled = false
                     }
                     }
                     newDuration = Date().distance(to: date.addingTimeInterval(addedMinutes.minutes.timeInterval)).minutes
                     newDuration = Date().distance(to: date.addingTimeInterval(addedMinutes.minutes.timeInterval)).minutes
-                    if (overrideArray.first?.target ?? 0) != 0 {
+                    if overrideTarget != 0 {
                         override_target = true
                         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 {
                         if !state.isEnabled {
                             state.duration = 0
                             state.duration = 0
                             state.percentage = 100
                             state.percentage = 100
-                            state._indefinite = false
+                            state._indefinite = true
+                            state.override_target = false
                             state.saveSettings()
                             state.saveSettings()
                         }
                         }
                     })
                     })
@@ -102,16 +103,30 @@ extension OverrideProfilesConfig {
                             showAlert.toggle()
                             showAlert.toggle()
 
 
                             alertSring = "Selected Override:\n\n\(state.percentage.formatted(.number)) %, " +
                             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"
                                 "\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(
                         .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)
                         .accentColor(.orange)
                         .buttonStyle(BorderlessButtonStyle())
                         .buttonStyle(BorderlessButtonStyle())
@@ -124,9 +139,6 @@ extension OverrideProfilesConfig {
                             actions: {
                             actions: {
                                 Button("Cancel", role: .cancel) {}
                                 Button("Cancel", role: .cancel) {}
                                 Button("Start Override", role: .destructive) {
                                 Button("Start Override", role: .destructive) {
-                                    if state.percentage == 100 {
-                                        state.isEnabled = false
-                                    } else { state.isEnabled = true }
                                     if state._indefinite {
                                     if state._indefinite {
                                         state.duration = 0
                                         state.duration = 0
                                     } else if state.duration == 0 {
                                     } else if state.duration == 0 {
@@ -139,7 +151,9 @@ extension OverrideProfilesConfig {
                         )
                         )
                     }
                     }
                 }
                 }
-            }.onAppear { state.savedSettings() }
+            }
+            .onAppear(perform: configureView)
+            .onAppear { state.savedSettings() }
         }
         }
     }
     }
 }
 }