Procházet zdrojové kódy

new icons and dynamic update interval

Ivan Valkou před 5 roky
rodič
revize
d7cd8de1d7

binární
FreeAPS/Resources/Assets.xcassets/icons/bolus.imageset/bolus.pdf


binární
FreeAPS/Resources/Assets.xcassets/icons/bolus1.imageset/bolus1.pdf


binární
FreeAPS/Resources/Assets.xcassets/icons/carbs.imageset/carbs.pdf


binární
FreeAPS/Resources/Assets.xcassets/icons/settings1.imageset/settings1.pdf


binární
FreeAPS/Resources/Assets.xcassets/icons/target.imageset/target.pdf


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

@@ -76,6 +76,12 @@ 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 fetchAndLoop() {

+ 19 - 2
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -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
         }
     }
 

+ 8 - 2
FreeAPS/Sources/Modules/Home/HomeViewModel.swift

@@ -199,10 +199,16 @@ extension Home {
                 return
             }
 
+            let dateFormatter = DateFormatter()
+            dateFormatter.timeStyle = .short
             if closedLoop,
-               enactedSuggestion?.deliverAt == suggestion.deliverAt || (suggestion.rate == nil && suggestion.units == nil)
+               let enactedSuggestion = enactedSuggestion,
+               let timestamp = enactedSuggestion.timestamp,
+               enactedSuggestion.deliverAt == suggestion.deliverAt, suggestion.rate != nil || suggestion.units != nil
             {
-                statusTitle = "Enacted"
+                statusTitle = "Enacted at \(dateFormatter.string(from: timestamp))"
+            } else if let suggestedDate = suggestion.deliverAt {
+                statusTitle = "Suggested at \(dateFormatter.string(from: suggestedDate))"
             } else {
                 statusTitle = "Suggested"
             }