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

+ 5 - 7
FreeAPS/Sources/APS/APSManager.swift

@@ -6,7 +6,7 @@ import SwiftDate
 import Swinject
 
 protocol APSManager {
-    func fetchAndLoop()
+    func heartbeatNow()
     func autotune() -> AnyPublisher<Autotune?, Never>
     func enactBolus(amount: Double)
     var pumpManager: PumpManagerUI? { get set }
@@ -76,15 +76,13 @@ final class BaseAPSManager: APSManager, Injectable {
             }
             .store(in: &lifetime)
         pumpManager?.addStatusObserver(self, queue: processQueue)
+    }
 
-        lastLoopDate
-            .sink { date in
-                self.deviceDataManager.lastLoopDate = date
-            }
-            .store(in: &lifetime)
+    func heartbeatNow() {
+        deviceDataManager.heartbeat()
     }
 
-    func fetchAndLoop() {
+    private func fetchAndLoop() {
         if settings.allowAnnouncements {
             nightscout.fetchAnnouncements()
                 .sink { [weak self] in

+ 8 - 8
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -15,7 +15,7 @@ protocol DeviceDataManager {
     var recommendsLoop: PassthroughSubject<Void, Never> { get }
     var pumpName: CurrentValueSubject<String, Never> { get }
     var pumpExpiresAtDate: CurrentValueSubject<Date?, Never> { get }
-    var lastLoopDate: Date? { get set }
+    func heartbeat() 
 }
 
 private let staticPumpManagers: [PumpManagerUI.Type] = [
@@ -38,7 +38,6 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
     @Persisted(key: "BaseDeviceDataManager.lastHeartBeatTime") var lastHeartBeatTime: Date = .distantPast
 
     let recommendsLoop = PassthroughSubject<Void, Never>()
-    var lastLoopDate: Date?
 
     var pumpManager: PumpManagerUI? {
         didSet {
@@ -94,12 +93,10 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         let now = Date()
         var updateInterval: TimeInterval = 5.minutes.timeInterval
 
-        switch lastLoopDate?.timeIntervalSince(now) {
-        case .none:
+        switch lastHeartBeatTime.timeIntervalSince(now) {
+        case let interval where interval < -10.minutes.timeInterval:
             break
-        case let interval? where interval < -10.minutes.timeInterval:
-            break
-        case let interval? where interval < -5.minutes.timeInterval:
+        case let interval where interval < -5.minutes.timeInterval:
             updateInterval = 1.minutes.timeInterval
         default:
             return
@@ -107,8 +104,11 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
 
         guard now.timeIntervalSince(lastHeartBeatTime) >= updateInterval else { return }
 
-        lastHeartBeatTime = now
+        heartbeat()
+    }
 
+    func heartbeat() {
+        lastHeartBeatTime = Date()
         pumpManager?.ensureCurrentPumpData {
             debug(.deviceManager, "Pump Data updated")
         }

+ 1 - 1
FreeAPS/Sources/Modules/Home/HomeDataFlow.swift

@@ -7,7 +7,7 @@ enum Home {
 protocol HomeProvider: Provider {
     var suggestion: Suggestion? { get }
     var enactedSuggestion: Suggestion? { get }
-    func fetchAndLoop()
+    func heartbeatNow()
     func filteredGlucose(hours: Int) -> [BloodGlucose]
     func pumpHistory(hours: Int) -> [PumpHistoryEvent]
     func pumpSettings() -> PumpSettings

+ 2 - 2
FreeAPS/Sources/Modules/Home/HomeProvider.swift

@@ -17,8 +17,8 @@ extension Home {
             storage.retrieve(OpenAPS.Enact.enacted, as: Suggestion.self)
         }
 
-        func fetchAndLoop() {
-            apsManager.fetchAndLoop()
+        func heartbeatNow() {
+            apsManager.heartbeatNow()
         }
 
         func filteredGlucose(hours: Int) -> [BloodGlucose] {

+ 1 - 1
FreeAPS/Sources/Modules/Home/HomeViewModel.swift

@@ -102,7 +102,7 @@ extension Home {
         }
 
         func runLoop() {
-            provider.fetchAndLoop()
+            provider.heartbeatNow()
         }
 
         func addTempTarget() {