Explorar o código

Release/0.1.20 (#45)

* Fix charts crash

* pump sync fix

* bump version
Ivan %!s(int64=5) %!d(string=hai) anos
pai
achega
7a1751f291

+ 1 - 1
FreeAPS/Resources/Config.xcconfig

@@ -1 +1 @@
-BUILD_VERSION = 0.1.19
+BUILD_VERSION = 0.1.20

+ 26 - 21
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -34,7 +34,7 @@ private let staticPumpManagersByIdentifier: [String: PumpManagerUI.Type] = stati
 private let accessLock = NSRecursiveLock(label: "BaseDeviceDataManager.accessLock")
 
 final class BaseDeviceDataManager: DeviceDataManager, Injectable {
-    private let processQueue = DispatchQueue(label: "BaseDeviceDataManager.processQueue")
+    private let processQueue = DispatchQueue.markedQueue(label: "BaseDeviceDataManager.processQueue")
     @Injected() private var pumpHistoryStorage: PumpHistoryStorage!
     @Injected() private var storage: FileStorage!
     @Injected() private var broadcaster: Broadcaster!
@@ -95,30 +95,32 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
     }
 
     func heartbeat(date: Date, force: Bool) {
-        if force {
-            updatePumpData()
-            return
-        }
+        processQueue.safeSync {
+            if force {
+                updatePumpData()
+                return
+            }
 
-        var updateInterval: TimeInterval = 5.minutes.timeInterval
+            var updateInterval: TimeInterval = 5.minutes.timeInterval
 
-        switch lastHeartBeatTime.timeIntervalSince(date) {
-        case let interval where interval < -10.minutes.timeInterval:
-            break
-        case let interval where interval < -5.minutes.timeInterval:
-            updateInterval = 1.minutes.timeInterval
-        default:
-            break
-        }
+            switch lastHeartBeatTime.timeIntervalSince(date) {
+            case let interval where interval < -10.minutes.timeInterval:
+                break
+            case let interval where interval < -5.minutes.timeInterval:
+                updateInterval = 1.minutes.timeInterval
+            default:
+                break
+            }
 
-        let interval = date.timeIntervalSince(lastHeartBeatTime)
-        guard interval >= updateInterval else {
-            debug(.deviceManager, "Last hearbeat \(interval / 60) min ago, skip updating the pump data")
-            return
-        }
+            let interval = date.timeIntervalSince(lastHeartBeatTime)
+            guard interval >= updateInterval else {
+                debug(.deviceManager, "Last hearbeat \(interval / 60) min ago, skip updating the pump data")
+                return
+            }
 
-        lastHeartBeatTime = date
-        updatePumpData()
+            lastHeartBeatTime = date
+            updatePumpData()
+        }
     }
 
     private func updatePumpData() {
@@ -182,6 +184,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
     }
 
     func pumpManager(_ pumpManager: PumpManager, didUpdate status: PumpManagerStatus, oldStatus _: PumpManagerStatus) {
+        dispatchPrecondition(condition: .onQueue(processQueue))
         debug(.deviceManager, "New pump status Bolus: \(status.bolusState)")
         debug(.deviceManager, "New pump status Basal: \(String(describing: status.basalDeliveryState))")
 
@@ -220,6 +223,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
     }
 
     func pumpManagerWillDeactivate(_: PumpManager) {
+        dispatchPrecondition(condition: .onQueue(processQueue))
         pumpManager = nil
         pumpUpdateInProgress = false
     }
@@ -227,6 +231,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
     func pumpManager(_: PumpManager, didUpdatePumpRecordsBasalProfileStartEvents _: Bool) {}
 
     func pumpManager(_: PumpManager, didError error: PumpManagerError) {
+        dispatchPrecondition(condition: .onQueue(processQueue))
         debug(.deviceManager, "error: \(error.localizedDescription), reason: \(String(describing: error.failureReason))")
         errorSubject.send(error)
         pumpUpdateInProgress = false

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

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

+ 0 - 35
FreeAPS/Sources/Charts/Helpers/getGlucoseArrowImage().swift

@@ -1,35 +0,0 @@
-import SwiftUI
-
-func getGlucoseArrowImage(for delta: BloodGlucose.Direction) -> Image {
-    let arrow: String
-
-    let up = "arrow.up"
-    let upForward = "arrow.up.forward"
-    let forward = "arrow.forward"
-    let downForward = "arrow.down.forward"
-    let down = "arrow.down"
-    let error = "arrow.left.arrow.right"
-
-    switch delta {
-    case .doubleUp,
-         .singleUp,
-         .tripleUp:
-        arrow = up
-    case .fortyFiveUp:
-        arrow = upForward
-    case .flat:
-        arrow = forward
-    case .fortyFiveDown:
-        arrow = downForward
-    case .doubleDown,
-         .singleDown,
-         .tripleDown:
-        arrow = down
-    case .none,
-         .notComputable,
-         .rateOutOfRange:
-        arrow = error
-    }
-
-    return Image(systemName: arrow)
-}

+ 1 - 1
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -584,7 +584,7 @@ extension MainChartView {
         }
 
         cachedMaxBasalRate = max(maxTempBasalRate, maxRegularBasalRate)
-        return cachedMaxBasalRate!
+        return cachedMaxBasalRate ?? maxBasal
     }
 
     private func calculateTempTargetsRects(fullSize: CGSize) {