Procházet zdrojové kódy

Group new FPUs with same ID.
Delete whole group when deleting from data table.

Jon Mårtensson před 3 roky
rodič
revize
9d1155ce6f

+ 16 - 4
FreeAPS/Sources/APS/Storage/CarbsStorage.swift

@@ -74,13 +74,25 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
     func deleteCarbs(at date: Date) {
         processQueue.sync {
             var allValues = storage.retrieve(OpenAPS.Monitor.carbHistory, as: [CarbsEntry].self) ?? []
+
             guard let entryIndex = allValues.firstIndex(where: { $0.createdAt == date }) else {
                 return
             }
-            allValues.remove(at: entryIndex)
-            storage.save(allValues, as: OpenAPS.Monitor.carbHistory)
-            broadcaster.notify(CarbsObserver.self, on: processQueue) {
-                $0.carbsDidUpdate(allValues)
+
+            // If deleteing a FPUs remove all of those with the same ID
+            if allValues[entryIndex].isFPU != nil, allValues[entryIndex].isFPU ?? false {
+                let fpuString = allValues[entryIndex].fpuID
+                allValues.removeAll(where: { $0.fpuID == fpuString })
+                storage.save(allValues, as: OpenAPS.Monitor.carbHistory)
+                broadcaster.notify(CarbsObserver.self, on: processQueue) {
+                    $0.carbsDidUpdate(allValues)
+                }
+            } else {
+                allValues.remove(at: entryIndex)
+                storage.save(allValues, as: OpenAPS.Monitor.carbHistory)
+                broadcaster.notify(CarbsObserver.self, on: processQueue) {
+                    $0.carbsDidUpdate(allValues)
+                }
             }
         }
     }

+ 4 - 0
FreeAPS/Sources/Models/CarbsEntry.swift

@@ -5,6 +5,8 @@ struct CarbsEntry: JSON, Equatable, Hashable {
     let createdAt: Date
     let carbs: Decimal
     let enteredBy: String?
+    let isFPU: Bool?
+    let fpuID: String?
 
     static let manual = "freeaps-x"
     static let appleHealth = "applehealth"
@@ -24,5 +26,7 @@ extension CarbsEntry {
         case createdAt = "created_at"
         case carbs
         case enteredBy
+        case isFPU
+        case fpuID
     }
 }

+ 10 - 2
FreeAPS/Sources/Modules/AddCarbs/AddCarbsStateModel.swift

@@ -57,6 +57,8 @@ extension AddCarbs {
                 var firstIndex = true
                 // New date for each carb equivalent
                 var useDate = date
+                // Group and Identify all FPUs together
+                let fpuID = UUID().uuidString
 
                 // Loop and save all carb entries
                 while carbEquivalents > 0, numberOfEquivalents > 0 {
@@ -67,7 +69,7 @@ extension AddCarbs {
                     carbsStorage.storeCarbs([
                         CarbsEntry(
                             id: UUID().uuidString, createdAt: useDate, carbs: equivalent,
-                            enteredBy: CarbsEntry.manual
+                            enteredBy: CarbsEntry.manual, isFPU: true, fpuID: fpuID
                         )
                     ])
                     numberOfEquivalents -= 1
@@ -78,7 +80,13 @@ extension AddCarbs {
             // Store the real carbs
             if carbs > 0 {
                 carbsStorage
-                    .storeCarbs([CarbsEntry(id: UUID().uuidString, createdAt: date, carbs: carbs, enteredBy: CarbsEntry.manual)])
+                    .storeCarbs([CarbsEntry(
+                        id: UUID().uuidString,
+                        createdAt: date,
+                        carbs: carbs,
+                        enteredBy: CarbsEntry.manual,
+                        isFPU: false, fpuID: nil
+                    )])
             }
 
             if settingsManager.settings.skipBolusScreenAfterCarbs {

+ 7 - 1
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -220,7 +220,13 @@ extension BaseWatchManager: WCSessionDelegate {
 
         if let carbs = message["carbs"] as? Double, carbs > 0 {
             carbsStorage.storeCarbs([
-                CarbsEntry(id: UUID().uuidString, createdAt: Date(), carbs: Decimal(carbs), enteredBy: CarbsEntry.manual)
+                CarbsEntry(
+                    id: UUID().uuidString,
+                    createdAt: Date(),
+                    carbs: Decimal(carbs),
+                    enteredBy: CarbsEntry.manual,
+                    isFPU: false, fpuID: nil
+                )
             ])
 
             if settingsManager.settings.skipBolusScreenAfterCarbs {