Przeglądaj źródła

pump status again

Ivan Valkou 5 lat temu
rodzic
commit
1db903b8ca

+ 21 - 15
FreeAPS/Sources/APS/APSManager.swift

@@ -265,10 +265,6 @@ final class BaseAPSManager: APSManager, Injectable {
     }
 
     private func enactSuggested() {
-        guard verifyStatus() else {
-            return
-        }
-
         guard let pump = pumpManager,
               let suggested = try? storage.retrieve(
                   OpenAPS.Enact.suggested,
@@ -278,6 +274,11 @@ final class BaseAPSManager: APSManager, Injectable {
             return
         }
 
+        guard verifyStatus() else {
+            reportEnacted(suggestion: suggested, received: false)
+            return
+        }
+
         let basalPublisher: AnyPublisher<Void, Error> = {
             guard let rate = suggested.rate, let duration = suggested.duration else {
                 return Just(()).setFailureType(to: Error.self)
@@ -308,13 +309,17 @@ final class BaseAPSManager: APSManager, Injectable {
                 }
             } receiveValue: { [weak self] in
                 debug(.apsManager, "Loop succeeded")
-                var enacted = suggested
-                enacted.timestamp = Date()
-                enacted.recieved = true
-                try? self?.storage.save(enacted, as: OpenAPS.Enact.enacted)
-                self?.nightscout.uploadStatus()
+                self?.reportEnacted(suggestion: suggested, received: true)
             }.store(in: &lifetime)
     }
+
+    private func reportEnacted(suggestion: Suggestion, received: Bool) {
+        var enacted = suggestion
+        enacted.timestamp = Date()
+        enacted.recieved = received
+        try? storage.save(enacted, as: OpenAPS.Enact.enacted)
+        nightscout.uploadStatus()
+    }
 }
 
 private extension PumpManager {
@@ -371,11 +376,12 @@ private extension PumpManager {
 
 extension BaseAPSManager: PumpManagerStatusObserver {
     func pumpManager(_: PumpManager, didUpdate status: PumpManagerStatus, oldStatus: PumpManagerStatus) {
-        if oldStatus.pumpStatus != status.pumpStatus {
-            let percent = Int((status.pumpBatteryChargeRemaining ?? 1) * 100)
-            let battery = Battery(percent: percent, voltage: nil, string: percent > 10 ? .normal : .low)
-            try? storage.save(battery, as: OpenAPS.Monitor.battery)
-            try? storage.save(status.pumpStatus, as: OpenAPS.Monitor.status)
+        let percent = Int((status.pumpBatteryChargeRemaining ?? 1) * 100)
+        let battery = Battery(percent: percent, voltage: nil, string: percent > 10 ? .normal : .low)
+        try? storage.save(battery, as: OpenAPS.Monitor.battery)
+        try? storage.save(status.pumpStatus, as: OpenAPS.Monitor.status)
+        if oldStatus.pumpStatus.status != status.pumpStatus.status {
+            debug(.apsManager, "Pump status did change: \(status.pumpStatus)")
             nightscout.uploadStatus()
         }
     }
@@ -386,6 +392,6 @@ extension PumpManagerStatus {
         let bolusing = bolusState != .noBolus
         let suspended = basalDeliveryState?.isSuspended ?? true
         let type = suspended ? StatusType.suspended : (bolusing ? .bolusing : .normal)
-        return PumpStatus(status: type, bolusing: bolusing, suspended: suspended, timestamp: nil)
+        return PumpStatus(status: type, bolusing: bolusing, suspended: suspended, timestamp: Date())
     }
 }

+ 1 - 2
FreeAPS/Sources/Services/Network/NightscoutManager.swift

@@ -124,8 +124,7 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
 
         let battery = try? storage.retrieve(OpenAPS.Monitor.battery, as: Battery.self)
         let reservoir = Decimal(from: storage.retrieveRaw(OpenAPS.Monitor.reservoir) ?? "0")
-        var pumpStatus = try? storage.retrieve(OpenAPS.Monitor.status, as: PumpStatus.self)
-        pumpStatus?.timestamp = Date()
+        let pumpStatus = try? storage.retrieve(OpenAPS.Monitor.status, as: PumpStatus.self)
 
         let pump = NSPumpStatus(clock: Date(), battery: battery, reservoir: reservoir, status: pumpStatus)