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

Info Panel updates.
Improve original TT format in info panel. Less dead space and less code.
Add % for TTs in info panel (currently only for presets or enacted with sliders).
Remove "Perpetual" to avoid clutter in info panel.

(cherry picked from commit 39f3e07bcbea96d3811f68273ffdbeb2f93bfdac)

Jon Mårtensson 3 лет назад
Родитель
Сommit
84c07e2379

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
FreeAPS/Resources/javascript/bundle/determine-basal.js


+ 0 - 5
FreeAPS/Sources/Modules/AddCarbs/AddCarbsStateModel.swift

@@ -156,7 +156,6 @@ extension AddCarbs {
             guard filteredArray != [] else {
                 return ""
             }
-
             var carbs_: Decimal = 0.0
             var fat_: Decimal = 0.0
             var protein_: Decimal = 0.0
@@ -166,7 +165,6 @@ extension AddCarbs {
                 let requestPresets = Presets.fetchRequest() as NSFetchRequest<Presets>
                 try? presetArray = coredataContext.fetch(requestPresets)
             }
-
             var waitersNotepad = [String]()
             var stringValue = ""
 
@@ -187,7 +185,6 @@ extension AddCarbs {
                     }
                 }
             }
-
             let extracarbs = carbs - carbs_
             let extraFat = fat - fat_
             let extraProtein = protein - protein_
@@ -208,7 +205,6 @@ extension AddCarbs {
             if addedString != "" {
                 waitersNotepad.append(addedString)
             }
-
             var waitersNotepadString = ""
 
             if waitersNotepad.count == 1 {
@@ -220,7 +216,6 @@ extension AddCarbs {
                     } else { waitersNotepadString += " " + each }
                 }
             }
-
             return waitersNotepadString
         }
     }

+ 11 - 0
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -54,6 +54,7 @@ extension Home {
         @Published var animatedBackground = false
         @Published var manualTempBasal = false
         @Published var smooth = false
+        @Published var maxValue: Decimal = 1.2
 
         override func subscribe() {
             setupGlucose()
@@ -85,6 +86,7 @@ extension Home {
             setStatusTitle()
             setupCurrentTempTarget()
             smooth = settingsManager.settings.smoothGlucose
+            maxValue = settingsManager.preferences.autosensMax
 
             broadcaster.register(GlucoseObserver.self, observer: self)
             broadcaster.register(SuggestionObserver.self, observer: self)
@@ -351,6 +353,15 @@ extension Home {
             }
             UIApplication.shared.open(url, options: [:], completionHandler: nil)
         }
+
+        func infoPanelTTPercentage(_ hbt_: Double, _ target: Decimal) -> Decimal {
+            guard hbt_ != 0 || target != 0 else {
+                return 0
+            }
+            let c = Decimal(hbt_ - 100)
+            let ratio = min(c / (target + c - 100), maxValue)
+            return (ratio * 100)
+        }
     }
 }
 

+ 42 - 45
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -31,6 +31,16 @@ extension Home {
             sortDescriptors: [NSSortDescriptor(key: "date", ascending: false)]
         ) var fetchedPercent: FetchedResults<Override>
 
+        @FetchRequest(
+            entity: TempTargets.entity(),
+            sortDescriptors: [NSSortDescriptor(key: "date", ascending: false)]
+        ) var currentTempTarget: FetchedResults<TempTargets>
+
+        @FetchRequest(
+            entity: TempTargetsSlider.entity(),
+            sortDescriptors: [NSSortDescriptor(key: "date", ascending: false)]
+        ) var currentEnactedTempTarget: FetchedResults<TempTargetsSlider>
+
         private var numberFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
