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

Do not update pump by glucose if it has BLE heartbeat

Ivan Valkou 5 лет назад
Родитель
Сommit
be9b478d8b

+ 3 - 0
FreeAPS/Sources/APS/APSManager.swift

@@ -10,6 +10,7 @@ protocol APSManager {
     func autotune() -> AnyPublisher<Autotune?, Never>
     func enactBolus(amount: Double, isSMB: Bool)
     var pumpManager: PumpManagerUI? { get set }
+    var hasBLEHeartbeat: Bool { get }
     var pumpDisplayState: CurrentValueSubject<PumpDisplayState?, Never> { get }
     var pumpName: CurrentValueSubject<String, Never> { get }
     var isLooping: CurrentValueSubject<Bool, Never> { get }
@@ -78,6 +79,8 @@ final class BaseAPSManager: APSManager, Injectable {
         set { deviceDataManager.pumpManager = newValue }
     }
 
+    var hasBLEHeartbeat: Bool { deviceDataManager.hasBLEHeartbeat }
+
     let isLooping = CurrentValueSubject<Bool, Never>(false)
     let lastLoopDateSubject = PassthroughSubject<Date, Never>()
     let lastError = CurrentValueSubject<Error?, Never>(nil)

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

@@ -11,6 +11,7 @@ import UserNotifications
 
 protocol DeviceDataManager {
     var pumpManager: PumpManagerUI? { get set }
+    var hasBLEHeartbeat: Bool { get }
     var pumpDisplayState: CurrentValueSubject<PumpDisplayState?, Never> { get }
     var recommendsLoop: PassthroughSubject<Void, Never> { get }
     var bolusTrigger: PassthroughSubject<Bool, Never> { get }
@@ -72,6 +73,10 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         }
     }
 
+    var hasBLEHeartbeat: Bool {
+        (pumpManager as? MockPumpManager) == nil
+    }
+
     let pumpDisplayState = CurrentValueSubject<PumpDisplayState?, Never>(nil)
     let pumpExpiresAtDate = CurrentValueSubject<Date?, Never>(nil)
     let pumpName = CurrentValueSubject<String, Never>("Pump")

+ 1 - 0
FreeAPS/Sources/APS/FetchAnnouncementsManager.swift

@@ -42,6 +42,7 @@ final class BaseFetchAnnouncementsManager: FetchAnnouncementsManager, Injectable
                 }
             }
             .store(in: &lifetime)
+        timer.fire()
         timer.resume()
     }
 }

+ 4 - 1
FreeAPS/Sources/APS/FetchGlucoseManager.swift

@@ -44,10 +44,13 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
                 if !filtered.isEmpty {
                     debug(.nightscout, "New glucose found")
                     self.glucoseStorage.storeGlucose(filtered)
-                    self.apsManager.heartbeat(date: date, force: false)
+                    if !self.apsManager.hasBLEHeartbeat {
+                        self.apsManager.heartbeat(date: date, force: false)
+                    }
                 }
             }
             .store(in: &lifetime)
+        timer.fire()
         timer.resume()
     }
 

+ 1 - 0
FreeAPS/Sources/APS/FetchTreatmentsManager.swift

@@ -41,6 +41,7 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
                 }
             }
             .store(in: &lifetime)
+        timer.fire()
         timer.resume()
     }
 }

+ 2 - 2
FreeAPS/Sources/Helpers/DispatchTimer.swift

@@ -19,12 +19,12 @@ class DispatchTimer {
         let timer = DispatchSource.makeTimerSource(queue: queue)
         timer.schedule(deadline: .now() + timeInterval, repeating: timeInterval)
         timer.setEventHandler(handler: { [weak self] in
-            self?.fireEvent()
+            self?.fire()
         })
         return timer
     }()
 
-    private func fireEvent() {
+    func fire() {
         subject.send(Date())
         eventHandler?()
     }