Explorar o código

Merge branch 'bdb_dev' into Crowdin

Jon B.M %!s(int64=3) %!d(string=hai) anos
pai
achega
534d4fc8fd
Modificáronse 26 ficheiros con 83 adicións e 50 borrados
  1. 16 4
      FreeAPS/Sources/APS/Storage/CarbsStorage.swift
  2. 1 1
      FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings
  3. 1 1
      FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings
  4. 1 1
      FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings
  5. 1 1
      FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings
  6. 1 1
      FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings
  7. 1 1
      FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings
  8. 1 1
      FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings
  9. 1 1
      FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings
  10. 1 1
      FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings
  11. 1 1
      FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings
  12. 1 1
      FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings
  13. 1 1
      FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings
  14. 1 1
      FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings
  15. 1 1
      FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings
  16. 1 1
      FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings
  17. 1 1
      FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings
  18. 1 1
      FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings
  19. 1 1
      FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings
  20. 1 1
      FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings
  21. 1 1
      FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings
  22. 1 1
      FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings
  23. 4 0
      FreeAPS/Sources/Models/CarbsEntry.swift
  24. 34 23
      FreeAPS/Sources/Modules/AddCarbs/AddCarbsStateModel.swift
  25. 1 1
      FreeAPS/Sources/Modules/FPUConfig/View/FPUConfigRootView.swift
  26. 7 1
      FreeAPS/Sources/Services/WatchManager/WatchManager.swift

+ 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)
+                }
             }
         }
     }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings


+ 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
     }
 }

+ 34 - 23
FreeAPS/Sources/Modules/AddCarbs/AddCarbsStateModel.swift

@@ -24,7 +24,7 @@ extension AddCarbs {
             }
 
             if useFPU {
-                // ----------- FPU ------------------------------------------------
+                // -------------------------- FPU--------------------------------------
                 let interval = settings.settings.minuteInterval // Interval betwwen carbs
                 let timeCap = settings.settings.timeCap // Max Duration
                 let adjustment = settings.settings.individualAdjustmentFactor
@@ -39,47 +39,58 @@ extension AddCarbs {
                 switch fpus {
                 case ..<2:
                     computedDuration = 3
-                case 2 ... 3:
+                case 2 ..< 3:
                     computedDuration = 4
-                case 3 ... 4:
+                case 3 ..< 4:
                     computedDuration = 5
                 default:
                     computedDuration = timeCap
                 }
 
                 // Size of each created carb equivalent if 60 minutes interval
-                var carbPortions: Decimal = carbEquivalents / Decimal(computedDuration)
+                var equivalent: Decimal = carbEquivalents / Decimal(computedDuration)
                 // Adjust for interval setting other than 60 minutes
-                carbPortions /= Decimal(60 / interval)
+                equivalent /= Decimal(60 / interval)
                 // Number of equivalents
-                var numberOfPortions = carbEquivalents / carbPortions
+                var numberOfEquivalents = carbEquivalents / equivalent
                 // Only use delay in first loop
                 var firstIndex = true
                 // New date for each carb equivalent
-                var useDate = Date()
-                
-                // Loop and save all carb entries
-                while carbEquivalents > 0, numberOfPortions > 0 {
+                var useDate = date
+                // Group and Identify all FPUs together
+                let fpuID = UUID().uuidString
+
+                // Create an array of all future carb equivalents.
+                var futureCarbArray = [CarbsEntry]()
+                while carbEquivalents > 0, numberOfEquivalents > 0 {
                     if firstIndex {
-                        useDate = date.addingTimeInterval(delay.minutes.timeInterval)
+                        useDate = useDate.addingTimeInterval(delay.minutes.timeInterval)
                         firstIndex = false
-                    } else { useDate = date.addingTimeInterval(interval.minutes.timeInterval) }
-                    carbsStorage.storeCarbs([
-                        CarbsEntry(
-                            id: UUID().uuidString, createdAt: useDate, carbs: carbPortions,
-                            enteredBy: CarbsEntry.manual
-                        )
-                    ])
-                    numberOfPortions -= 1
-                    date = useDate // Update date
+                    } else { useDate = useDate.addingTimeInterval(interval.minutes.timeInterval) }
+
+                    let eachCarbEntry = CarbsEntry(
+                        id: UUID().uuidString, createdAt: useDate, carbs: equivalent, enteredBy: CarbsEntry.manual, isFPU: true,
+                        fpuID: fpuID
+                    )
+                    futureCarbArray.append(eachCarbEntry)
+                    numberOfEquivalents -= 1
                 }
-            }
-            // ------------------------- END OF TPU -----------------------------------------------
+                // Save the array
+                if carbEquivalents > 0 {
+                    carbsStorage.storeCarbs(futureCarbArray)
+                }
+            } // ------------------------- END OF TPU ----------------------------------------
 
             // 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 {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 1
FreeAPS/Sources/Modules/FPUConfig/View/FPUConfigRootView.swift


+ 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 {