瀏覽代碼

Merge pull request #292 from nightscout/dev

Merge dev into alpha
Deniz Cengiz 1 年之前
父節點
當前提交
3a1360fcfa

+ 7 - 0
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -415,6 +415,9 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
     func pumpManagerWillDeactivate(_: PumpManager) {
         dispatchPrecondition(condition: .onQueue(processQueue))
         pumpManager = nil
+        broadcaster.notify(PumpDeactivatedObserver.self, on: processQueue) {
+            $0.pumpDeactivatedDidChange()
+        }
     }
 
     func pumpManager(_: PumpManager, didUpdatePumpRecordsBasalProfileStartEvents _: Bool) {}
@@ -628,3 +631,7 @@ protocol PumpReservoirObserver {
 protocol PumpBatteryObserver {
     func pumpBatteryDidChange(_ battery: Battery)
 }
+
+protocol PumpDeactivatedObserver {
+    func pumpDeactivatedDidChange()
+}

+ 16 - 9
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -107,6 +107,7 @@ extension Home {
             broadcaster.register(EnactedSuggestionObserver.self, observer: self)
             broadcaster.register(PumpBatteryObserver.self, observer: self)
             broadcaster.register(PumpReservoirObserver.self, observer: self)
+            broadcaster.register(PumpDeactivatedObserver.self, observer: self)
 
             animatedBackground = settingsManager.settings.animatedBackground
 
@@ -169,7 +170,7 @@ extension Home {
                     } else {
                         self.setupBattery()
                         self.setupReservoir()
-                        self.displaypumpStatusHighlightMessage()
+                        self.displayPumpStatusHighlightMessage()
                     }
                 }
                 .store(in: &lifetime)
@@ -352,13 +353,14 @@ extension Home {
 
         /// Display the eventual status message provided by the manager of the pump
         /// Only display if state is warning or critical message else return nil
-        private func displaypumpStatusHighlightMessage() {
+        private func displayPumpStatusHighlightMessage(_ didDeactivate: Bool = false) {
             DispatchQueue.main.async { [weak self] in
                 guard let self = self else { return }
-                if let statusHL = self.provider.deviceManager.pumpManager?.pumpStatusHighlight,
-                   statusHL.state == .warning || statusHL.state == .critical
+                if let statusHighlight = self.provider.deviceManager.pumpManager?.pumpStatusHighlight,
+                   statusHighlight.state == .warning || statusHighlight.state == .critical, !didDeactivate
                 {
-                    pumpStatusHighlightMessage = (statusHL.state == .warning ? "⚠️\n" : "‼️\n") + statusHL.localizedMessage
+                    pumpStatusHighlightMessage = (statusHighlight.state == .warning ? "⚠️\n" : "‼️\n") + statusHighlight
+                        .localizedMessage
                 } else {
                     pumpStatusHighlightMessage = nil
                 }
@@ -395,7 +397,8 @@ extension Home.StateModel:
     CarbsObserver,
     EnactedSuggestionObserver,
     PumpBatteryObserver,
-    PumpReservoirObserver
+    PumpReservoirObserver,
+    PumpDeactivatedObserver
 {
     func glucoseDidUpdate(_: [BloodGlucose]) {
         setupGlucose()
@@ -429,7 +432,7 @@ extension Home.StateModel:
         setupBasals()
         setupBoluses()
         setupSuspensions()
-        displaypumpStatusHighlightMessage()
+        displayPumpStatusHighlightMessage()
     }
 
     func pumpSettingsDidChange(_: PumpSettings) {
@@ -455,12 +458,16 @@ extension Home.StateModel:
 
     func pumpBatteryDidChange(_: Battery) {
         setupBattery()
-        displaypumpStatusHighlightMessage()
+        displayPumpStatusHighlightMessage()
     }
 
     func pumpReservoirDidChange(_: Decimal) {
         setupReservoir()
-        displaypumpStatusHighlightMessage()
+        displayPumpStatusHighlightMessage()
+    }
+
+    func pumpDeactivatedDidChange() {
+        displayPumpStatusHighlightMessage(true)
     }
 }
 

+ 31 - 5
FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigStateModel.swift

@@ -84,6 +84,24 @@ extension NightscoutConfig {
             return NightscoutAPI(url: url, secret: secret)
         }
 
+        private func getMedianTarget(
+            lowTargetValue: Decimal,
+            lowTargetTime: String,
+            highTarget: [NightscoutTimevalue],
+            units: GlucoseUnits
+        ) -> Decimal {
+            if let idx = highTarget.firstIndex(where: { $0.time == lowTargetTime }) {
+                let median = (lowTargetValue + highTarget[idx].value) / 2
+                switch units {
+                case .mgdL:
+                    return Decimal(round(Double(median)))
+                case .mmolL:
+                    return Decimal(round(Double(median) * 10) / 10)
+                }
+            }
+            return lowTargetValue
+        }
+
         func importSettings() {
             guard let nightscout = nightscoutAPI else {
                 saveError("Can't access nightscoutAPI")
@@ -134,8 +152,10 @@ extension NightscoutConfig {
                     do {
                         let fetchedProfileStore = try jsonDecoder.decode([FetchedNightscoutProfileStore].self, from: data)
                         let loop = fetchedProfileStore.first?.enteredBy.contains("Loop")
-                        guard let fetchedProfile: FetchedNightscoutProfile = fetchedProfileStore.first?
-                            .store[loop! ? "Default" : "default"]
+                        guard let fetchedProfile: FetchedNightscoutProfile =
+                            (fetchedProfileStore.first?.store["default"] != nil) ?
+                            fetchedProfileStore.first?.store["default"] :
+                            fetchedProfileStore.first?.store["Default"]
                         else {
                             error = "\nCan't find the default Nightscout Profile."
                             group.leave()
@@ -220,9 +240,15 @@ extension NightscoutConfig {
 
                         let targets = fetchedProfile.target_low
                             .map { target -> BGTargetEntry in
-                                BGTargetEntry(
-                                    low: target.value,
-                                    high: target.value,
+                                let median = loop! ? self.getMedianTarget(
+                                    lowTargetValue: target.value,
+                                    lowTargetTime: target.time,
+                                    highTarget: fetchedProfile.target_high,
+                                    units: self.units
+                                ) : target.value
+                                return BGTargetEntry(
+                                    low: median,
+                                    high: median,
                                     start: target.time,
                                     offset: self.offset(target.time) / 60
                                 ) }

+ 1 - 1
OmniBLE

@@ -1 +1 @@
-Subproject commit 91abd9aba338903cc7bccd3a4c9df5dc4452cc1f
+Subproject commit 85fc3c6d4805d580acdf6592b220717b6e842558

+ 1 - 1
OmniKit

@@ -1 +1 @@
-Subproject commit f51fe354ea6739ee09de922ed836d6844545b610
+Subproject commit a80e38b1b7f203014b461f8aff8cead2c067e39d