Przeglądaj źródła

get the async commands in serial order to avoid concurrently activating & disabling

Robert 1 rok temu
rodzic
commit
bb1647b2bc

+ 20 - 18
Trio/Sources/Modules/Adjustments/AdjustmentsStateModel+Extensions/AdjustmentsStateModel+TempTargets.swift

@@ -221,18 +221,16 @@ extension Adjustments.StateModel {
     /// Enacts a Temp Target preset by enabling it.
     @MainActor func enactTempTargetPreset(withID id: NSManagedObjectID) async {
         do {
-            let tempTargetToEnact = try viewContext.existingObject(with: id) as? TempTargetStored
-            tempTargetToEnact?.enabled = true
-            tempTargetToEnact?.date = Date()
-            tempTargetToEnact?.isUploadedToNS = false
-            isTempTargetEnabled = true
+            guard let tempTargetToEnact = try viewContext.existingObject(with: id) as? TempTargetStored else { return }
 
-            async let disableTempTargets: () = disableAllActiveTempTargets(
-                except: id,
-                createTempTargetRunEntry: currentActiveTempTarget != nil
-            )
-            async let resetState: () = resetTempTargetState()
-            _ = await (disableTempTargets, resetState)
+            /// wait for diabling current target before storing new temp target
+            await disableAllActiveTempTargets(createTempTargetRunEntry: true)
+            await resetTempTargetState()
+
+            tempTargetToEnact.enabled = true
+            tempTargetToEnact.date = Date()
+            tempTargetToEnact.isUploadedToNS = false
+            isTempTargetEnabled = true
 
             if viewContext.hasChanges {
                 try viewContext.save()
@@ -240,21 +238,25 @@ extension Adjustments.StateModel {
 
             updateLatestTempTargetConfiguration()
 
-            let tempTarget = TempTarget(
-                name: tempTargetToEnact?.name,
+            let newActiveTempTarget = TempTarget(
+                name: tempTargetToEnact.name,
                 createdAt: Date(),
-                targetTop: tempTargetToEnact?.target?.decimalValue,
-                targetBottom: tempTargetToEnact?.target?.decimalValue,
-                duration: tempTargetToEnact?.duration?.decimalValue ?? 0,
+                targetTop: tempTargetToEnact.target?.decimalValue,
+                targetBottom: tempTargetToEnact.target?.decimalValue,
+                duration: tempTargetToEnact.duration?.decimalValue ?? 0,
                 enteredBy: TempTarget.local,
                 reason: TempTarget.custom,
                 isPreset: true,
                 enabled: true,
                 halfBasalTarget: halfBasalTarget
             )
-            tempTargetStorage.saveTempTargetsToStorage([tempTarget])
+
+            tempTargetStorage.saveTempTargetsToStorage([newActiveTempTarget])
+
         } catch {
-            debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to enact Override Preset")
+            debugPrint(
+                "\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to enact TempTarget Preset"
+            )
         }
     }