Преглед изворни кода

fix cob and iob not updating in home view

polscm32 пре 1 година
родитељ
комит
c6f99c63b7

+ 17 - 7
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -69,6 +69,7 @@ extension Home {
         @Published var carbsFromPersistence: [CarbEntryStored] = []
         @Published var fpusFromPersistence: [CarbEntryStored] = []
         @Published var determinationsFromPersistence: [OrefDetermination] = []
+        @Published var enactedAndNonEnactedDeterminations: [OrefDetermination] = []
         @Published var insulinFromPersistence: [PumpEventStored] = []
         @Published var tempBasals: [PumpEventStored] = []
         var boluses: [PumpEventStored] = []
@@ -612,31 +613,40 @@ extension Home.StateModel {
     // Setup Determinations
     private func setupDeterminationsArray() {
         Task {
-            let ids = await self.fetchDeterminations()
-            await updateDeterminationsArray(with: ids)
+            let enactedObjectIDs = await fetchDeterminations(predicate: NSPredicate.enactedDetermination)
+            let enactedAndNonEnactedObjectIDs = await fetchDeterminations(
+                predicate: NSPredicate
+                    .predicateFor30MinAgoForDetermination
+            )
+
+            await updateDeterminationsArray(with: enactedObjectIDs, keyPath: \.determinationsFromPersistence)
+            await updateDeterminationsArray(with: enactedAndNonEnactedObjectIDs, keyPath: \.enactedAndNonEnactedDeterminations)
         }
     }
 
-    private func fetchDeterminations() async -> [NSManagedObjectID] {
+    private func fetchDeterminations(predicate: NSPredicate) async -> [NSManagedObjectID] {
         CoreDataStack.shared.fetchEntities(
             ofType: OrefDetermination.self,
             onContext: context,
-            predicate: NSPredicate.enactedDetermination,
+            predicate: predicate,
             key: "deliverAt",
             ascending: false,
             fetchLimit: 1
         ).map(\.objectID)
     }
 
-    @MainActor private func updateDeterminationsArray(with IDs: [NSManagedObjectID]) {
+    @MainActor private func updateDeterminationsArray(
+        with IDs: [NSManagedObjectID],
+        keyPath: ReferenceWritableKeyPath<Home.StateModel, [OrefDetermination]>
+    ) {
         do {
             let determinationObjects = try IDs.compactMap { id in
                 try viewContext.existingObject(with: id) as? OrefDetermination
             }
-            determinationsFromPersistence = determinationObjects
+            self[keyPath: keyPath] = determinationObjects
         } catch {
             debugPrint(
-                "Home State: \(#function) \(DebuggingIdentifiers.failed)  error while updating the determinations array: \(error.localizedDescription)"
+                "Home State: \(#function) \(DebuggingIdentifiers.failed) error while updating the determinations array: \(error.localizedDescription)"
             )
         }
     }

+ 8 - 2
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -457,7 +457,10 @@ extension Home {
                         .font(.system(size: 16))
                         .foregroundColor(Color.insulin)
                     Text(
-                        (numberFormatter.string(from: (state.determinationsFromPersistence.first?.iob ?? 0) as NSNumber) ?? "0") +
+                        (
+                            numberFormatter
+                                .string(from: (state.enactedAndNonEnactedDeterminations.first?.iob ?? 0) as NSNumber) ?? "0"
+                        ) +
                             NSLocalizedString(" U", comment: "Insulin unit")
                     )
                     .font(.system(size: 16, weight: .bold, design: .rounded))
@@ -470,7 +473,10 @@ extension Home {
                         .font(.system(size: 16))
                         .foregroundColor(.loopYellow)
                     Text(
-                        (numberFormatter.string(from: (state.determinationsFromPersistence.first?.cob ?? 0) as NSNumber) ?? "0") +
+                        (
+                            numberFormatter
+                                .string(from: (state.enactedAndNonEnactedDeterminations.first?.cob ?? 0) as NSNumber) ?? "0"
+                        ) +
                             NSLocalizedString(" g", comment: "gram of carbs")
                     )
                     .font(.system(size: 16, weight: .bold, design: .rounded))