polscm32 aka Marvout пре 1 година
родитељ
комит
bc707367f3

+ 12 - 9
FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift

@@ -9,6 +9,7 @@ protocol TempTargetsObserver {
 
 protocol TempTargetsStorage {
     func storeTempTarget(tempTarget: TempTarget) async
+    func storePresets(_ targets: [TempTarget])
     func fetchForTempTargetPresets() async -> [NSManagedObjectID]
     func copyRunningTempTarget(_ tempTarget: TempTargetStored) async -> NSManagedObjectID
     func deleteOverridePreset(_ objectID: NSManagedObjectID) async
@@ -88,9 +89,11 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
                 )
             }
 
-            if tempTarget.isPreset ?? false {
-                self.saveTempTargetsToStorage([tempTarget], isPreset: true)
-            } else {
+            /*
+             Saving the Preset to the Storage means that it gets used by Oref
+             We only want that when either creating a new non-Preset-Temp Target or when enacting a Temp Target Preset, NOT when we are only saving a new Preset, hence the check here!
+             */
+            if !(tempTarget.isPreset ?? false) {
                 self.saveTempTargetsToStorage([tempTarget], isPreset: false)
             }
         }
@@ -127,6 +130,12 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
         }
     }
 
+    func storePresets(_ targets: [TempTarget]) {
+        storage.remove(OpenAPS.FreeAPS.tempTargetsPresets)
+
+        saveTempTargetsToStorage(targets, isPreset: false)
+    }
+
     // Copy the current Temp Target if it is a RUNNING Preset
     /// otherwise we would edit the Preset
     @MainActor func copyRunningTempTarget(_ tempTarget: TempTargetStored) async -> NSManagedObjectID {
@@ -205,12 +214,6 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
         return Array(Set(treatments).subtracting(Set(uploaded)))
     }
 
-//    func storePresets(_ targets: [TempTarget]) {
-//        storage.remove(OpenAPS.FreeAPS.tempTargetsPresets)
-//
-//        saveTempTargetsToStorage(targets, isPreset: true)
-//    }
-//
     func presets() -> [TempTarget] {
         storage.retrieve(OpenAPS.FreeAPS.tempTargetsPresets, as: [TempTarget].self)?.reversed() ?? []
     }

+ 34 - 3
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -110,12 +110,24 @@ extension OverrideConfig.StateModel {
             name: .didUpdateOverrideConfiguration,
             object: nil
         )
+
+        // Custom Notification to update View when an Temp Target has been cancelled via Home View
+        Foundation.NotificationCenter.default.addObserver(
+            self,
+            selector: #selector(handleTempTargetConfigurationUpdate),
+            name: .didUpdateTempTargetConfiguration,
+            object: nil
+        )
     }
 
     @objc private func handleOverrideConfigurationUpdate() {
         updateLatestOverrideConfiguration()
     }
 
+    @objc private func handleTempTargetConfigurationUpdate() {
+        updateLatestTempTargetConfiguration()
+    }
+
     // MARK: - Enact Overrides
 
     func reorderOverride(from source: IndexSet, to destination: Int) {
@@ -576,16 +588,35 @@ extension OverrideConfig.StateModel {
             isTempTargetEnabled = true
 
             /// disable all active Temp Targets and reset state variables
-            await disableAllActiveTempTargets(except: id, createTempTargetRunEntry: currentActiveTempTarget != nil)
+            async let disableTempTargets: () = disableAllActiveTempTargets(
+                except: id,
+                createTempTargetRunEntry: currentActiveTempTarget != nil
+            )
+            async let resetState: () = resetTempTargetState()
 
-            /// reset state variables
-            await resetTempTargetState()
+            _ = await (disableTempTargets, resetState)
 
             guard viewContext.hasChanges else { return }
             try viewContext.save()
 
             // Update View
             updateLatestTempTargetConfiguration()
+
+            // Map to TempTarget Struct
+            let tempTarget = TempTarget(
+                name: tempTargetToEnact?.name,
+                createdAt: Date(),
+                targetTop: tempTargetToEnact?.target?.decimalValue,
+                targetBottom: tempTargetToEnact?.target?.decimalValue,
+                duration: tempTargetToEnact?.duration?.decimalValue ?? 0,
+                enteredBy: TempTarget.manual,
+                reason: TempTarget.custom,
+                isPreset: true,
+                enabled: true
+            )
+
+            // Make sure the Temp Target gets used by Oref
+            tempTargetStorage.storePresets([tempTarget])
         } catch {
             debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to enact Override Preset")
         }