Просмотр исходного кода

Fix Adjustments View update when cancelling TempTarget via NS

polscm32 aka Marvout 1 год назад
Родитель
Сommit
9916e649e0

+ 14 - 0
FreeAPS/Sources/APS/FetchTreatmentsManager.swift

@@ -48,6 +48,8 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
                             lhs.createdAt < rhs.createdAt
                         }
 
+                        var lastTempTarget: TempTarget?
+
                         // Iterate over all temp targets
                         for (index, tempTarget) in sortedTargets.enumerated() {
                             // Skip saving if a Temp Target with the same date already exists
@@ -58,6 +60,7 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
                                 )
                                 continue
                             }
+
                             // Create a mutable copy of tempTarget
                             var mutableTempTarget = tempTarget
 
@@ -66,6 +69,17 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
 
                             // Save to Core Data
                             await self.tempTargetsStorage.storeTempTarget(tempTarget: mutableTempTarget)
+
+                            // Keep track of the last temp target
+                            if index == sortedTargets.count - 1 {
+                                lastTempTarget = mutableTempTarget
+                            }
+                        }
+
+                        // Check if the last Temp Target is a cancel event
+                        if let lastTempTarget = lastTempTarget, lastTempTarget.reason == TempTarget.cancel {
+                            // Send custom notification to update Adjustments UI
+                            Foundation.NotificationCenter.default.post(name: .didUpdateTempTargetConfiguration, object: nil)
                         }
 
                         // Save the temp targets to JSON so that they get used by oref

+ 6 - 6
FreeAPS/Sources/Services/RemoteControl/TrioRemoteControl+TempTarget.swift

@@ -1,5 +1,5 @@
-import Foundation
 import CoreData
+import Foundation
 
 extension TrioRemoteControl {
     @MainActor func handleTempTargetCommand(_ pushMessage: PushMessage) async {
@@ -28,7 +28,7 @@ extension TrioRemoteControl {
 
         await tempTargetsStorage.storeTempTarget(tempTarget: tempTarget)
         tempTargetsStorage.saveTempTargetsToStorage([tempTarget])
-        
+
         debug(
             .remoteControl,
             "Remote command processed successfully. \(pushMessage.humanReadableDescription())"
@@ -45,7 +45,7 @@ extension TrioRemoteControl {
             "Remote command processed successfully. \(pushMessage.humanReadableDescription())"
         )
     }
-    
+
     @MainActor func disableAllActiveTempTargets() async {
         let ids = await tempTargetsStorage.loadLatestTempTargetConfigurations(fetchLimit: 0)
 
@@ -72,7 +72,7 @@ extension TrioRemoteControl {
                         .target = canceledTempTarget.target ?? 0
                     newTempTargetRunStored.tempTarget = canceledTempTarget
                     newTempTargetRunStored.isUploadedToNS = false
-                    
+
                     canceledTempTarget.enabled = false
                     canceledTempTarget.isUploadedToNS = false
                 }
@@ -80,7 +80,7 @@ extension TrioRemoteControl {
                 if self.viewContext.hasChanges {
                     try self.viewContext.save()
                     Foundation.NotificationCenter.default.post(name: .willUpdateTempTargetConfiguration, object: nil)
-                    
+
                     // Update the storage so oref can pick up cancellation
                     self.tempTargetsStorage.saveTempTargetsToStorage([TempTarget.cancel(at: Date().addingTimeInterval(-1))])
                     return true
@@ -94,7 +94,7 @@ extension TrioRemoteControl {
                 return false
             }
         }
-        
+
         if didPostNotification {
             await awaitNotification(.didUpdateTempTargetConfiguration)
         }