Kaynağa Gözat

Change handling of data and threading; small fixes

Co-Authored-By: polscm32 <polscm32@users.noreply.github.com>
Deniz Cengiz 1 yıl önce
ebeveyn
işleme
7ef01a7833

+ 1 - 1
FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift

@@ -241,7 +241,7 @@ extension Bolus {
             let now = Date()
             let calendar = Calendar.current
             let dateFormatter = DateFormatter()
-            dateFormatter.dateFormat = "HH:mm:ss"
+            dateFormatter.dateFormat = "HH:mm"
             dateFormatter.timeZone = TimeZone.current
 
             let entries: [(start: String, value: Decimal)]

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

@@ -499,7 +499,7 @@ extension Home {
             let now = Date()
             let calendar = Calendar.current
             let dateFormatter = DateFormatter()
-            dateFormatter.dateFormat = "HH:mm:ss"
+            dateFormatter.dateFormat = "HH:mm"
             dateFormatter.timeZone = TimeZone.current
 
             let bgTargets = await provider.getBGTarget()

+ 12 - 12
FreeAPS/Sources/Services/LiveActivity/Data/DataManager.swift

@@ -4,7 +4,7 @@ import Foundation
 
 @available(iOS 16.2, *)
 extension LiveActivityBridge {
-    func fetchAndMapGlucose() async {
+    func fetchAndMapGlucose() async -> [GlucoseData] {
         let results = await CoreDataStack.shared.fetchEntitiesAsync(
             ofType: GlucoseStored.self,
             onContext: context,
@@ -14,18 +14,18 @@ extension LiveActivityBridge {
             fetchLimit: 72
         )
 
-        await context.perform {
+        return await context.perform {
             guard let glucoseResults = results as? [GlucoseStored] else {
-                return
+                return []
             }
 
-            self.glucoseFromPersistence = glucoseResults.map {
+            return glucoseResults.map {
                 GlucoseData(glucose: Int($0.glucose), date: $0.date ?? Date(), direction: $0.directionEnum)
             }
         }
     }
 
-    func fetchAndMapDetermination() async {
+    func fetchAndMapDetermination() async -> DeterminationData? {
         let results = await CoreDataStack.shared.fetchEntitiesAsync(
             ofType: OrefDetermination.self,
             onContext: context,
@@ -36,12 +36,12 @@ extension LiveActivityBridge {
             propertiesToFetch: ["iob", "cob", "currentTarget"]
         )
 
-        await context.perform {
+        return await context.perform {
             guard let determinationResults = results as? [[String: Any]] else {
-                return
+                return nil
             }
 
-            self.determination = determinationResults.first.map {
+            return determinationResults.first.map {
                 DeterminationData(
                     cob: ($0["cob"] as? Int) ?? 0,
                     iob: ($0["iob"] as? NSDecimalNumber)?.decimalValue ?? 0,
@@ -51,7 +51,7 @@ extension LiveActivityBridge {
         }
     }
 
-    func fetchAndMapOverride() async {
+    func fetchAndMapOverride() async -> OverrideData? {
         let results = await CoreDataStack.shared.fetchEntitiesAsync(
             ofType: OverrideStored.self,
             onContext: context,
@@ -62,12 +62,12 @@ extension LiveActivityBridge {
             propertiesToFetch: ["enabled", "name", "target", "date", "duration"]
         )
 
-        await context.perform {
+        return await context.perform {
             guard let overrideResults = results as? [[String: Any]] else {
-                return
+                return nil
             }
 
-            self.isOverridesActive = overrideResults.first.map {
+            return overrideResults.first.map {
                 OverrideData(
                     isActive: $0["enabled"] as? Bool ?? false,
                     overrideName: $0["name"] as? String ?? "Override",

+ 40 - 33
FreeAPS/Sources/Services/LiveActivity/LiveActivityBridge.swift

@@ -43,7 +43,7 @@ import UIKit
     private var currentActivity: ActiveActivity?
     private var latestGlucose: GlucoseData?
     var glucoseFromPersistence: [GlucoseData]?
-    var isOverridesActive: OverrideData?
+    var override: OverrideData?
     var widgetItems: [LiveActivityAttributes.LiveActivityItem]?
 
     let context = CoreDataStack.shared.newTaskContext()
@@ -94,7 +94,7 @@ import UIKit
 
     func settingsDidChange(_: FreeAPSSettings) {
         Task {
-            await updateContentState()
+            await updateContentState(determination)
         }
     }
 
@@ -122,19 +122,19 @@ import UIKit
     }
 
     private func cobOrIobDidUpdate() {
-        Task {
-            await fetchAndMapDetermination()
+        Task { @MainActor in
+            self.determination = await fetchAndMapDetermination()
             if let determination = determination {
-                await self.pushDeterminationUpdate(determination)
+                await self.updateContentState(determination)
             }
         }
     }
 
     private func overridesDidUpdate() {
-        Task {
-            await fetchAndMapOverride()
+        Task { @MainActor in
+            self.override = await fetchAndMapOverride()
             if let determination = determination {
-                await self.pushDeterminationUpdate(determination)
+                await self.updateContentState(determination)
             }
         }
     }
@@ -147,40 +147,53 @@ import UIKit
         }
     }
 
-    @MainActor private func updateContentState() async {
+    @MainActor private func updateContentState<T>(_ update: T) async {
         guard let latestGlucose = latestGlucose else { return }
 
-        let content = LiveActivityAttributes.ContentState(
-            new: latestGlucose,
-            prev: latestGlucose,
-            units: settings.units,
-            chart: glucoseFromPersistence ?? [],
-            settings: settings,
-            determination: determination,
-            override: isOverridesActive,
-            widgetItems: widgetItems
-        )
+        var content: LiveActivityAttributes.ContentState?
+
+        if let determination = update as? DeterminationData {
+            content = LiveActivityAttributes.ContentState(
+                new: latestGlucose,
+                prev: latestGlucose,
+                units: settings.units,
+                chart: glucoseFromPersistence ?? [],
+                settings: settings,
+                determination: determination,
+                override: override,
+                widgetItems: widgetItems
+            )
+        } else if let override = update as? OverrideData {
+            content = LiveActivityAttributes.ContentState(
+                new: latestGlucose,
+                prev: latestGlucose,
+                units: settings.units,
+                chart: glucoseFromPersistence ?? [],
+                settings: settings,
+                determination: determination,
+                override: override,
+                widgetItems: widgetItems
+            )
+        }
 
         if let content = content {
-            Task {
-                await pushUpdate(content)
-            }
+            await pushUpdate(content)
         }
     }
 
     @MainActor private func updateLiveActivityOrder() async {
         Task {
-            await updateContentState()
+            await updateContentState(determination)
         }
     }
 
     private func setupGlucoseArray() {
-        Task {
+        Task { @MainActor in
             // Fetch and map glucose to GlucoseData struct
-            await fetchAndMapGlucose()
+            self.glucoseFromPersistence = await fetchAndMapGlucose()
 
             // Push the update to the Live Activity
-            await glucoseDidUpdate(glucoseFromPersistence ?? [])
+            glucoseDidUpdate(glucoseFromPersistence ?? [])
         }
     }
 
@@ -270,12 +283,6 @@ import UIKit
         }
     }
 
-    @MainActor private func pushDeterminationUpdate(_: DeterminationData) async {
-        Task {
-            await updateContentState()
-        }
-    }
-
     /// ends all live activities immediateny
     private func endActivity() async {
         if let currentActivity {
@@ -322,7 +329,7 @@ extension LiveActivityBridge {
                 chart: glucose,
                 settings: settings,
                 determination: determination,
-                override: isOverridesActive,
+                override: override,
                 widgetItems: widgetItems
             )
 

+ 1 - 1
FreeAPS/Sources/Services/Network/TidepoolManager.swift

@@ -531,7 +531,7 @@ extension BaseTidepoolManager {
         let now = Date()
         let calendar = Calendar.current
         let dateFormatter = DateFormatter()
-        dateFormatter.dateFormat = "HH:mm:ss"
+        dateFormatter.dateFormat = "HH:mm"
         dateFormatter.timeZone = TimeZone.current
 
         let basalEntries = storage.retrieve(OpenAPS.Settings.basalProfile, as: [BasalProfileEntry].self)

+ 2 - 2
LiveActivity/Views/LiveActivityChartView.swift

@@ -90,7 +90,7 @@ struct LiveActivityChartView: View {
             plotContent
                 .background(
                     RoundedRectangle(cornerRadius: 12)
-                        .fill(colorScheme == .light ? Color.black.opacity(0.275) : .clear)
+                        .fill(colorScheme == .light ? Color.black.opacity(0.2) : .clear)
                 )
                 .clipShape(RoundedRectangle(cornerRadius: 12))
         }
@@ -98,7 +98,7 @@ struct LiveActivityChartView: View {
         .chartXAxis {
             AxisMarks(position: .automatic) { _ in
                 AxisGridLine(stroke: .init(lineWidth: 0.65, dash: [2, 3]))
-                    .foregroundStyle(Color.white.opacity(colorScheme == .light ? 1 : 0.5))
+                    .foregroundStyle(Color.primary.opacity(colorScheme == .light ? 1 : 0.5))
             }
         }
     }