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

Fix storing of duplicate entries on remote fetch

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

+ 7 - 15
FreeAPS/Sources/APS/FetchTreatmentsManager.swift

@@ -48,15 +48,15 @@ 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
-                            guard await !self.tempTargetsStorage.existsTempTarget(with: tempTarget.createdAt) else {
+                            guard await !self.tempTargetsStorage.existsTempTarget(with: tempTarget.createdAt),
+                                  tempTarget.reason != TempTarget.cancel
+                            else {
                                 debug(
                                     .nightscout,
-                                    "Skipping duplicate temp target with date: \(tempTarget.date ?? Date.distantPast)"
+                                    "Skipping temp target with date: \(tempTarget.date ?? Date.distantPast)"
                                 )
                                 continue
                             }
@@ -69,21 +69,13 @@ 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
                         self.tempTargetsStorage.saveTempTargetsToStorage(sortedTargets)
+
+                        // Update Adjustments View
+                        Foundation.NotificationCenter.default.post(name: .didUpdateTempTargetConfiguration, object: nil)
                     }
                 }
             }

+ 4 - 1
FreeAPS/Sources/Modules/Home/HomeStateModel+Setup/TempTargetSetup.swift

@@ -69,7 +69,10 @@ extension Home.StateModel {
             guard viewContext.hasChanges else { return }
             try viewContext.save()
 
-            await saveToTempTargetRunStored(object: profileToCancel)
+            // Do not save Cancel-Temp Targets from Nightscout to RunStoredEntity
+            if profileToCancel.duration != 0, profileToCancel.target != 0 {
+                await saveToTempTargetRunStored(object: profileToCancel)
+            }
 
             // We also need to update the storage for temp targets
             tempTargetStorage.saveTempTargetsToStorage([TempTarget.cancel(at: Date())])