Explorar o código

Fix override activation when starting a new override while another is active

Jonas Björkert hai 1 ano
pai
achega
0c25d10998

+ 13 - 9
FreeAPS/Sources/Modules/RemoteControl/TrioRemoteControl+Override.swift

@@ -1,3 +1,4 @@
+import CoreData
 import Foundation
 import Foundation
 
 
 extension TrioRemoteControl {
 extension TrioRemoteControl {
@@ -30,12 +31,12 @@ extension TrioRemoteControl {
     }
     }
 
 
     @MainActor private func enactOverridePreset(preset: OverrideStored, pushMessage: PushMessage) async {
     @MainActor private func enactOverridePreset(preset: OverrideStored, pushMessage: PushMessage) async {
-        await disableAllActiveOverrides()
-
         preset.enabled = true
         preset.enabled = true
         preset.date = Date()
         preset.date = Date()
         preset.isUploadedToNS = false
         preset.isUploadedToNS = false
 
 
+        await disableAllActiveOverrides(except: preset.objectID)
+
         do {
         do {
             if viewContext.hasChanges {
             if viewContext.hasChanges {
                 try viewContext.save()
                 try viewContext.save()
@@ -43,17 +44,14 @@ extension TrioRemoteControl {
                 Foundation.NotificationCenter.default.post(name: .willUpdateOverrideConfiguration, object: nil)
                 Foundation.NotificationCenter.default.post(name: .willUpdateOverrideConfiguration, object: nil)
                 await awaitNotification(.didUpdateOverrideConfiguration)
                 await awaitNotification(.didUpdateOverrideConfiguration)
 
 
-                debug(
-                    .remoteControl,
-                    "Remote command processed successfully. \(pushMessage.humanReadableDescription())"
-                )
+                debug(.remoteControl, "Remote command processed successfully. \(pushMessage.humanReadableDescription())")
             }
             }
         } catch {
         } catch {
             debug(.remoteControl, "Failed to enact override preset: \(error.localizedDescription)")
             debug(.remoteControl, "Failed to enact override preset: \(error.localizedDescription)")
         }
         }
     }
     }
 
 
-    @MainActor private func disableAllActiveOverrides() async {
+    @MainActor private func disableAllActiveOverrides(except overrideID: NSManagedObjectID? = nil) async {
         let ids = await overrideStorage.loadLatestOverrideConfigurations(fetchLimit: 0) // 0 = no fetch limit
         let ids = await overrideStorage.loadLatestOverrideConfigurations(fetchLimit: 0) // 0 = no fetch limit
 
 
         let didPostNotification = await viewContext.perform { () -> Bool in
         let didPostNotification = await viewContext.perform { () -> Bool in
@@ -65,17 +63,23 @@ extension TrioRemoteControl {
                 guard !results.isEmpty else { return false }
                 guard !results.isEmpty else { return false }
 
 
                 for canceledOverride in results where canceledOverride.enabled {
                 for canceledOverride in results where canceledOverride.enabled {
+                    if let overrideID = overrideID, canceledOverride.objectID == overrideID {
+                        continue
+                    }
+
                     let newOverrideRunStored = OverrideRunStored(context: self.viewContext)
                     let newOverrideRunStored = OverrideRunStored(context: self.viewContext)
                     newOverrideRunStored.id = UUID()
                     newOverrideRunStored.id = UUID()
                     newOverrideRunStored.name = canceledOverride.name
                     newOverrideRunStored.name = canceledOverride.name
                     newOverrideRunStored.startDate = canceledOverride.date ?? .distantPast
                     newOverrideRunStored.startDate = canceledOverride.date ?? .distantPast
                     newOverrideRunStored.endDate = Date()
                     newOverrideRunStored.endDate = Date()
-                    newOverrideRunStored
-                        .target = NSDecimalNumber(decimal: self.overrideStorage.calculateTarget(override: canceledOverride))
+                    newOverrideRunStored.target = NSDecimalNumber(
+                        decimal: self.overrideStorage.calculateTarget(override: canceledOverride)
+                    )
                     newOverrideRunStored.override = canceledOverride
                     newOverrideRunStored.override = canceledOverride
                     newOverrideRunStored.isUploadedToNS = false
                     newOverrideRunStored.isUploadedToNS = false
 
 
                     canceledOverride.enabled = false
                     canceledOverride.enabled = false
+                    canceledOverride.isUploadedToNS = false
                 }
                 }
 
 
                 if self.viewContext.hasChanges {
                 if self.viewContext.hasChanges {