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

Extend device data update for pump simulator for battery handling

Deniz Cengiz 1 год назад
Родитель
Сommit
e1e4498e2f

+ 44 - 1
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -97,6 +97,44 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
                 }
                 if let simulatorPump = pumpManager as? MockPumpManager {
                     pumpDisplayState.value = PumpDisplayState(name: simulatorPump.localizedTitle, image: simulatorPump.smallImage)
+                    pumpName.send(simulatorPump.localizedTitle)
+                    storage.save(Decimal(simulatorPump.pumpReservoirCapacity), as: OpenAPS.Monitor.reservoir)
+                    DispatchQueue.main.async {
+                        self.broadcaster.notify(PumpReservoirObserver.self, on: .main) {
+                            $0.pumpReservoirDidChange(Decimal(simulatorPump.state.reservoirUnitsRemaining))
+                        }
+                    }
+                    let batteryPercent = Int((simulatorPump.state.pumpBatteryChargeRemaining ?? 1) * 100)
+                    let battery = Battery(
+                        percent: batteryPercent,
+                        voltage: nil,
+                        string: batteryPercent >= 10 ? .normal : .low,
+                        display: simulatorPump.state.pumpBatteryChargeRemaining != nil
+                    )
+                    Task {
+                        await self.privateContext.perform {
+                            let saveBatteryToCoreData = OpenAPS_Battery(context: self.privateContext)
+                            saveBatteryToCoreData.id = UUID()
+                            saveBatteryToCoreData.date = Date()
+                            saveBatteryToCoreData.percent = Int16(batteryPercent)
+                            saveBatteryToCoreData.voltage = nil
+                            saveBatteryToCoreData.status = batteryPercent >= 10 ? BatteryState.normal.rawValue : BatteryState
+                                .low.rawValue
+                            saveBatteryToCoreData.display = simulatorPump.state.pumpBatteryChargeRemaining != nil
+
+                            do {
+                                guard self.privateContext.hasChanges else { return }
+                                try self.privateContext.save()
+                            } catch {
+                                print(error.localizedDescription)
+                            }
+                        }
+                    }
+                    DispatchQueue.main.async {
+                        self.broadcaster.notify(PumpBatteryObserver.self, on: .main) {
+                            $0.pumpBatteryDidChange(battery)
+                        }
+                    }
                 }
             } else {
                 pumpDisplayState.value = nil
@@ -337,7 +375,6 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
             settingsManager.updateInsulinCurve(status.insulinType)
         }
 
-        let batteryPercent = Int((status.pumpBatteryChargeRemaining ?? 1) * 100)
         broadcaster.notify(PumpTimeZoneObserver.self, on: processQueue) {
             $0.pumpTimeZoneDidChange(status.timeZone)
         }
@@ -406,6 +443,12 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
                 storage.save(startTime, as: OpenAPS.Monitor.podAge)
             }
         }
+
+        if let simulatorPump = pumpManager as? MockPumpManager {
+            broadcaster.notify(PumpReservoirObserver.self, on: processQueue) {
+                $0.pumpReservoirDidChange(Decimal(simulatorPump.state.reservoirUnitsRemaining))
+            }
+        }
     }
 
     func pumpManagerWillDeactivate(_: PumpManager) {

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

@@ -199,6 +199,7 @@ extension Home {
                     } else {
                         self.setupReservoir()
                         self.displayPumpStatusHighlightMessage()
+                        self.setupBatteryArray()
                     }
                 }
                 .store(in: &lifetime)
@@ -461,6 +462,7 @@ extension Home.StateModel:
         tins = settingsManager.settings.tins
         cgmAvailable = (fetchGlucoseManager.cgmGlucoseSourceType != CGMType.none)
         displayPumpStatusHighlightMessage()
+        setupBatteryArray()
     }
 
     // TODO: is this ever really triggered? react to MOC changes?
@@ -470,6 +472,7 @@ extension Home.StateModel:
 
     func pumpSettingsDidChange(_: PumpSettings) {
         setupPumpSettings()
+        setupBatteryArray()
     }
 
     func basalProfileDidChange(_: [BasalProfileEntry]) {
@@ -487,6 +490,7 @@ extension Home.StateModel:
 
     func pumpDeactivatedDidChange() {
         displayPumpStatusHighlightMessage(true)
+        batteryFromPersistence = []
     }
 
     func pumpTimeZoneDidChange(_: TimeZone) {

+ 2 - 2
FreeAPS/Sources/Modules/Home/View/Header/PumpView.swift

@@ -8,7 +8,7 @@ struct PumpView: View {
     @Binding var timerDate: Date
     @Binding var timeZone: TimeZone?
     @Binding var pumpStatusHighlightMessage: String?
-    var battery: [OpenAPS_Battery]
+    @Binding var battery: [OpenAPS_Battery]
 
     @Environment(\.colorScheme) var colorScheme
 
@@ -86,7 +86,7 @@ struct PumpView: View {
                     }
                 }
 
-                if (battery.first?.display) != nil, expiresAtDate == nil {
+                if (battery.first?.display) != nil, let shouldBatteryDisplay = battery.first?.display, shouldBatteryDisplay {
                     HStack {
                         Image(systemName: "battery.100")
                             .font(.system(size: 16))

+ 2 - 2
Trio.xcworkspace/xcshareddata/swiftpm/Package.resolved

@@ -1,5 +1,5 @@
 {
-  "originHash" : "59ac7eba66375d6eb406e758cb0b9964f4b3b0ae45c5665596f00384c32262b9",
+  "originHash" : "f5c836c216c4ca7d356e3777e58d6d4f9502b03f3974891349eb775f4c4cf750",
   "pins" : [
     {
       "identity" : "cryptoswift",
@@ -49,7 +49,7 @@
     {
       "identity" : "swiftcharts",
       "kind" : "remoteSourceControl",
-      "location" : "https://github.com/ivanschuetz/SwiftCharts.git",
+      "location" : "https://github.com/ivanschuetz/SwiftCharts",
       "state" : {
         "branch" : "master",
         "revision" : "c354c1945bb35a1f01b665b22474f6db28cba4a2"