Kaynağa Gözat

Bolus progress on omnipod

Ivan Valkou 5 yıl önce
ebeveyn
işleme
459d8c41b1

+ 11 - 9
FreeAPS/Sources/APS/APSManager.swift

@@ -120,6 +120,13 @@ final class BaseAPSManager: APSManager, Injectable {
                 self.processError($0)
             }
             .store(in: &lifetime)
+
+        deviceDataManager.bolusTrigger
+            .receive(on: processQueue)
+            .sink {
+                self.createBolusReporter()
+            }
+            .store(in: &lifetime)
     }
 
     func heartbeat(date: Date, force: Bool) {
@@ -289,10 +296,8 @@ final class BaseAPSManager: APSManager, Injectable {
                     self.determineBasal().sink { _ in }.store(in: &self.lifetime)
                 }
             }
-        } receiveValue: { _ in
-            self.createBolusReporter()
-        }
-        .store(in: &lifetime)
+        } receiveValue: { _ in }
+            .store(in: &lifetime)
     }
 
     func enactTempBasal(rate: Double, duration: TimeInterval) {
@@ -457,11 +462,8 @@ final class BaseAPSManager: APSManager, Injectable {
                 return Just(()).setFailureType(to: Error.self)
                     .eraseToAnyPublisher()
             }
-            return pump.enactBolus(units: Double(units), automatic: true).map { _ in
-                self.createBolusReporter()
-                return ()
-            }
-            .eraseToAnyPublisher()
+            return pump.enactBolus(units: Double(units), automatic: true).map { _ in () }
+                .eraseToAnyPublisher()
         }()
 
         basalPublisher

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

@@ -13,6 +13,7 @@ protocol DeviceDataManager {
     var pumpManager: PumpManagerUI? { get set }
     var pumpDisplayState: CurrentValueSubject<PumpDisplayState?, Never> { get }
     var recommendsLoop: PassthroughSubject<Void, Never> { get }
+    var bolusTrigger: PassthroughSubject<Void, Never> { get }
     var errorSubject: PassthroughSubject<Error, Never> { get }
     var pumpName: CurrentValueSubject<String, Never> { get }
     var pumpExpiresAtDate: CurrentValueSubject<Date?, Never> { get }
@@ -44,6 +45,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         .distantPast
 
     let recommendsLoop = PassthroughSubject<Void, Never>()
+    let bolusTrigger = PassthroughSubject<Void, Never>()
     let errorSubject = PassthroughSubject<Error, Never>()
 
     var pumpManager: PumpManagerUI? {
@@ -182,6 +184,10 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
         debug(.deviceManager, "New pump status Bolus: \(status.bolusState)")
         debug(.deviceManager, "New pump status Basal: \(String(describing: status.basalDeliveryState))")
 
+        if case .inProgress = status.bolusState {
+            bolusTrigger.send()
+        }
+
         let batteryPercent = Int((status.pumpBatteryChargeRemaining ?? 1) * 100)
         let battery = Battery(
             percent: batteryPercent,
@@ -229,6 +235,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
         completion: @escaping (_ error: Error?) -> Void
     ) {
         dispatchPrecondition(condition: .onQueue(processQueue))
+        debug(.deviceManager, "New pump events: \(events)")
         pumpHistoryStorage.storePumpEvents(events)
         lastEventDate = events.last?.date
         completion(nil)