|
|
@@ -15,6 +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 }
|
|
|
}
|
|
|
|
|
|
private let staticPumpManagers: [PumpManagerUI.Type] = [
|
|
|
@@ -37,6 +38,7 @@ 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 {
|
|
|
@@ -90,10 +92,25 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
|
|
|
|
|
|
private func updatePumpData() {
|
|
|
let now = Date()
|
|
|
- guard now.timeIntervalSince(lastHeartBeatTime) >= Config.loopInterval else { return }
|
|
|
+ var updateInterval: TimeInterval = 5.minutes.timeInterval
|
|
|
+
|
|
|
+ switch lastLoopDate?.timeIntervalSince(now) {
|
|
|
+ case .none:
|
|
|
+ break
|
|
|
+ case let interval? where interval < -10.minutes.timeInterval:
|
|
|
+ break
|
|
|
+ case let interval? where interval < -5.minutes.timeInterval:
|
|
|
+ updateInterval = 1.minutes.timeInterval
|
|
|
+ default:
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ guard now.timeIntervalSince(lastHeartBeatTime) >= updateInterval else { return }
|
|
|
+
|
|
|
+ lastHeartBeatTime = now
|
|
|
+
|
|
|
pumpManager?.ensureCurrentPumpData {
|
|
|
debug(.deviceManager, "Pump Data updated")
|
|
|
- self.lastHeartBeatTime = now
|
|
|
}
|
|
|
}
|
|
|
|