@@ -188,63 +198,50 @@ extension Home {
                 }
 
                 if let tempTarget = state.tempTarget {
-                    Text(tempTarget.displayName).font(.caption).foregroundColor(.secondary)
-                    if state.units == .mmolL {
+                    let target_ = tempTarget.targetBottom ?? 0
+                    let unitString = targetFormatter.string(from: (tempTarget.targetBottom?.asMmolL ?? 0) as NSNumber)!
+                    if currentTempTarget.first?.active ?? false {
+                        let hbt = currentTempTarget.first?.hbt ?? 0
+                        let string = (tirFormatter.string(from: state.infoPanelTTPercentage(hbt, target_) as NSNumber) ?? "") +
+                            " %"
+                        let rawString = state.units.rawValue + (string == "0" ? "" : string + " %")
+
                         Text(
-                            targetFormatter
-                                .string(from: (tempTarget.targetBottom?.asMmolL ?? 0) as NSNumber)!
-                        )
-                        .font(.caption)
-                        .foregroundColor(.secondary)
-                        if tempTarget.targetBottom != tempTarget.targetTop {
-                            Text("-").font(.caption)
-                                .foregroundColor(.secondary)
-                            Text(
-                                targetFormatter
-                                    .string(from: (tempTarget.targetTop?.asMmolL ?? 0) as NSNumber)! +
-                                    " \(state.units.rawValue)"
+                            tempTarget.displayName + " " + (
+                                state.units == .mmolL ? (unitString + " mmol/L " + string) : rawString
                             )
-                            .font(.caption)
-                            .foregroundColor(.secondary)
-                        } else {
-                            Text(state.units.rawValue).font(.caption)
-                                .foregroundColor(.secondary)
-                        }
+                        )
+                        .font(.caption).foregroundColor(.secondary)
+                    } else if currentEnactedTempTarget.first?.enabled ?? false {
+                        let hbt = currentEnactedTempTarget.first?.hbt ?? 0
+                        let string = (tirFormatter.string(from: state.infoPanelTTPercentage(hbt, target_) as NSNumber) ?? "") +
+                            " %"
+                        let rawString = state.units.rawValue + (string == "0" ? "" : string + " %")
 
+                        Text(
+                            tempTarget.displayName + " " +
+                                (state.units == .mmolL ? (unitString + " mmol/L " + string) : rawString)
+                        )
+                        .font(.caption).foregroundColor(.secondary)
                     } else {
-                        Text(targetFormatter.string(from: (tempTarget.targetBottom ?? 0) as NSNumber)!)
-                            .font(.caption)
-                            .foregroundColor(.secondary)
-                        if tempTarget.targetBottom != tempTarget.targetTop {
-                            Text("-").font(.caption)
-                                .foregroundColor(.secondary)
-                            Text(
-                                targetFormatter
-                                    .string(from: (tempTarget.targetTop ?? 0) as NSNumber)! + " \(state.units.rawValue)"
+                        Text(
+                            tempTarget.displayName + " " + (
+                                state.units == .mmolL ? (unitString + " mmol/L ") : state.units.rawValue
                             )
-                            .font(.caption)
-                            .foregroundColor(.secondary)
-                        } else {
-                            Text(state.units.rawValue).font(.caption)
-                                .foregroundColor(.secondary)
-                        }
+                        ).font(.caption).foregroundColor(.secondary)
                     }
                 }
 
                 Spacer()
 
-                Text(
-                    (fetchedPercent.first?.enabled ?? false) ?
-                        "\((fetchedPercent.first?.percentage ?? 100).formatted(.number)) % " : ""
-                )
-                .font(.system(size: 12, weight: .bold))
-                .foregroundColor(.orange)
-                .padding(.trailing, 2)
                 if fetchedPercent.first?.enabled ?? false {
                     Text(
-                        (tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") == "0" ?
-                            "Perpetual" :
-                            (tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") + " min"
+                        "\((fetchedPercent.first?.percentage ?? 100).formatted(.number)) % " +
+                            (
+                                (tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") == "0" ?
+                                    "" :
+                                    (tirFormatter.string(from: (fetchedPercent.first?.duration ?? 0) as NSNumber) ?? "") + " min"
+                            )
                     )
                     .font(.system(size: 12))
                     .foregroundColor(.orange)