Procházet zdrojové kódy

Fix WatchManager to work w/o overrides (#81)

* Fix WatchManager to work w/o overrides for Garmin Watches
Robert před 1 rokem
rodič
revize
7e75357ea4

+ 18 - 15
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -195,28 +195,30 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
     @MainActor private func configureState() async {
         let glucoseValuesIds = await fetchGlucose()
-        async let lastDeterminationIds = fetchlastDetermination()
-        async let latestOverrideId = fetchLatestOverride()
+        async let getLatestDeterminationIds = fetchlastDetermination()
+        async let getlatestOverrideId = fetchLatestOverride()
 
-        guard let lastDeterminationId = await lastDeterminationIds.first,
-              let latestOverrideId = await latestOverrideId
-        else {
-            debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to get last Determination/ last Override")
+        let latestOverrideId = await getlatestOverrideId
+
+        guard let lastDeterminationId = await getLatestDeterminationIds.first else {
+            debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to get last Determination")
             return
         }
 
         do {
             let glucoseValues: [GlucoseStored] = await CoreDataStack.shared
                 .getNSManagedObject(with: glucoseValuesIds, context: viewContext)
-
             let lastDetermination = try viewContext.existingObject(with: lastDeterminationId) as? OrefDetermination
-            let latestOverride = try viewContext.existingObject(with: latestOverrideId) as? OverrideStored
-
             let recommendedInsulin = await newBolusCalc(
                 glucoseIds: glucoseValuesIds,
                 determinationId: lastDeterminationId
             )
 
+            var latestOverride: OverrideStored?
+            if let id = latestOverrideId {
+                latestOverride = try viewContext.existingObject(with: id) as? OverrideStored
+            }
+
             await MainActor.run { [weak self] in
                 guard let self = self else { return }
 
@@ -296,12 +298,13 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
                 self.state.isf = lastDetermination?.insulinSensitivity as? Decimal
 
-                if latestOverride?.enabled ?? false {
-                    let percentString = "\((latestOverride?.percentage ?? 100).formatted(.number)) %"
-                    self.state.override = percentString
-
-                } else {
-                    self.state.override = "100 %"
+                if let latestOverride = latestOverride {
+                    if latestOverride.enabled {
+                        let percentString = "\(latestOverride.percentage.formatted(.number)) %"
+                        self.state.override = percentString
+                    } else {
+                        self.state.override = "100 %"
+                    }
                 }
 
                 self.sendState()