polscm32 1 年間 前
コミット
91e0238a0d
29 ファイル変更59 行追加1883 行削除
  1. 4 11
      FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json
  2. 0 35
      FreeAPS/Sources/APS/APSManager.swift
  3. 0 7
      FreeAPS/Sources/APS/DeviceDataManager.swift
  4. 3 8
      FreeAPS/Sources/APS/FetchGlucoseManager.swift
  5. 0 3
      FreeAPS/Sources/APS/OpenAPS/Constants.swift
  6. 2 10
      FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift
  7. 0 171
      FreeAPS/Sources/APS/Storage/CarbsStorage.swift
  8. 0 118
      FreeAPS/Sources/APS/Storage/GlucoseStorage.swift
  9. 0 57
      FreeAPS/Sources/APS/Storage/PumpHistoryStorage.swift
  10. 0 8
      FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift
  11. 0 10
      FreeAPS/Sources/Application/FreeAPSApp.swift
  12. 0 12
      FreeAPS/Sources/Models/Icons.swift
  13. 0 3
      FreeAPS/Sources/Models/NightscoutTreatment.swift
  14. 1 25
      FreeAPS/Sources/Models/PumpHistoryEvent.swift
  15. 0 30
      FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift
  16. 0 72
      FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift
  17. 0 152
      FreeAPS/Sources/Modules/DataTable/DataTableStateModel.swift
  18. 0 277
      FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift
  19. 3 104
      FreeAPS/Sources/Modules/Home/HomeStateModel.swift
  20. 0 190
      FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift
  21. 0 59
      FreeAPS/Sources/Modules/Home/View/Header/CurrentGlucoseView.swift
  22. 43 121
      FreeAPS/Sources/Modules/Home/View/Header/PumpView.swift
  23. 0 145
      FreeAPS/Sources/Modules/Home/View/HomeRootView.swift
  24. 0 4
      FreeAPS/Sources/Modules/ManualTempBasal/View/ManualTempBasalRootView.swift
  25. 0 8
      FreeAPS/Sources/Services/Network/NightscoutAPI.swift
  26. 2 227
      FreeAPS/Sources/Services/Network/NightscoutManager.swift
  27. 1 7
      FreeAPS/Sources/Shortcuts/State/ListStateIntent.swift
  28. 0 3
      FreeAPSWatch WatchKit Extension/DataFlow.swift
  29. 0 6
      FreeAPSWatch WatchKit Extension/WatchStateModel.swift

+ 4 - 11
FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json

@@ -42,9 +42,10 @@
   "xGridLines" : true,
   "yGridLines" : true,
   "oneDimensionalGraph" : false,
-<<<<<<< HEAD
-  "rulerMarks" : false,
-  "maxCarbs": 1000,
+  "rulerMarks" : true,
+  "maxCarbs": 250,
+  "maxFat": 250,
+  "maxProtein": 250,
   "displayFatAndProteinOnWatch": false,
   "confirmBolusFaster": false,
   "overrideFactor": 0.8,
@@ -54,13 +55,5 @@
   "sweetMeals": false,
   "sweetMealFactor": 2
   "historyLayout": "twoTabs",
-=======
-  "rulerMarks" : true,
-  "maxCarbs": 250,
-  "maxFat": 250,
-  "maxProtein": 250,
-  "displayFatAndProteinOnWatch": false,
-  "confirmBolusFaster": false,
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
   "lockScreenView": "simple"
 }

+ 0 - 35
FreeAPS/Sources/APS/APSManager.swift

@@ -373,21 +373,9 @@ final class BaseAPSManager: APSManager, Injectable {
             return false
         }
 
-<<<<<<< HEAD
         do {
             let now = Date()
             let temp = await fetchCurrentTempBasal(date: now)
-=======
-        // Only let glucose be flat when 400 mg/dl
-        if (glucoseStorage.recent().last?.glucose ?? 100) != 400 {
-            guard glucoseStorage.isGlucoseNotFlat() else {
-                debug(.apsManager, "Glucose data is too flat")
-                processError(APSError.glucoseError(message: "Glucose data is too flat"))
-                return Just(false).eraseToAnyPublisher()
-            }
-        }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
-
             _ = try await makeProfiles()
             _ = try await autosens()
             _ = try await dailyAutotune()
@@ -751,10 +739,6 @@ final class BaseAPSManager: APSManager, Injectable {
             } else {
                 debugPrint("Failed to update OrefDetermination in reportEnacted()")
             }
-<<<<<<< HEAD
-=======
-            nightscout.uploadStatus()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 
@@ -913,7 +897,6 @@ final class BaseAPSManager: APSManager, Injectable {
         return output
     }
 
-<<<<<<< HEAD
     // fetch glucose for time interval
     func fetchGlucose(predicate: NSPredicate, fetchLimit: Int? = nil, batchSize: Int? = nil) async -> [GlucoseStored] {
         await CoreDataStack.shared.fetchEntitiesAsync(
@@ -1362,12 +1345,6 @@ final class BaseAPSManager: APSManager, Injectable {
     private func loopStats(loopStatRecord: LoopStats) {
         privateContext.perform {
             let nLS = LoopStatRecord(context: self.privateContext)
-=======
-    private func loopStats(loopStatRecord: LoopStats) {
-        coredataContext.perform {
-            let nLS = LoopStatRecord(context: self.coredataContext)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
-
             nLS.start = loopStatRecord.start
             nLS.end = loopStatRecord.end ?? Date()
             nLS.loopStatus = loopStatRecord.loopStatus
@@ -1426,11 +1403,7 @@ private extension PumpManager {
                     continuation.resume(throwing: error)
                 } else {
                     debug(.apsManager, "Temp basal succeeded: \(unitsPerHour) for: \(duration)")
-<<<<<<< HEAD
                     continuation.resume(returning: ())
-=======
-                    promise(.success(nil))
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             }
         }
@@ -1446,11 +1419,7 @@ private extension PumpManager {
                     continuation.resume(throwing: error)
                 } else {
                     debug(.apsManager, "Bolus succeeded: \(units)")
-<<<<<<< HEAD
                     continuation.resume(returning: ())
-=======
-                    promise(.success(nil))
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             }
         }
@@ -1462,11 +1431,7 @@ private extension PumpManager {
                 switch result {
                 case let .success(dose):
                     debug(.apsManager, "Cancel Bolus succeeded")
-<<<<<<< HEAD
                     continuation.resume(returning: dose)
-=======
-                    promise(.success(dose))
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 case let .failure(error):
                     debug(.apsManager, "Cancel Bolus failed")
                     continuation.resume(throwing: APSError.pumpError(error))

+ 0 - 7
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -175,10 +175,6 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         if !recommendsLoop {
             warning(.deviceManager, "Loop recommendation time out or got error. Trying to loop right now.")
         }
-<<<<<<< HEAD
-=======
-
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         self.recommendsLoop.send()
     }
 
@@ -629,13 +625,10 @@ protocol PumpBatteryObserver {
     func pumpBatteryDidChange(_ battery: Battery)
 }
 
-<<<<<<< HEAD
 protocol PumpTimeZoneObserver {
     func pumpTimeZoneDidChange(_ timezone: TimeZone)
 }
 
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 protocol PumpDeactivatedObserver {
     func pumpDeactivatedDidChange()
 }

+ 3 - 8
FreeAPS/Sources/APS/FetchGlucoseManager.swift

@@ -53,16 +53,14 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
 
     private lazy var simulatorSource = GlucoseSimulatorSource()
 
-<<<<<<< HEAD
     private let context = CoreDataStack.shared.newTaskContext()
-=======
+
     var shouldSyncToRemoteService: Bool {
         guard let cgmManager = cgmManager else {
             return true
         }
         return cgmManager.shouldSyncToRemoteService
     }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     init(resolver: Resolver) {
         injectServices(resolver)
@@ -267,14 +265,11 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
 
         deviceDataManager.heartbeat(date: Date())
 
-<<<<<<< HEAD
         Task.detached {
             await self.nightscoutManager.uploadGlucose()
+            self.tidepoolService.uploadGlucose(device: self.cgmManager?.cgmManagerStatus.device)
         }
-=======
-        nightscoutManager.uploadGlucose()
-        tidepoolService.uploadGlucose(device: cgmManager?.cgmManagerStatus.device)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
+
 
         let glucoseForHealth = filteredByDate.filter { !glucoseFromHealth.contains($0) }
 

+ 0 - 3
FreeAPS/Sources/APS/OpenAPS/Constants.swift

@@ -86,10 +86,7 @@ extension OpenAPS {
         static let uploadedProfile = "upload/uploaded-profile.json"
         static let uploadedPreferences = "upload/uploaded-preferences.json"
         static let uploadedSettings = "upload/uploaded-settings.json"
-<<<<<<< HEAD
         static let uploadedManualGlucose = "upload/uploaded-manual-readings.json"
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     }
 
     enum FreeAPS {

+ 2 - 10
FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift

@@ -97,7 +97,6 @@ final class OpenAPS {
         }
     }
 
-<<<<<<< HEAD
     // fetch glucose to pass it to the meal function and to determine basal
     private func fetchAndProcessGlucose() async -> String {
         let results = await CoreDataStack.shared.fetchEntitiesAsync(
@@ -277,11 +276,6 @@ final class OpenAPS {
     func oref2() async -> RawJSON {
         await context.perform {
             let preferences = self.storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self)
-=======
-    func oref2() -> RawJSON {
-        coredataContext.performAndWait {
-            let preferences = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             var hbt_ = preferences?.halfBasalExerciseTarget ?? 160
             let wp = preferences?.weightPercentage ?? 1
             let smbMinutes = (preferences?.maxSMBBasalMinutes ?? 30) as NSDecimalNumber
@@ -434,11 +428,9 @@ final class OpenAPS {
                     smbMinutes: (overrideArray.first?.smbMinutes ?? smbMinutes) as Decimal,
                     uamMinutes: (overrideArray.first?.uamMinutes ?? uamMinutes) as Decimal
                 )
-<<<<<<< HEAD
+
                 self.storage.save(averages, as: OpenAPS.Monitor.oref2_variables)
-=======
-                storage.save(averages, as: OpenAPS.Monitor.oref2_variables)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
+                
                 return self.loadFileFromStorage(name: Monitor.oref2_variables)
 
             } else {

+ 0 - 171
FreeAPS/Sources/APS/Storage/CarbsStorage.swift

@@ -11,14 +11,9 @@ protocol CarbsStorage {
     func storeCarbs(_ carbs: [CarbsEntry]) async
     func syncDate() -> Date
     func recent() -> [CarbsEntry]
-<<<<<<< HEAD
     func getCarbsNotYetUploadedToNightscout() async -> [NightscoutTreatment]
     func getFPUsNotYetUploadedToNightscout() async -> [NightscoutTreatment]
     func deleteCarbs(at uniqueID: String, fpuID: String, complex: Bool)
-=======
-    func nightscoutTretmentsNotUploaded() -> [NightscoutTreatment]
-    func deleteCarbs(at date: Date)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 }
 
 final class BaseCarbsStorage: CarbsStorage, Injectable {
@@ -33,7 +28,6 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
         injectServices(resolver)
     }
 
-<<<<<<< HEAD
     func storeCarbs(_ entries: [CarbsEntry]) async {
         await saveCarbEquivalents(entries: entries)
         await saveCarbsToCoreData(entries: entries)
@@ -149,61 +143,12 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
 
             if carbEquivalentCount > 0 {
                 await saveFPUToCoreDataAsBatchInsert(entries: futureCarbEquivalents)
-=======
-    /**
-     Processes and stores carbohydrate entries, including handling entries with fat and protein to calculate and distribute future carb equivalents.
-
-     - The function processes fat and protein units (FPUs) by creating carb equivalents for future use.
-     - Ensures each carb equivalent is at least 1.0 grams by adjusting the interval if necessary.
-     - Stores the actual carbohydrate entries.
-     - Saves the data to CoreData for statistical purposes.
-     - Notifies observers of the carbohydrate data update.
-
-     - Parameters:
-       - entries: An array of `CarbsEntry` objects representing the carbohydrate entries to be processed and stored.
-     */
-    func storeCarbs(_ entries: [CarbsEntry]) {
-        processQueue.sync {
-            let file = OpenAPS.Monitor.carbHistory
-            var entriesToStore: [CarbsEntry] = []
-
-            guard let lastEntry = entries.last else { return }
-
-            if let fat = lastEntry.fat, let protein = lastEntry.protein, fat > 0 || protein > 0 {
-                let (futureCarbArray, carbEquivalents) = processFPU(
-                    entries: entries,
-                    fat: fat,
-                    protein: protein,
-                    createdAt: lastEntry.createdAt
-                )
-                if carbEquivalents > 0 {
-                    self.storage.transaction { storage in
-                        storage.append(futureCarbArray, to: file, uniqBy: \.id)
-                        entriesToStore = storage.retrieve(file, as: [CarbsEntry].self)?
-                            .filter { $0.createdAt.addingTimeInterval(1.days.timeInterval) > Date() }
-                            .sorted { $0.createdAt > $1.createdAt } ?? []
-                        storage.save(Array(entriesToStore), as: file)
-                    }
-                }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
         }
     }
 
-<<<<<<< HEAD
     private func saveCarbsToCoreData(entries: [CarbsEntry]) async {
         guard let entry = entries.last, entry.carbs != 0 else { return }
-=======
-            if lastEntry.carbs > 0 {
-                self.storage.transaction { storage in
-                    storage.append(entries, to: file, uniqBy: \.createdAt)
-                    entriesToStore = storage.retrieve(file, as: [CarbsEntry].self)?
-                        .filter { $0.createdAt.addingTimeInterval(1.days.timeInterval) > Date() }
-                        .sorted { $0.createdAt > $1.createdAt } ?? []
-                    storage.save(Array(entriesToStore), as: file)
-                }
-            }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         await coredataContext.perform {
             let newItem = CarbEntryStored(context: self.coredataContext)
@@ -234,7 +179,6 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
             else {
                 return true // return true to stop
             }
-<<<<<<< HEAD
             carbEntry.date = entry.actualDate
             carbEntry.carbs = Double(truncating: NSDecimalNumber(decimal: entry.carbs))
             carbEntry.id = UUID.init(uuidString: entryId)
@@ -252,99 +196,10 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
                 Foundation.NotificationCenter.default.post(name: .didPerformBatchInsert, object: nil)
             } catch {
                 debugPrint("Carbs Storage: \(DebuggingIdentifiers.failed) error while saving fpus to core data")
-=======
-            broadcaster.notify(CarbsObserver.self, on: processQueue) {
-                $0.carbsDidUpdate(entriesToStore)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
         }
     }
 
-    /**
-     Calculates the duration for processing FPUs (fat and protein units) based on the FPUs and the time cap.
-
-     - The function uses predefined rules to determine the duration based on the number of FPUs.
-     - Ensures that the duration does not exceed the time cap.
-
-     - Parameters:
-       - fpus: The number of FPUs calculated from fat and protein.
-       - timeCap: The maximum allowed duration.
-
-     - Returns: The computed duration in hours.
-     */
-    private func calculateComputedDuration(fpus: Decimal, timeCap: Int) -> Int {
-        switch fpus {
-        case ..<2:
-            return 3
-        case 2 ..< 3:
-            return 4
-        case 3 ..< 4:
-            return 5
-        default:
-            return timeCap
-        }
-    }
-
-    /**
-     Processes fat and protein entries to generate future carb equivalents, ensuring each equivalent is at least 1.0 grams.
-
-     - The function calculates the equivalent carb dosage size and adjusts the interval to ensure each equivalent is at least 1.0 grams.
-     - Creates future carb entries based on the adjusted carb equivalent size and interval.
-
-     - Parameters:
-       - entries: An array of `CarbsEntry` objects representing the carbohydrate entries to be processed.
-       - fat: The amount of fat in the last entry.
-       - protein: The amount of protein in the last entry.
-       - createdAt: The creation date of the last entry.
-
-     - Returns: A tuple containing the array of future carb entries and the total carb equivalents.
-     */
-    private func processFPU(entries _: [CarbsEntry], fat: Decimal, protein: Decimal, createdAt: Date) -> ([CarbsEntry], Decimal) {
-        let interval = settings.settings.minuteInterval
-        let timeCap = settings.settings.timeCap
-        let adjustment = settings.settings.individualAdjustmentFactor
-        let delay = settings.settings.delay
-
-        let kcal = protein * 4 + fat * 9
-        let carbEquivalents = (kcal / 10) * adjustment
-        let fpus = carbEquivalents / 10
-        var computedDuration = calculateComputedDuration(fpus: fpus, timeCap: timeCap)
-
-        var carbEquivalentSize: Decimal = carbEquivalents / Decimal(computedDuration)
-        carbEquivalentSize /= Decimal(60 / interval)
-
-        if carbEquivalentSize < 1.0 {
-            carbEquivalentSize = 1.0
-            computedDuration = Int(carbEquivalents / carbEquivalentSize)
-        }
-
-        let roundedEquivalent: Double = round(Double(carbEquivalentSize * 10)) / 10
-        carbEquivalentSize = Decimal(roundedEquivalent)
-        var numberOfEquivalents = carbEquivalents / carbEquivalentSize
-
-        var useDate = createdAt
-        let fpuID = UUID().uuidString
-        var futureCarbArray = [CarbsEntry]()
-        var firstIndex = true
-
-        while carbEquivalents > 0, numberOfEquivalents > 0 {
-            useDate = firstIndex ? useDate.addingTimeInterval(delay.minutes.timeInterval) : useDate
-                .addingTimeInterval(interval.minutes.timeInterval)
-            firstIndex = false
-
-            let eachCarbEntry = CarbsEntry(
-                id: UUID().uuidString, createdAt: useDate,
-                carbs: carbEquivalentSize, fat: 0, protein: 0, note: nil,
-                enteredBy: CarbsEntry.manual, isFPU: true,
-                fpuID: fpuID
-            )
-            futureCarbArray.append(eachCarbEntry)
-            numberOfEquivalents -= 1
-        }
-
-        return (futureCarbArray, carbEquivalents)
-    }
-
     func syncDate() -> Date {
         Date().addingTimeInterval(-1.days.timeInterval)
     }
@@ -383,7 +238,6 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
         }
     }
 
-<<<<<<< HEAD
     func getCarbsNotYetUploadedToNightscout() async -> [NightscoutTreatment] {
         let results = await CoreDataStack.shared.fetchEntitiesAsync(
             ofType: CarbEntryStored.self,
@@ -449,31 +303,6 @@ final class BaseCarbsStorage: CarbsStorage, Injectable {
                     id: result.fpuID?.uuidString
                 )
             }
-=======
-    func nightscoutTretmentsNotUploaded() -> [NightscoutTreatment] {
-        let uploaded = storage.retrieve(OpenAPS.Nightscout.uploadedPumphistory, as: [NightscoutTreatment].self) ?? []
-
-        let eventsManual = recent().filter { $0.enteredBy == CarbsEntry.manual }
-        let treatments = eventsManual.map {
-            NightscoutTreatment(
-                duration: nil,
-                rawDuration: nil,
-                rawRate: nil,
-                absolute: nil,
-                rate: nil,
-                eventType: .nsCarbCorrection,
-                createdAt: $0.createdAt,
-                enteredBy: CarbsEntry.manual,
-                bolus: nil,
-                insulin: nil,
-                carbs: $0.carbs,
-                fat: $0.fat,
-                protein: $0.protein,
-                foodType: $0.note,
-                targetTop: nil,
-                targetBottom: nil
-            )
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 }

+ 0 - 118
FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

@@ -11,15 +11,9 @@ protocol GlucoseStorage {
     func filterTooFrequentGlucose(_ glucose: [BloodGlucose], at: Date) -> [BloodGlucose]
     func lastGlucoseDate() -> Date
     func isGlucoseFresh() -> Bool
-<<<<<<< HEAD
     func getGlucoseNotYetUploadedToNightscout() async -> [BloodGlucose]
     func getCGMStateNotYetUploadedToNightscout() async -> [NightscoutTreatment]
     func getManualGlucoseNotYetUploadedToNightscout() async -> [NightscoutTreatment]
-=======
-    func isGlucoseNotFlat() -> Bool
-    func nightscoutGlucoseNotUploaded() -> [BloodGlucose]
-    func nightscoutCGMStateNotUploaded() -> [NightscoutTreatment]
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     var alarm: GlucoseAlarm? { get }
 }
 
@@ -39,118 +33,12 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
         injectServices(resolver)
     }
 
-<<<<<<< HEAD
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
         formatter.maximumFractionDigits = 0
         if settingsManager.settings.units == .mmolL {
             formatter.maximumFractionDigits = 1
-=======
-    func storeGlucose(_ glucose: [BloodGlucose]) {
-        let storeGlucoseStarted = Date()
-
-        processQueue.sync {
-            debug(.deviceManager, "start storage glucose")
-            let file = OpenAPS.Monitor.glucose
-            self.storage.transaction { storage in
-                storage.append(glucose, to: file, uniqBy: \.dateString)
-
-                let uniqEvents = storage.retrieve(file, as: [BloodGlucose].self)?
-                    .filter { $0.dateString.addingTimeInterval(24.hours.timeInterval) > Date() }
-                    .sorted { $0.dateString > $1.dateString } ?? []
-                let glucose = Array(uniqEvents)
-                storage.save(glucose, as: file)
-
-                DispatchQueue.main.async {
-                    self.broadcaster.notify(GlucoseObserver.self, on: .main) {
-                        $0.glucoseDidUpdate(glucose.reversed())
-                    }
-                }
-
-                // MARK: Save to CoreData.
-
-                var bg_ = 0
-                var bgDate = Date()
-                var id = ""
-                var direction = ""
-
-                if glucose.isNotEmpty {
-                    bg_ = glucose[0].glucose ?? 0
-                    bgDate = glucose[0].dateString
-                    id = glucose[0].id
-                    direction = glucose[0].direction?.symbol ?? "↔︎"
-                }
-
-                if bg_ != 0 {
-                    self.coredataContext.perform {
-                        let dataForForStats = Readings(context: self.coredataContext)
-                        dataForForStats.date = bgDate
-                        dataForForStats.glucose = Int16(bg_)
-                        dataForForStats.id = id
-                        dataForForStats.direction = direction
-                        try? self.coredataContext.save()
-                    }
-                }
-            }
-
-            debug(.deviceManager, "start storage cgmState")
-            self.storage.transaction { storage in
-                let file = OpenAPS.Monitor.cgmState
-                var treatments = storage.retrieve(file, as: [NightscoutTreatment].self) ?? []
-                var updated = false
-                for x in glucose {
-                    debug(.deviceManager, "storeGlucose \(x)")
-                    guard let sessionStartDate = x.sessionStartDate else {
-                        continue
-                    }
-                    if let lastTreatment = treatments.last,
-                       let createdAt = lastTreatment.createdAt,
-                       // When a new Dexcom sensor is started, it produces multiple consequetive
-                       // startDates. Disambiguate them by only allowing a session start per minute.
-                       abs(createdAt.timeIntervalSince(sessionStartDate)) < TimeInterval(60)
-                    {
-                        continue
-                    }
-                    var notes = ""
-                    if let t = x.transmitterID {
-                        notes = t
-                    }
-                    if let a = x.activationDate {
-                        notes = "\(notes) activated on \(a)"
-                    }
-                    let treatment = NightscoutTreatment(
-                        duration: nil,
-                        rawDuration: nil,
-                        rawRate: nil,
-                        absolute: nil,
-                        rate: nil,
-                        eventType: .nsSensorChange,
-                        createdAt: sessionStartDate,
-                        enteredBy: NightscoutTreatment.local,
-                        bolus: nil,
-                        insulin: nil,
-                        notes: notes,
-                        carbs: nil,
-                        fat: nil,
-                        protein: nil,
-                        targetTop: nil,
-                        targetBottom: nil
-                    )
-                    debug(.deviceManager, "CGM sensor change \(treatment)")
-                    treatments.append(treatment)
-                    updated = true
-                }
-                if updated {
-                    // We have to keep quite a bit of history as sensors start only every 10 days.
-                    storage.save(
-                        treatments.filter
-                            { $0.createdAt != nil && $0.createdAt!.addingTimeInterval(30.days.timeInterval) > Date() },
-                        as: file
-                    )
-                }
-            }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
         formatter.decimalSeparator = "."
         return formatter
@@ -372,7 +260,6 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
         }
     }
 
-<<<<<<< HEAD
     // Fetch manual glucose that is not uploaded to Nightscout yet
     /// Returns: Array of NightscoutTreatment to ensure the correct format for the NS Upload
     func getManualGlucoseNotYetUploadedToNightscout() async -> [NightscoutTreatment] {
@@ -414,11 +301,6 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
             }
         }
     }
-=======
-    func nightscoutCGMStateNotUploaded() -> [NightscoutTreatment] {
-        let uploaded = storage.retrieve(OpenAPS.Nightscout.uploadedCGMState, as: [NightscoutTreatment].self) ?? []
-        let recent = storage.retrieve(OpenAPS.Monitor.cgmState, as: [NightscoutTreatment].self) ?? []
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     func getCGMStateNotYetUploadedToNightscout() async -> [NightscoutTreatment] {
         async let alreadyUploaded: [NightscoutTreatment] = storage

+ 0 - 57
FreeAPS/Sources/APS/Storage/PumpHistoryStorage.swift

@@ -12,12 +12,7 @@ protocol PumpHistoryStorage {
     func storePumpEvents(_ events: [NewPumpEvent])
     func storeExternalInsulinEvent(amount: Decimal, timestamp: Date) async
     func recent() -> [PumpHistoryEvent]
-<<<<<<< HEAD
     func getPumpHistoryNotYetUploadedToNightscout() async -> [NightscoutTreatment]
-=======
-    func nightscoutTreatmentsNotUploaded() -> [NightscoutTreatment]
-    func saveCancelTempEvents()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     func deleteInsulin(at date: Date)
 }
 
@@ -43,35 +38,10 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
 
     func storePumpEvents(_ events: [NewPumpEvent]) {
         processQueue.async {
-<<<<<<< HEAD
             self.context.perform {
                 for event in events {
                     // Fetch to filter out duplicates
                     // TODO: - move this to the Core Data Class
-=======
-            let eventsToStore = events.flatMap { event -> [PumpHistoryEvent] in
-                let id = event.raw.md5String
-                switch event.type {
-                case .bolus:
-                    guard let dose = event.dose else { return [] }
-                    let amount = Decimal(string: dose.unitsInDeliverableIncrements.description)
-                    let minutes = Int((dose.endDate - dose.startDate).timeInterval / 60)
-                    return [PumpHistoryEvent(
-                        id: id,
-                        type: .bolus,
-                        timestamp: event.date,
-                        amount: amount,
-                        duration: minutes,
-                        durationMin: nil,
-                        rate: nil,
-                        temp: nil,
-                        carbInput: nil,
-                        isSMB: dose.automatic,
-                        isExternalInsulin: dose.manuallyEntered
-                    )]
-                case .tempBasal:
-                    guard let dose = event.dose else { return [] }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
                     let existingEvents: [PumpEventStored] = CoreDataStack.shared.fetchEntities(
                         ofType: PumpEventStored.self,
@@ -272,7 +242,6 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
         }
     }
 
-<<<<<<< HEAD
     func determineBolusEventType(for event: PumpEventStored) -> PumpEventStored.EventType {
         if event.bolus!.isSMB {
             return .smb
@@ -281,32 +250,6 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
             return .isExternal
         }
         return PumpEventStored.EventType(rawValue: event.type!) ?? PumpEventStored.EventType.bolus
-=======
-    func nightscoutTreatmentsNotUploaded() -> [NightscoutTreatment] {
-        let events = recent()
-        guard !events.isEmpty else { return [] }
-
-        var treatments: [NightscoutTreatment?] = []
-
-        for i in 0 ..< events.count {
-            let event = events[i]
-            var nextEvent: PumpHistoryEvent?
-            if i + 1 < events.count {
-                nextEvent = events[i + 1]
-            }
-            if event.type == .tempBasal, nextEvent?.type == .tempBasalDuration {
-                treatments.append(NightscoutTreatment(event: event, tempBasalDuration: nextEvent))
-            } else {
-                treatments.append(NightscoutTreatment(event: event))
-            }
-        }
-
-        let uploaded = storage.retrieve(OpenAPS.Nightscout.uploadedPumphistory, as: [NightscoutTreatment].self) ?? []
-
-        let treatmentsToUpload = Set(treatments.compactMap { $0 }).subtracting(Set(uploaded))
-
-        return treatmentsToUpload.sorted { $0.createdAt! > $1.createdAt! }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     }
 
     func getPumpHistoryNotYetUploadedToNightscout() async -> [NightscoutTreatment] {

+ 0 - 8
FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift

@@ -10,11 +10,7 @@ protocol TempTargetsStorage {
     func storeTempTargets(_ targets: [TempTarget])
     func syncDate() -> Date
     func recent() -> [TempTarget]
-<<<<<<< HEAD
     func nightscoutTreatmentsNotUploaded() -> [NightscoutTreatment]
-=======
-    func nightscoutTretmentsNotUploaded() -> [NightscoutTreatment]
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     func storePresets(_ targets: [TempTarget])
     func presets() -> [TempTarget]
     func current() -> TempTarget?
@@ -86,11 +82,7 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
         return last
     }
 
-<<<<<<< HEAD
     func nightscoutTreatmentsNotUploaded() -> [NightscoutTreatment] {
-=======
-    func nightscoutTretmentsNotUploaded() -> [NightscoutTreatment] {
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         let uploaded = storage.retrieve(OpenAPS.Nightscout.uploadedTempTargets, as: [NightscoutTreatment].self) ?? []
 
         let eventsManual = recent().filter { $0.enteredBy == TempTarget.manual }

+ 0 - 10
FreeAPS/Sources/Application/FreeAPSApp.swift

@@ -1,8 +1,5 @@
 import ActivityKit
-<<<<<<< HEAD
 import BackgroundTasks
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 import CoreData
 import Foundation
 import SwiftUI
@@ -50,10 +47,7 @@ import Swinject
         _ = resolver.resolve(WatchManager.self)!
         _ = resolver.resolve(HealthKitManager.self)!
         _ = resolver.resolve(BluetoothStateManager.self)!
-<<<<<<< HEAD
-=======
         _ = resolver.resolve(PluginManager.self)!
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         if #available(iOS 16.2, *) {
             _ = resolver.resolve(LiveActivityBridge.self)!
         }
@@ -62,11 +56,7 @@ import Swinject
     init() {
         debug(
             .default,
-<<<<<<< HEAD
-            "iAPS Started: v\(Bundle.main.releaseVersionNumber ?? "")(\(Bundle.main.buildVersionNumber ?? "")) [buildDate: \(Bundle.main.buildDate)] [buildExpires: \(Bundle.main.profileExpiration)]"
-=======
             "Trio Started: v\(Bundle.main.releaseVersionNumber ?? "")(\(Bundle.main.buildVersionNumber ?? "")) [buildDate: \(BuildDetails.default.buildDate())] [buildExpires: \(BuildDetails.default.calculateExpirationDate())]"
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         )
         loadServices()
 

+ 0 - 12
FreeAPS/Sources/Models/Icons.swift

@@ -3,17 +3,6 @@ import Foundation
 import UIKit
 
 enum Icon_: String, CaseIterable, Identifiable {
-<<<<<<< HEAD
-    case primary = "oiapsBlack"
-    case oiAPSWhiteShadow
-    case oiapsColorBG
-    case oiapsWhite
-    case oiaps3D
-    case wilford = "diabeetus"
-    case catWithPod
-    case catWithPodWhite = "catWithPodWhiteBG"
-    case loop = "OiAPS_Loop"
-=======
     case primary = "trioBlack"
     case trioWhiteShadow
     case trioColorBG
@@ -23,7 +12,6 @@ enum Icon_: String, CaseIterable, Identifiable {
     case catWithPod
     case catWithPodWhite = "catWithPodWhiteBG"
     case loop = "trioLoop"
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     var id: String { rawValue }
 }
 

+ 0 - 3
FreeAPS/Sources/Models/NightscoutTreatment.swift

@@ -1,7 +1,5 @@
 import Foundation
 
-<<<<<<< HEAD
-=======
 func determineBolusEventType(for event: PumpHistoryEvent) -> EventType {
     if event.isExternalInsulin ?? false {
         return .nsExternalInsulin
@@ -11,7 +9,6 @@ func determineBolusEventType(for event: PumpHistoryEvent) -> EventType {
     return event.type
 }
 
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 struct NightscoutTreatment: JSON, Hashable, Equatable {
     var duration: Int?
     var rawDuration: PumpHistoryEvent?

+ 1 - 25
FreeAPS/Sources/Models/PumpHistoryEvent.swift

@@ -15,11 +15,7 @@ struct PumpHistoryEvent: JSON, Equatable, Identifiable {
     let proteinInput: Int?
     let note: String?
     let isSMB: Bool?
-<<<<<<< HEAD
     let isExternal: Bool?
-=======
-    let isExternalInsulin: Bool?
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     init(
         id: String,
@@ -31,17 +27,11 @@ struct PumpHistoryEvent: JSON, Equatable, Identifiable {
         rate: Decimal? = nil,
         temp: TempType? = nil,
         carbInput: Int? = nil,
-<<<<<<< HEAD
-        note: String? = nil,
-        isSMB: Bool? = nil,
-        isExternal: Bool? = nil
-=======
         fatInput: Int? = nil,
         proteinInput: Int? = nil,
         note: String? = nil,
         isSMB: Bool? = nil,
-        isExternalInsulin: Bool? = nil
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
+        isExternal: Bool? = nil
     ) {
         self.id = id
         self.type = type
@@ -56,21 +46,14 @@ struct PumpHistoryEvent: JSON, Equatable, Identifiable {
         self.proteinInput = proteinInput
         self.note = note
         self.isSMB = isSMB
-<<<<<<< HEAD
         self.isExternal = isExternal
-=======
-        self.isExternalInsulin = isExternalInsulin
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     }
 }
 
 enum EventType: String, JSON {
     case bolus = "Bolus"
     case smb = "SMB"
-<<<<<<< HEAD
     case isExternal = "External Insulin"
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     case mealBolus = "Meal Bolus"
     case correctionBolus = "Correction Bolus"
     case snackBolus = "Snack Bolus"
@@ -93,11 +76,8 @@ enum EventType: String, JSON {
     case nsBatteryChange = "Pump Battery Change"
     case nsAnnouncement = "Announcement"
     case nsSensorChange = "Sensor Start"
-<<<<<<< HEAD
     case capillaryGlucose = "BG Check"
-=======
     case nsExternalInsulin = "External Insulin"
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 }
 
 enum TempType: String, JSON {
@@ -120,10 +100,7 @@ extension PumpHistoryEvent {
         case proteinInput
         case note
         case isSMB
-<<<<<<< HEAD
         case isExternal
-=======
-        case isExternalInsulin
     }
 }
 
@@ -150,6 +127,5 @@ extension EventType {
         default:
             return nil
         }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     }
 }

+ 0 - 30
FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift

@@ -34,15 +34,10 @@ extension Bolus {
         @Published var minDelta: Decimal = 0
         @Published var expectedDelta: Decimal = 0
         @Published var minPredBG: Decimal = 0
-<<<<<<< HEAD
         @Published var waitForSuggestion: Bool = false
         @Published var carbRatio: Decimal = 0
 
         @Published var addButtonPressed: Bool = false
-=======
-        @Published var units: GlucoseUnits = .mmolL
-        @Published var maxBolus: Decimal = 0
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         var waitForSuggestionInitial: Bool = false
 
@@ -115,7 +110,6 @@ extension Bolus {
             broadcaster.register(BolusFailureObserver.self, observer: self)
             units = settingsManager.settings.units
             percentage = settingsManager.settings.insulinReqPercentage
-<<<<<<< HEAD
             maxBolus = provider.pumpSettings().maxBolus
             // added
             fraction = settings.settings.overrideFactor
@@ -129,10 +123,6 @@ extension Bolus {
             maxCarbs = settings.settings.maxCarbs
             skipBolus = settingsManager.settings.skipBolusScreenAfterCarbs
             useFPUconversion = settingsManager.settings.useFPUconversion
-=======
-            threshold = provider.suggestion?.threshold ?? 0
-            maxBolus = provider.pumpSettings().maxBolus
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
             if waitForSuggestionInitial {
                 Task {
@@ -351,7 +341,6 @@ extension Bolus {
                 return
             }
 
-<<<<<<< HEAD
             amount = min(amount, maxBolus * 3)
 
             do {
@@ -373,25 +362,6 @@ extension Bolus {
                     }
                 }
             }
-=======
-            pumpHistoryStorage.storeEvents(
-                [
-                    PumpHistoryEvent(
-                        id: UUID().uuidString,
-                        type: .bolus,
-                        timestamp: Date(),
-                        amount: amount,
-                        duration: nil,
-                        durationMin: nil,
-                        rate: nil,
-                        temp: nil,
-                        carbInput: nil,
-                        isExternalInsulin: true
-                    )
-                ]
-            )
-            showModal(for: nil)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
 
         // MARK: - Carbs

+ 0 - 72
FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift

@@ -122,7 +122,6 @@ extension Bolus {
                             isPromptPresented = false
                         }
                     }
-<<<<<<< HEAD
                     label: { Text("Save") }
                     Button {
                         dish = ""
@@ -130,77 +129,6 @@ extension Bolus {
                         isPromptPresented = false }
                     label: { Text("Cancel") }
                 } header: { Text("Enter Meal Preset Name") }
-=======
-                }
-                header: { Text("Recommendation") }
-
-                if !state.waitForSuggestion {
-                    Section {
-                        HStack {
-                            Text("Amount")
-                            Spacer()
-                            TextFieldWithToolBar(
-                                text: $state.amount,
-                                placeholder: "0",
-                                shouldBecomeFirstResponder: true,
-                                numberFormatter: formatter
-                            )
-                            Text(state.amount > state.maxBolus ? "⚠️" : "U").foregroundColor(.secondary)
-                        }
-                    }
-                    header: { Text("Bolus") }
-                    Section {
-                        Button { state.add() }
-                        label: {
-                            Text(
-                                state.amount <= state.maxBolus ? NSLocalizedString("Enact bolus", comment: "") :
-                                    NSLocalizedString("Max Bolus of", comment: "")
-                                    + " "
-                                    + formatter.string(from: state.maxBolus as NSNumber)!
-                                    + NSLocalizedString("U", comment: "Insulin unit")
-                                    + " "
-                                    + NSLocalizedString("exceeded", comment: "")
-                            ).font(.title3) }
-                            .disabled(state.amount <= 0 || state.amount > state.maxBolus)
-                            .foregroundStyle(
-                                state.amount <= 0 ? .gray :
-                                    state.amount > state.maxBolus ? .red : .blue
-                            )
-                            .frame(maxWidth: .infinity, alignment: .center)
-                    }
-                    if waitForSuggestion {
-                        Section {
-                            Button { state.showModal(for: nil) }
-                            label: { Text("Continue without bolus") }
-                        }.frame(maxWidth: .infinity, alignment: .center)
-                    }
-                }
-            }
-            .alert(isPresented: $displayError) {
-                Alert(
-                    title: Text("Warning!"),
-                    message: Text("\n" + alertString() + "\n"),
-                    primaryButton: .destructive(
-                        Text("Add"),
-                        action: {
-                            state.amount = state.insulinRecommended
-                            displayError = false
-                        }
-                    ),
-                    secondaryButton: .cancel()
-                )
-            }.onAppear {
-                configureView {
-                    state.waitForSuggestionInitial = waitForSuggestion
-                    state.waitForSuggestion = waitForSuggestion
-                }
-            }
-            .navigationTitle("Enact Bolus")
-            .navigationBarTitleDisplayMode(.automatic)
-            .navigationBarItems(leading: Button("Close", action: state.hideModal))
-            .popup(isPresented: presentInfo, alignment: .center, direction: .bottom) {
-                bolusInfo
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
         }
 

+ 0 - 152
FreeAPS/Sources/Modules/DataTable/DataTableStateModel.swift

@@ -8,27 +8,17 @@ extension DataTable {
         @Injected() var unlockmanager: UnlockManager!
         @Injected() private var storage: FileStorage!
         @Injected() var pumpHistoryStorage: PumpHistoryStorage!
-<<<<<<< HEAD
         @Injected() var healthKitManager: HealthKitManager!
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         let coredataContext = CoreDataStack.shared.newTaskContext()
 
         @Published var mode: Mode = .treatments
         @Published var treatments: [Treatment] = []
         @Published var glucose: [Glucose] = []
-<<<<<<< HEAD
         @Published var meals: [Treatment] = []
         @Published var manualGlucose: Decimal = 0
         @Published var maxBolus: Decimal = 0
         @Published var waitForSuggestion: Bool = false
-=======
-        @Published var manualGlucose: Decimal = 0
-        @Published var maxBolus: Decimal = 0
-        @Published var externalInsulinAmount: Decimal = 0
-        @Published var externalInsulinDate = Date()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         @Published var insulinEntryDeleted: Bool = false
         @Published var carbEntryDeleted: Bool = false
@@ -38,17 +28,7 @@ extension DataTable {
         override func subscribe() {
             units = settingsManager.settings.units
             maxBolus = provider.pumpSettings().maxBolus
-<<<<<<< HEAD
             broadcaster.register(DeterminationObserver.self, observer: self)
-=======
-            setupTreatments()
-            setupGlucose()
-            broadcaster.register(SettingsObserver.self, observer: self)
-            broadcaster.register(PumpHistoryObserver.self, observer: self)
-            broadcaster.register(TempTargetsObserver.self, observer: self)
-            broadcaster.register(CarbsObserver.self, observer: self)
-            broadcaster.register(GlucoseObserver.self, observer: self)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
 
         // Carb and FPU deletion from history
@@ -60,7 +40,6 @@ extension DataTable {
             }
         }
 
-<<<<<<< HEAD
         func deleteGlucose(_ treatmentObjectID: NSManagedObjectID) async {
             let taskContext = CoreDataStack.shared.newTaskContext()
             taskContext.name = "deleteContext"
@@ -79,141 +58,17 @@ extension DataTable {
                     if glucoseToDelete.isManual == true {
                         if let id = glucoseToDelete.id?.uuidString {
                             self.provider.deleteManualGlucose(withID: id)
-=======
-                let carbs = self.provider.carbs()
-                    .filter { !($0.isFPU ?? false) }
-                    .map {
-                        if let id = $0.id {
-                            return Treatment(
-                                units: units,
-                                type: .carbs,
-                                date: $0.createdAt,
-                                amount: $0.carbs,
-                                id: id,
-                                note: $0.note
-                            )
-                        } else {
-                            return Treatment(
-                                units: units,
-                                type: .carbs,
-                                date: $0.createdAt,
-                                amount: $0.carbs,
-                                note: $0.note
-                            )
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                         }
                     }
 
                     taskContext.delete(glucoseToDelete)
 
-<<<<<<< HEAD
                     guard taskContext.hasChanges else { return }
                     try taskContext.save()
                     debugPrint("Data Table State: \(#function) \(DebuggingIdentifiers.succeeded) deleted glucose from core data")
                 } catch {
                     debugPrint(
                         "Data Table State: \(#function) \(DebuggingIdentifiers.failed) error while deleting glucose from core data: \(error.localizedDescription)"
-=======
-                let boluses = self.provider.pumpHistory()
-                    .filter { $0.type == .bolus }
-                    .map {
-                        Treatment(
-                            units: units,
-                            type: .bolus,
-                            date: $0.timestamp,
-                            amount: $0.amount,
-                            idPumpEvent: $0.id,
-                            isSMB: $0.isSMB,
-                            isExternal: $0.isExternalInsulin
-                        )
-                    }
-
-                let tempBasals = self.provider.pumpHistory()
-                    .filter { $0.type == .tempBasal || $0.type == .tempBasalDuration }
-                    .chunks(ofCount: 2)
-                    .compactMap { chunk -> Treatment? in
-                        let chunk = Array(chunk)
-                        guard chunk.count == 2, chunk[0].type == .tempBasal,
-                              chunk[1].type == .tempBasalDuration else { return nil }
-                        return Treatment(
-                            units: units,
-                            type: .tempBasal,
-                            date: chunk[0].timestamp,
-                            amount: chunk[0].rate ?? 0,
-                            secondAmount: nil,
-                            duration: Decimal(chunk[1].durationMin ?? 0)
-                        )
-                    }
-
-                let tempTargets = self.provider.tempTargets()
-                    .map {
-                        Treatment(
-                            units: units,
-                            type: .tempTarget,
-                            date: $0.createdAt,
-                            amount: $0.targetBottom ?? 0,
-                            secondAmount: $0.targetTop,
-                            duration: $0.duration
-                        )
-                    }
-
-                let suspend = self.provider.pumpHistory()
-                    .filter { $0.type == .pumpSuspend }
-                    .map {
-                        Treatment(units: units, type: .suspend, date: $0.timestamp)
-                    }
-
-                let resume = self.provider.pumpHistory()
-                    .filter { $0.type == .pumpResume }
-                    .map {
-                        Treatment(units: units, type: .resume, date: $0.timestamp)
-                    }
-
-                DispatchQueue.main.async {
-                    self.treatments = [carbs, boluses, tempBasals, tempTargets, suspend, resume, fpus]
-                        .flatMap { $0 }
-                        .sorted { $0.date > $1.date }
-                }
-            }
-        }
-
-        func setupGlucose() {
-            DispatchQueue.main.async {
-                self.glucose = self.provider.glucose().map(Glucose.init)
-            }
-        }
-
-        func deleteCarbs(_ treatment: Treatment) {
-            provider.deleteCarbs(treatment)
-        }
-
-        func deleteInsulin(_ treatment: Treatment) {
-            unlockmanager.unlock()
-                .sink { _ in } receiveValue: { [weak self] _ in
-                    guard let self = self else { return }
-                    self.provider.deleteInsulin(treatment)
-                }
-                .store(in: &lifetime)
-        }
-
-        func deleteGlucose(_ glucose: Glucose) {
-            let id = glucose.id
-            provider.deleteGlucose(id: id)
-
-            let fetchRequest: NSFetchRequest<NSFetchRequestResult>
-            fetchRequest = NSFetchRequest(entityName: "Readings")
-            fetchRequest.predicate = NSPredicate(format: "id == %@", id)
-            let deleteRequest = NSBatchDeleteRequest(
-                fetchRequest: fetchRequest
-            )
-            deleteRequest.resultType = .resultTypeObjectIDs
-            do {
-                let deleteResult = try coredataContext.execute(deleteRequest) as? NSBatchDeleteResult
-                if let objectIDs = deleteResult?.result as? [NSManagedObjectID] {
-                    NSManagedObjectContext.mergeChanges(
-                        fromRemoteContextSave: [NSDeletedObjectsKey: objectIDs],
-                        into: [coredataContext]
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                     )
                 }
             }
@@ -323,16 +178,9 @@ extension DataTable {
             }
         }
 
-<<<<<<< HEAD
         func addManualGlucose() {
             let glucose = units == .mmolL ? manualGlucose.asMgdL : manualGlucose
             let glucoseAsInt = Int(glucose)
-=======
-        func logManualGlucose() {
-            let glucose = units == .mmolL ? manualGlucose.asMgdL : manualGlucose
-            let now = Date()
-            let id = UUID().uuidString
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
             // save to core data
             coredataContext.perform {

+ 0 - 277
FreeAPS/Sources/Modules/DataTable/View/DataTableRootView.swift

@@ -13,22 +13,11 @@ extension DataTable {
         @State private var alertCarbEntryToDelete: CarbEntryStored?
         @State private var alertGlucoseToDelete: GlucoseStored?
 
-<<<<<<< HEAD
         @State private var showFutureEntries: Bool = false // default to hide future entries
         @State private var showManualGlucose: Bool = false
         @State private var isAmountUnconfirmed: Bool = true
 
         @State private var showAlert = false
-=======
-        @State private var isRemoveHistoryItemAlertPresented: Bool = false
-        @State private var alertTitle: String = ""
-        @State private var alertMessage: String = ""
-        @State private var alertTreatmentToDelete: Treatment?
-        @State private var alertGlucoseToDelete: Glucose?
-        @State private var showManualGlucose = false
-        @State private var showExternalInsulin = false
-        @State private var isAmountUnconfirmed = true
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         @Environment(\.colorScheme) var colorScheme
         @Environment(\.managedObjectContext) var context
@@ -108,7 +97,6 @@ extension DataTable {
             return formatter
         }
 
-<<<<<<< HEAD
         private var color: LinearGradient {
             colorScheme == .dark ? LinearGradient(
                 gradient: Gradient(colors: [
@@ -196,29 +184,6 @@ extension DataTable {
                 return .updatingIOB
             default:
                 return .updatingHistory
-=======
-                Form {
-                    switch state.mode {
-                    case .treatments: treatmentsList
-                    case .glucose: glucoseList
-                    }
-                }
-            }
-            .onAppear(perform: configureView)
-            .navigationTitle("History")
-            .navigationBarTitleDisplayMode(.automatic)
-            .navigationBarItems(
-                leading: Button("Close", action: state.hideModal),
-                trailing: state.mode == .glucose ? logGlucoseButton.asAny() : logInsulinButton.asAny()
-            )
-            .sheet(isPresented: $showExternalInsulin, onDismiss: {
-                if isAmountUnconfirmed {
-                    state.externalInsulinAmount = 0
-                    state.externalInsulinDate = Date()
-                }
-            }) {
-                logExternalInsulinView
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
             .sheet(isPresented: $showManualGlucose) {
                 logGlucoseView
@@ -252,21 +217,10 @@ extension DataTable {
 
         private var treatmentsList: some View {
             List {
-<<<<<<< HEAD
                 HStack {
                     Text("Insulin").foregroundStyle(.secondary)
                     Spacer()
                     Text("Time").foregroundStyle(.secondary)
-=======
-                if !state.treatments.isEmpty {
-                    ForEach(state.treatments) { item in
-                        treatmentView(item)
-                    }
-                } else {
-                    HStack {
-                        Text("No data.")
-                    }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
                 if !pumpEventStored.isEmpty {
                     ForEach(pumpEventStored.filter({ !showFutureEntries ? $0.timestamp ?? Date() <= Date() : true })) { item in
@@ -301,7 +255,6 @@ extension DataTable {
 
         private var glucoseList: some View {
             List {
-<<<<<<< HEAD
                 HStack {
                     Text("Values").foregroundStyle(.secondary)
                     Spacer()
@@ -536,210 +489,6 @@ extension DataTable {
 
                 Text(dateFormatter.string(from: meal.date ?? Date()))
                     .moveDisabled(true)
-=======
-                if !state.glucose.isEmpty {
-                    ForEach(state.glucose) { item in
-                        glucoseView(item)
-                    }
-                } else {
-                    HStack {
-                        Text(NSLocalizedString("No data.", comment: "No data text when no entries in history list"))
-                    }
-                }
-            }
-        }
-
-        private var logGlucoseView: some View {
-            NavigationView {
-                VStack {
-                    Form {
-                        Section {
-                            HStack {
-                                Text("New Glucose")
-                                TextFieldWithToolBar(
-                                    text: $state.manualGlucose,
-                                    placeholder: " ... ",
-                                    shouldBecomeFirstResponder: true,
-                                    numberFormatter: glucoseFormatter
-                                )
-                                Text(state.units.rawValue).foregroundStyle(.secondary)
-                            }
-                        }
-
-                        Section {
-                            HStack {
-                                let limitLow: Decimal = state.units == .mmolL ? 0.8 : 40
-                                let limitHigh: Decimal = state.units == .mmolL ? 14 : 720
-
-                                Button {
-                                    state.logManualGlucose()
-                                    isAmountUnconfirmed = false
-                                    showManualGlucose = false
-                                }
-                                label: { Text("Save") }
-                                    .frame(maxWidth: .infinity, alignment: .center)
-                                    .disabled(state.manualGlucose < limitLow || state.manualGlucose > limitHigh)
-                            }
-                        }
-                    }
-                }
-                .onAppear(perform: configureView)
-                .navigationTitle("Log Glucose")
-                .navigationBarTitleDisplayMode(.automatic)
-                .navigationBarItems(leading: Button("Close", action: { showManualGlucose = false }))
-            }
-        }
-
-        @ViewBuilder private func treatmentView(_ item: Treatment) -> some View {
-            HStack {
-                if item.type == .bolus || item.type == .carbs {
-                    Image(systemName: "circle.fill").foregroundColor(item.color).padding(.vertical)
-                } else {
-                    Image(systemName: "circle.fill").foregroundColor(item.color)
-                }
-                Text((item.isSMB ?? false) ? "SMB" : item.type.name)
-                Text(item.amountText).foregroundColor(.secondary)
-                if let duration = item.durationText {
-                    Text(duration).foregroundColor(.secondary)
-                }
-                Spacer()
-                Text(dateFormatter.string(from: item.date))
-                    .moveDisabled(true)
-            }
-            .swipeActions {
-                // Only allow swipe to delete if a carb, fpu, or bolus entry.
-                if item.type == .carbs || item.type == .fpus || item.type == .bolus {
-                    Button(
-                        "Delete",
-                        systemImage: "trash.fill",
-                        role: .none,
-                        action: {
-                            alertTreatmentToDelete = item
-
-                            if item.type == .carbs {
-                                alertTitle = "Delete Carbs?"
-                                alertMessage = dateFormatter.string(from: item.date) + ", " + item.amountText
-                            } else if item.type == .fpus {
-                                alertTitle = "Delete Carb Equivalents?"
-                                alertMessage = "All FPUs of the meal will be deleted."
-                            } else {
-                                // item is insulin treatment; item.type == .bolus
-                                alertTitle = "Delete Insulin?"
-                                alertMessage = dateFormatter.string(from: item.date) + ", " + item.amountText
-
-                                if item.isSMB ?? false {
-                                    // Add text snippet, so that alert message is more descriptive for SMBs
-                                    alertMessage += " SMB"
-                                }
-                            }
-
-                            isRemoveHistoryItemAlertPresented = true
-                        }
-                    ).tint(.red)
-                }
-            }
-            .alert(
-                Text(NSLocalizedString(alertTitle, comment: "")),
-                isPresented: $isRemoveHistoryItemAlertPresented
-            ) {
-                Button("Cancel", role: .cancel) {}
-                Button("Delete", role: .destructive) {
-                    guard let treatmentToDelete = alertTreatmentToDelete else {
-                        debug(.default, "Cannot gracefully unwrap alertTreatmentToDelete!")
-                        return
-                    }
-
-                    if treatmentToDelete.type == .carbs || treatmentToDelete.type == .fpus {
-                        state.deleteCarbs(treatmentToDelete)
-                    } else {
-                        state.deleteInsulin(treatmentToDelete)
-                    }
-                }
-            } message: {
-                Text("\n" + NSLocalizedString(alertMessage, comment: ""))
-            }
-        }
-
-        var logExternalInsulinView: some View {
-            NavigationView {
-                VStack {
-                    Form {
-                        Section {
-                            HStack {
-                                Text("Amount")
-                                Spacer()
-                                TextFieldWithToolBar(
-                                    text: $state.externalInsulinAmount,
-                                    placeholder: "0",
-                                    shouldBecomeFirstResponder: true,
-                                    numberFormatter: insulinFormatter
-                                )
-                                Text("U").foregroundColor(.secondary)
-                            }
-                        }
-
-                        Section {
-                            DatePicker("Date", selection: $state.externalInsulinDate, in: ...Date())
-                        }
-
-                        let amountWarningCondition = (state.externalInsulinAmount > state.maxBolus) &&
-                            (state.externalInsulinAmount <= state.maxBolus * 3)
-
-                        Section {
-                            HStack {
-                                Button {
-                                    state.logExternalInsulin()
-                                    isAmountUnconfirmed = false
-                                    showExternalInsulin = false
-                                }
-                                label: {
-                                    Text("Save")
-                                }
-                                .foregroundColor(amountWarningCondition ? Color.white : Color.accentColor)
-                                .frame(maxWidth: .infinity, alignment: .center)
-                                .disabled(
-                                    state.externalInsulinAmount <= 0 || state.externalInsulinAmount > state
-                                        .maxBolus * 3
-                                )
-                            }
-                        }
-                        header: {
-                            if amountWarningCondition
-                            {
-                                Text("⚠️ Warning! The entered insulin amount is greater than your Max Bolus setting!")
-                            }
-                        }
-                        .listRowBackground(
-                            amountWarningCondition ? Color
-                                .red : colorScheme == .dark ? Color(UIColor.secondarySystemBackground) : Color.white
-                        )
-                    }
-                }
-                .onAppear(perform: configureView)
-                .navigationTitle("Log External Insulin")
-                .navigationBarTitleDisplayMode(.automatic)
-                .navigationBarItems(leading: Button("Close", action: { showExternalInsulin = false
-                    state.externalInsulinAmount = 0 }))
-            }
-        }
-
-        @ViewBuilder private func glucoseView(_ item: Glucose) -> some View {
-            HStack {
-                Text(item.glucose.glucose.map {
-                    glucoseFormatter.string(from: Double(
-                        state.units == .mmolL ? $0.asMmolL : Decimal($0)
-                    ) as NSNumber)!
-                } ?? "--")
-                if item.glucose.type == "Manual" {
-                    Image(systemName: "drop.fill")
-                        .foregroundColor(Color.loopRed)
-                } else {
-                    Text(item.glucose.direction?.symbol ?? "--")
-                }
-                Spacer()
-
-                Text(dateFormatter.string(from: item.glucose.dateString))
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
             .swipeActions {
                 Button(
@@ -747,7 +496,6 @@ extension DataTable {
                     systemImage: "trash.fill",
                     role: .none,
                     action: {
-<<<<<<< HEAD
                         alertCarbEntryToDelete = meal
 
                         if !meal.isFPU {
@@ -759,16 +507,6 @@ extension DataTable {
                             alertTitle = "Delete Carb Equivalents?"
                             alertMessage = "All FPUs of the meal will be deleted."
                         }
-=======
-                        alertGlucoseToDelete = item
-
-                        let valueText = glucoseFormatter.string(from: Double(
-                            state.units == .mmolL ? Double(item.glucose.value.asMmolL) : item.glucose.value
-                        ) as NSNumber)! + " " + state.units.rawValue
-
-                        alertTitle = "Delete Glucose?"
-                        alertMessage = dateFormatter.string(from: item.glucose.dateString) + ", " + valueText
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
                         isRemoveHistoryItemAlertPresented = true
                     }
@@ -780,7 +518,6 @@ extension DataTable {
             ) {
                 Button("Cancel", role: .cancel) {}
                 Button("Delete", role: .destructive) {
-<<<<<<< HEAD
                     guard let carbEntryToDelete = alertCarbEntryToDelete else {
                         debug(.default, "Cannot gracefully unwrap alertCarbEntryToDelete!")
                         return
@@ -788,22 +525,10 @@ extension DataTable {
                     let treatmentObjectID = carbEntryToDelete.objectID
 
                     state.invokeCarbDeletionTask(treatmentObjectID)
-=======
-                    // gracefully unwrap value here.
-                    // value cannot ever really be nil because it is an existing(!) table entry
-                    // but just to be sure.
-                    guard let glucoseToDelete = alertGlucoseToDelete else {
-                        print("Cannot gracefully unwrap alertTreatmentToDelete!")
-                        return
-                    }
-
-                    state.deleteGlucose(glucoseToDelete)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             } message: {
                 Text("\n" + NSLocalizedString(alertMessage, comment: ""))
             }
-<<<<<<< HEAD
         }
 
         // MARK: - Format glucose
@@ -814,8 +539,6 @@ extension DataTable {
             let formattedValue = formatter.string(from: glucoseValue as NSNumber) ?? "--"
 
             return formattedValue
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 }

+ 3 - 104
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -9,7 +9,7 @@ extension Home {
     final class StateModel: BaseStateModel<Provider> {
         @Injected() var broadcaster: Broadcaster!
         @Injected() var apsManager: APSManager!
-<<<<<<< HEAD
+        @Injected() var fetchGlucoseManager: FetchGlucoseManager!
         @Injected() var nightscoutManager: NightscoutManager!
         @Injected() var determinationStorage: DeterminationStorage!
         private let timer = DispatchTimer(timeInterval: 5)
@@ -17,15 +17,6 @@ extension Home {
         @Published var manualGlucose: [BloodGlucose] = []
         @Published var announcement: [Announcement] = []
         @Published var uploadStats = false
-=======
-        @Injected() var fetchGlucoseManager: FetchGlucoseManager!
-
-        private let timer = DispatchTimer(timeInterval: 5)
-        private(set) var filteredHours = 24
-        @Published var glucose: [BloodGlucose] = []
-        @Published var suggestion: Suggestion?
-        @Published var enactedSuggestion: Suggestion?
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         @Published var recentGlucose: BloodGlucose?
         @Published var maxBasal: Decimal = 2
         @Published var autotunedBasalProfile: [BasalProfileEntry] = []
@@ -61,27 +52,17 @@ extension Home {
         @Published var displayXgridLines: Bool = false
         @Published var displayYgridLines: Bool = false
         @Published var thresholdLines: Bool = false
-<<<<<<< HEAD
         @Published var timeZone: TimeZone?
         @Published var hours: Int16 = 6
         @Published var totalBolus: Decimal = 0
-=======
-        @Published var cgmAvailable: Bool = false
-        @Published var pumpStatusHighlightMessage: String? = nil
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
-
         @Published var isStatusPopupPresented: Bool = false
         @Published var isLegendPresented: Bool = false
         @Published var legendSheetDetent = PresentationDetent.large
         @Published var tins: Bool = false
         @Published var isTempTargetActive: Bool = false
-
         @Published var roundedTotalBolus: String = ""
-
         @Published var selectedTab: Int = 0
-
         @Published var waitForSuggestion: Bool = false
-
         @Published var glucoseFromPersistence: [GlucoseStored] = []
         @Published var manualGlucoseFromPersistence: [GlucoseStored] = []
         @Published var carbsFromPersistence: [CarbEntryStored] = []
@@ -123,12 +104,8 @@ extension Home {
             setupOverrides()
             setupOverrideRunStored()
 
-<<<<<<< HEAD
-            uploadStats = settingsManager.settings.uploadStats
-=======
-            suggestion = provider.suggestion
-            enactedSuggestion = provider.enactedSuggestion
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
+        // TODO: isUploadEnabled the right var here??
+            uploadStats = settingsManager.settings.isUploadEnabled
             units = settingsManager.settings.units
             allowManualTemp = !settingsManager.settings.closedLoop
             closedLoop = settingsManager.settings.closedLoop
@@ -271,7 +248,6 @@ extension Home {
             }
         }
 
-<<<<<<< HEAD
         @MainActor func cancelOverride(withID id: NSManagedObjectID) async {
             do {
                 let profileToCancel = try viewContext.existingObject(with: id) as? OverrideStored
@@ -285,20 +261,6 @@ extension Home {
                 Foundation.NotificationCenter.default.post(name: .didUpdateOverrideConfiguration, object: nil)
             } catch {
                 debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to cancel Profile")
-=======
-        private func setupGlucose() {
-            DispatchQueue.main.async { [weak self] in
-                guard let self = self else { return }
-                self.glucose = self.provider.filteredGlucose(hours: self.filteredHours)
-                self.recentGlucose = self.glucose.last
-                if self.glucose.count >= 2 {
-                    self.glucoseDelta = (self.recentGlucose?.glucose ?? 0) - (self.glucose[self.glucose.count - 2].glucose ?? 0)
-                } else {
-                    self.glucoseDelta = nil
-                }
-                self.alarm = self.provider.glucoseStorage.alarm
-                cgmAvailable = (fetchGlucoseManager.cgmGlucoseSourceType != CGMType.none)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
         }
 
@@ -388,32 +350,6 @@ extension Home {
             }
         }
 
-<<<<<<< HEAD
-=======
-        private func setupBattery() {
-            DispatchQueue.main.async { [weak self] in
-                guard let self = self else { return }
-                self.battery = self.provider.pumpBattery()
-            }
-        }
-
-        /// Display the eventual status message provided by the manager of the pump
-        /// Only display if state is warning or critical message else return nil
-        private func displayPumpStatusHighlightMessage(_ didDeactivate: Bool = false) {
-            DispatchQueue.main.async { [weak self] in
-                guard let self = self else { return }
-                if let statusHighlight = self.provider.deviceManager.pumpManager?.pumpStatusHighlight,
-                   statusHighlight.state == .warning || statusHighlight.state == .critical, !didDeactivate
-                {
-                    pumpStatusHighlightMessage = (statusHighlight.state == .warning ? "⚠️\n" : "‼️\n") + statusHighlight
-                        .localizedMessage
-                } else {
-                    pumpStatusHighlightMessage = nil
-                }
-            }
-        }
-
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         private func setupCurrentTempTarget() {
             tempTarget = provider.tempTarget()
         }
@@ -447,15 +383,8 @@ extension Home.StateModel:
     PumpSettingsObserver,
     BasalProfileObserver,
     TempTargetsObserver,
-<<<<<<< HEAD
     PumpReservoirObserver,
     PumpTimeZoneObserver,
-=======
-    CarbsObserver,
-    EnactedSuggestionObserver,
-    PumpBatteryObserver,
-    PumpReservoirObserver,
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     PumpDeactivatedObserver
 {
     func glucoseDidUpdate(_: [BloodGlucose]) {
@@ -482,18 +411,9 @@ extension Home.StateModel:
         tins = settingsManager.settings.tins
     }
 
-<<<<<<< HEAD
-//    func pumpHistoryDidUpdate(_: [PumpHistoryEvent]) {
-//        setupAnnouncements()
-//    }
-=======
     func pumpHistoryDidUpdate(_: [PumpHistoryEvent]) {
-        setupBasals()
-        setupBoluses()
-        setupSuspensions()
         displayPumpStatusHighlightMessage()
     }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     func pumpSettingsDidChange(_: PumpSettings) {
         setupPumpSettings()
@@ -507,23 +427,6 @@ extension Home.StateModel:
         setupTempTargets()
     }
 
-<<<<<<< HEAD
-=======
-    func carbsDidUpdate(_: [CarbsEntry]) {
-        setupCarbs()
-    }
-
-    func enactedSuggestionDidUpdate(_ suggestion: Suggestion) {
-        enactedSuggestion = suggestion
-        setStatusTitle()
-    }
-
-    func pumpBatteryDidChange(_: Battery) {
-        setupBattery()
-        displayPumpStatusHighlightMessage()
-    }
-
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     func pumpReservoirDidChange(_: Decimal) {
         setupReservoir()
         displayPumpStatusHighlightMessage()
@@ -536,10 +439,6 @@ extension Home.StateModel:
     func pumpTimeZoneDidChange(_: TimeZone) {
         setupCurrentPumpTimezone()
     }
-
-    func pumpDeactivatedDidChange() {
-        displayPumpStatusHighlightMessage(true)
-    }
 }
 
 extension Home.StateModel: CompletionDelegate {

+ 0 - 190
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -55,7 +55,6 @@ struct MainChartView: View {
     @StateObject var state: Home.StateModel
 
     @State var didAppearTrigger = false
-<<<<<<< HEAD
     @State private var basalProfiles: [BasalProfile] = []
     @State private var chartTempTargets: [ChartTempTarget] = []
     @State private var count: Decimal = 1
@@ -64,25 +63,6 @@ struct MainChartView: View {
     @State private var minValue: Decimal = 45
     @State private var maxValue: Decimal = 270
     @State private var selection: Date? = nil
-=======
-    @State private var glucoseDots: [CGRect] = []
-    @State private var unSmoothedGlucoseDots: [CGRect] = []
-    @State private var manualGlucoseDots: [CGRect] = []
-    @State private var predictionDots: [PredictionType: [CGRect]] = [:]
-    @State private var bolusDots: [DotInfo] = []
-    @State private var bolusPath = Path()
-    @State private var tempBasalPath = Path()
-    @State private var regularBasalPath = Path()
-    @State private var tempTargetsPath = Path()
-    @State private var suspensionsPath = Path()
-    @State private var carbsDots: [DotInfo] = []
-    @State private var carbsPath = Path()
-    @State private var fpuDots: [DotInfo] = []
-    @State private var fpuPath = Path()
-    @State private var glucoseYRange: GlucoseYRange = (0, 0, 0, 0)
-    @State private var offset: CGFloat = 0
-    @State private var cachedMaxBasalRate: Decimal?
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     private let now = Date.now
 
@@ -319,7 +299,6 @@ extension MainChartView {
         if let sgv = selectedGlucose?.glucose {
             let glucoseToShow = Decimal(sgv) * conversionFactor
             VStack {
-<<<<<<< HEAD
                 Text(selectedGlucose?.date?.formatted(.dateTime.hour().minute(.twoDigits)) ?? "")
                 HStack {
                     Text(glucoseToShow.formatted(.number.precision(units == .mmolL ? .fractionLength(1) : .fractionLength(0))))
@@ -329,36 +308,6 @@ extension MainChartView {
                                 .red : (Decimal(sgv) > highGlucose ? Color.orange : Color.primary)
                         )
                     Text(units.rawValue).foregroundColor(.secondary)
-=======
-                ZStack {
-                    xGridView(fullSize: fullSize)
-                    carbsView(fullSize: fullSize)
-                    fpuView(fullSize: fullSize)
-                    bolusView(fullSize: fullSize)
-                    if smooth { unSmoothedGlucoseView(fullSize: fullSize) }
-                    glucoseView(fullSize: fullSize)
-                    manualGlucoseView(fullSize: fullSize)
-                    predictionsView(fullSize: fullSize)
-                }
-                timeLabelsView(fullSize: fullSize)
-            }
-        }
-        .frame(width: fullGlucoseWidth(viewWidth: fullSize.width) + additionalWidth(viewWidth: fullSize.width))
-    }
-
-    @Environment(\.colorScheme) var colorScheme
-
-    private func xGridView(fullSize: CGSize) -> some View {
-        let useColour = displayXgridLines ? Color.secondary : Color.clear
-        return ZStack {
-            Path { path in
-                for hour in 0 ..< hours + hours {
-                    let x = firstHourPosition(viewWidth: fullSize.width) +
-                        oneSecondStep(viewWidth: fullSize.width) *
-                        CGFloat(hour) * CGFloat(1.hours.timeInterval)
-                    path.move(to: CGPoint(x: x, y: 0))
-                    path.addLine(to: CGPoint(x: x, y: fullSize.height - 20))
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             }
             .padding(6)
@@ -382,63 +331,8 @@ extension MainChartView {
             }.onChange(of: state.tempBasals) { _ in
                 calculateBasals()
             }
-<<<<<<< HEAD
             .onChange(of: maxBasal) { _ in
                 calculateBasals()
-=======
-            path.addLines(lines)
-        }
-        .stroke(Color.loopGray, lineWidth: 0.5)
-        .onChange(of: glucose) { _ in
-            update(fullSize: fullSize)
-        }
-        .onChange(of: didAppearTrigger) { _ in
-            update(fullSize: fullSize)
-        }
-        .onReceive(Foundation.NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
-            update(fullSize: fullSize)
-        }
-    }
-
-    private func manualGlucoseView(fullSize: CGSize) -> some View {
-        ZStack {
-            Path { path in
-                for rect in manualGlucoseDots {
-                    path.addEllipse(in: rect)
-                }
-            }
-            .fill(Color.loopRed)
-            Path { path in
-                for rect in manualGlucoseDots {
-                    path.addEllipse(in: rect)
-                }
-            }
-            .stroke(Color.primary, lineWidth: 0.5)
-        }
-        .onChange(of: glucose) { _ in
-            update(fullSize: fullSize)
-        }
-        .onChange(of: didAppearTrigger) { _ in
-            update(fullSize: fullSize)
-        }
-        .onReceive(Foundation.NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
-            update(fullSize: fullSize)
-        }
-    }
-
-    private func bolusView(fullSize: CGSize) -> some View {
-        ZStack {
-            bolusPath
-                .fill(Color.insulin)
-            bolusPath
-                .stroke(Color.primary, lineWidth: 0.5)
-
-            ForEach(bolusDots, id: \.rect.minX) { info -> AnyView in
-                let position = CGPoint(x: info.rect.midX, y: info.rect.maxY + 8)
-                return Text(bolusFormatter.string(from: info.value as NSNumber)!).font(.caption2)
-                    .position(position)
-                    .asAny()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
             .onChange(of: autotunedBasalProfile) { _ in
                 calculateBasals()
@@ -508,7 +402,6 @@ extension MainChartView {
 // MARK: - Calculations
 
 extension MainChartView {
-<<<<<<< HEAD
     private func drawBoluses() -> some ChartContent {
         ForEach(state.insulinFromPersistence) { insulin in
             let amount = insulin.bolus?.amount ?? 0 as NSDecimalNumber
@@ -529,89 +422,6 @@ extension MainChartView {
                     Text(bolusFormatter.string(from: amount) ?? "")
                         .font(.caption2)
                         .foregroundStyle(Color.insulin)
-=======
-    private func update(fullSize: CGSize) {
-        calculatePredictionDots(fullSize: fullSize, type: .iob)
-        calculatePredictionDots(fullSize: fullSize, type: .cob)
-        calculatePredictionDots(fullSize: fullSize, type: .zt)
-        calculatePredictionDots(fullSize: fullSize, type: .uam)
-        calculateGlucoseDots(fullSize: fullSize)
-        calculateUnSmoothedGlucoseDots(fullSize: fullSize)
-        calculateManualGlucoseDots(fullSize: fullSize)
-        calculateBolusDots(fullSize: fullSize)
-        calculateCarbsDots(fullSize: fullSize)
-        calculateFPUsDots(fullSize: fullSize)
-        calculateTempTargetsRects(fullSize: fullSize)
-        calculateBasalPoints(fullSize: fullSize)
-        calculateSuspensions(fullSize: fullSize)
-    }
-
-    private func calculateGlucoseDots(fullSize: CGSize) {
-        calculationQueue.async {
-            let sgvs = glucose
-                .filter { $0.type != "Manual"
-                } // as fingerpricks will be drawn differently, slightly larger and red - so do not draw them here
-            let dots = sgvs.concurrentMap { value -> CGRect in
-                let position = glucoseToCoordinate(value, fullSize: fullSize)
-                return CGRect(x: position.x - 2, y: position.y - 2, width: 4, height: 4)
-            }
-
-            let range = self.getGlucoseYRange(fullSize: fullSize)
-
-            DispatchQueue.main.async {
-                glucoseYRange = range
-                glucoseDots = dots
-            }
-        }
-    }
-
-    private func calculateUnSmoothedGlucoseDots(fullSize: CGSize) {
-        calculationQueue.async {
-            let sgvs = glucose.filter { $0.type == "sgv" }
-            let dots = sgvs.concurrentMap { value -> CGRect in
-                let position = UnSmoothedGlucoseToCoordinate(value, fullSize: fullSize)
-                return CGRect(x: position.x - 2, y: position.y - 2, width: 4, height: 4)
-            }
-
-            let range = self.getGlucoseYRange(fullSize: fullSize)
-
-            DispatchQueue.main.async {
-                glucoseYRange = range
-                unSmoothedGlucoseDots = dots
-            }
-        }
-    }
-
-    private func calculateManualGlucoseDots(fullSize: CGSize) {
-        calculationQueue.async {
-            let manuals = glucose.filter { $0.type == "Manual" }
-            let dots = manuals.concurrentMap { value -> CGRect in
-                let position = glucoseToCoordinate(value, fullSize: fullSize)
-                return CGRect(x: position.x - 2, y: position.y - 2, width: 6, height: 6)
-            }
-
-            let range = self.getGlucoseYRange(fullSize: fullSize)
-
-            DispatchQueue.main.async {
-                glucoseYRange = range
-                manualGlucoseDots = dots
-            }
-        }
-    }
-
-    private func calculateBolusDots(fullSize: CGSize) {
-        calculationQueue.async {
-            let dots = boluses.map { value -> DotInfo in
-                let center = timeToInterpolatedPoint(value.timestamp.timeIntervalSince1970, fullSize: fullSize)
-                let size = Config.bolusSize + CGFloat(value.amount ?? 0) * Config.bolusScale
-                let rect = CGRect(x: center.x - size / 2, y: center.y - size / 2, width: size, height: size)
-                return DotInfo(rect: rect, value: value.amount ?? 0)
-            }
-
-            let path = Path { path in
-                for dot in dots {
-                    path.addEllipse(in: dot.rect)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             }
         }

+ 0 - 59
FreeAPS/Sources/Modules/Home/View/Header/CurrentGlucoseView.swift

@@ -2,18 +2,11 @@ import CoreData
 import SwiftUI
 
 struct CurrentGlucoseView: View {
-<<<<<<< HEAD
     @Binding var timerDate: Date
-=======
-    @Binding var recentGlucose: BloodGlucose?
-    @Binding var timerDate: Date
-    @Binding var delta: Int?
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     @Binding var units: GlucoseUnits
     @Binding var alarm: GlucoseAlarm?
     @Binding var lowGlucose: Decimal
     @Binding var highGlucose: Decimal
-<<<<<<< HEAD
     var glucose: [GlucoseStored]
     var manualGlucose: [GlucoseStored]
 
@@ -34,9 +27,6 @@ struct CurrentGlucoseView: View {
         let combined = (glucose + manualGlucose).sorted { $0.date ?? Date() > $1.date ?? Date() }
         return combined
     }
-=======
-    @Binding var cgmAvailable: Bool
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
@@ -82,7 +72,6 @@ struct CurrentGlucoseView: View {
     }
 
     var body: some View {
-<<<<<<< HEAD
         let triangleColor = Color(red: 0.262745098, green: 0.7333333333, blue: 0.9137254902)
 
         ZStack {
@@ -148,54 +137,6 @@ struct CurrentGlucoseView: View {
                     rotationDegrees = 0
                 }
             }
-=======
-        if cgmAvailable {
-            VStack(alignment: .center) {
-                HStack {
-                    Text(
-                        (recentGlucose?.glucose ?? 100) == 400 ? "HIGH" : recentGlucose?.glucose
-                            .map {
-                                glucoseFormatter
-                                    .string(from: Double(units == .mmolL ? $0.asMmolL : Decimal($0)) as NSNumber)! }
-                            ?? "--"
-                    )
-                    .font(.title).fontWeight(.bold)
-                    .foregroundColor(alarm == nil ? colorOfGlucose : .loopRed)
-
-                    image
-                }
-                HStack {
-                    let minutesAgo = -1 * (recentGlucose?.dateString.timeIntervalSinceNow ?? 0) / 60
-                    let text = timaAgoFormatter.string(for: Double(minutesAgo)) ?? ""
-                    Text(
-                        minutesAgo <= 1 ? "< 1 " + NSLocalizedString("min", comment: "Short form for minutes") : (
-                            text + " " +
-                                NSLocalizedString("min", comment: "Short form for minutes") + " "
-                        )
-                    )
-                    .font(.caption2).foregroundColor(.secondary)
-
-                    Text(
-                        delta
-                            .map {
-                                deltaFormatter.string(from: Double(units == .mmolL ? $0.asMmolL : Decimal($0)) as NSNumber)!
-                            } ?? "--"
-                    )
-                    .font(.caption2).foregroundColor(.secondary)
-                }.frame(alignment: .top)
-            }
-        } else {
-            VStack(alignment: .center, spacing: 12) {
-                HStack
-                    {
-                        // no cgm defined so display a generic CGM
-                        Image(systemName: "sensor.tag.radiowaves.forward.fill").font(.body).imageScale(.large)
-                    }
-                HStack {
-                    Text("Add CGM").font(.caption).bold()
-                }
-            }.frame(alignment: .top)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 

+ 43 - 121
FreeAPS/Sources/Modules/Home/View/Header/PumpView.swift

@@ -6,15 +6,11 @@ struct PumpView: View {
     @Binding var name: String
     @Binding var expiresAtDate: Date?
     @Binding var timerDate: Date
-<<<<<<< HEAD
     @Binding var timeZone: TimeZone?
     @Binding var pumpStatusHighlightMessage: String?
     var battery: [OpenAPS_Battery]
 
     @Environment(\.colorScheme) var colorScheme
-=======
-    @Binding var pumpStatusHighlightMessage: String?
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
     private var reservoirFormatter: NumberFormatter {
         let formatter = NumberFormatter()
@@ -29,7 +25,6 @@ struct PumpView: View {
         return formatter
     }
 
-<<<<<<< HEAD
     private var numberFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
@@ -98,78 +93,17 @@ struct PumpView: View {
                             .foregroundColor(batteryColor)
                         Text("\(Int(battery.first?.percent ?? 100)) %").font(.system(size: 16, design: .rounded))
                     }
-=======
-    var body: some View {
-        if let pumpStatusHighlightMessage = pumpStatusHighlightMessage { // display message instead pump info
-            VStack(alignment: .center) {
-                Text(pumpStatusHighlightMessage).font(.footnote).fontWeight(.bold)
-                    .multilineTextAlignment(.center).frame(maxWidth: /*@START_MENU_TOKEN@*/ .infinity/*@END_MENU_TOKEN@*/)
-            }.frame(width: 100)
-        } else {
-            VStack(alignment: .leading, spacing: 12) {
-                if reservoir == nil && battery == nil {
-                    VStack(alignment: .center, spacing: 12) {
-                        HStack { // no cgm defined so display a generic CGM
-                            Image(systemName: "keyboard.onehanded.left").font(.body).imageScale(.large)
-                        }
-                        HStack {
-                            Text("Add pump").font(.caption).bold()
-                        }
-                    }.frame(alignment: .top)
-                }
-
-                if let reservoir = reservoir {
-                    HStack {
-                        Image(systemName: "drop.fill")
-                            .resizable()
-                            .aspectRatio(contentMode: .fit)
-                            .frame(maxHeight: 10)
-                            .foregroundColor(reservoirColor)
-                        if reservoir == 0xDEAD_BEEF {
-                            Text("50+ " + NSLocalizedString("U", comment: "Insulin unit")).font(.footnote)
-                                .fontWeight(.bold)
-                        } else {
-                            Text(
-                                reservoirFormatter
-                                    .string(from: reservoir as NSNumber)! +
-                                    NSLocalizedString(" U", comment: "Insulin unit")
-                            )
-                            .font(.footnote).fontWeight(.bold)
-                        }
-                    }.frame(alignment: .top)
-                }
-                if let battery = battery, battery.display ?? false, expiresAtDate == nil {
-                    HStack {
-                        Image(systemName: "battery.100")
-                            .resizable()
-                            .aspectRatio(contentMode: .fit)
-                            .frame(maxHeight: 10)
-                            .foregroundColor(batteryColor)
-                        Text("\(Int(battery.percent ?? 100)) %").font(.footnote)
-                            .fontWeight(.bold)
-                    }.frame(alignment: .bottom)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
 
                 if let date = expiresAtDate {
                     HStack {
                         Image(systemName: "stopwatch.fill")
-<<<<<<< HEAD
                             .font(.system(size: 16))
                             .foregroundColor(timerColor)
 
                         Text(remainingTimeString(time: date.timeIntervalSince(timerDate)))
                             .font(.system(size: 16, design: .rounded))
                     }
-=======
-                            .resizable()
-                            .aspectRatio(contentMode: .fit)
-                            .frame(maxHeight: 10)
-                            .foregroundColor(timerColor)
-                        Text(remainingTimeString(time: date.timeIntervalSince(timerDate))).font(.footnote)
-                            .fontWeight(.bold)
-                    }.frame(alignment: .bottom)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 }
             }
         }
@@ -247,58 +181,46 @@ struct PumpView: View {
     }
 }
 
-<<<<<<< HEAD
-struct Hairline: View {
-    let color: Color
-
-    var body: some View {
-        Rectangle()
-            .fill(color)
-            .frame(width: UIScreen.main.bounds.width / 1.3, height: 1)
-            .opacity(0.5)
-    }
-=======
-#Preview("message") {
-    PumpView(
-        reservoir: .constant(Decimal(10.0)),
-        battery: .constant(nil),
-        name: .constant("Pump test"),
-        expiresAtDate: .constant(Date().addingTimeInterval(24.hours)),
-        timerDate: .constant(Date()),
-        pumpStatusHighlightMessage: .constant("⚠️\n Insulin suspended")
-    )
-}
-
-#Preview("pump reservoir") {
-    PumpView(
-        reservoir: .constant(Decimal(40.0)),
-        battery: .constant(Battery(percent: 50, voltage: 2.0, string: BatteryState.normal, display: true)),
-        name: .constant("Pump test"),
-        expiresAtDate: .constant(nil),
-        timerDate: .constant(Date().addingTimeInterval(-24.hours)),
-        pumpStatusHighlightMessage: .constant(nil)
-    )
-}
-
-#Preview("pump expiration") {
-    PumpView(
-        reservoir: .constant(Decimal(10.0)),
-        battery: .constant(Battery(percent: 50, voltage: 2.0, string: BatteryState.normal, display: false)),
-        name: .constant("Pump test"),
-        expiresAtDate: .constant(Date().addingTimeInterval(2.hours)),
-        timerDate: .constant(Date().addingTimeInterval(2.hours)),
-        pumpStatusHighlightMessage: .constant(nil)
-    )
-}
-
-#Preview("no pump") {
-    PumpView(
-        reservoir: .constant(nil),
-        battery: .constant(nil),
-        name: .constant(""),
-        expiresAtDate: .constant(nil),
-        timerDate: .constant(Date()),
-        pumpStatusHighlightMessage: .constant(nil)
-    )
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
-}
+//#Preview("message") {
+//    PumpView(
+//        reservoir: .constant(Decimal(10.0)),
+//        battery: .constant(nil),
+//        name: .constant("Pump test"),
+//        expiresAtDate: .constant(Date().addingTimeInterval(24.hours)),
+//        timerDate: .constant(Date()),
+//        pumpStatusHighlightMessage: .constant("⚠️\n Insulin suspended")
+//    )
+//}
+//
+//#Preview("pump reservoir") {
+//    PumpView(
+//        reservoir: .constant(Decimal(40.0)),
+//        battery: .constant(Battery(percent: 50, voltage: 2.0, string: BatteryState.normal, display: true)),
+//        name: .constant("Pump test"),
+//        expiresAtDate: .constant(nil),
+//        timerDate: .constant(Date().addingTimeInterval(-24.hours)),
+//        pumpStatusHighlightMessage: .constant(nil)
+//    )
+//}
+//
+//#Preview("pump expiration") {
+//    PumpView(
+//        reservoir: .constant(Decimal(10.0)),
+//        battery: .constant(Battery(percent: 50, voltage: 2.0, string: BatteryState.normal, display: false)),
+//        name: .constant("Pump test"),
+//        expiresAtDate: .constant(Date().addingTimeInterval(2.hours)),
+//        timerDate: .constant(Date().addingTimeInterval(2.hours)),
+//        pumpStatusHighlightMessage: .constant(nil)
+//    )
+//}
+//
+//#Preview("no pump") {
+//    PumpView(
+//        reservoir: .constant(nil),
+//        name: .constant(nil),
+//        expiresAtDate: .constant(""),
+//        timerDate: .constant(nil),
+//        timeZone: .constant(Date()),
+//        pumpStatusHighlightMessage: .constant(nil)
+//    )
+//}

+ 0 - 145
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -155,18 +155,11 @@ extension Home {
 
         var glucoseView: some View {
             CurrentGlucoseView(
-<<<<<<< HEAD
                 timerDate: $state.timerDate,
-=======
-                recentGlucose: $state.recentGlucose,
-                timerDate: $state.timerDate,
-                delta: $state.glucoseDelta,
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                 units: $state.units,
                 alarm: $state.alarm,
                 lowGlucose: $state.lowGlucose,
                 highGlucose: $state.highGlucose,
-<<<<<<< HEAD
                 glucose: state.glucoseFromPersistence,
                 manualGlucose: state.manualGlucoseFromPersistence
             ).scaleEffect(0.9)
@@ -186,18 +179,6 @@ extension Home {
                         state.openCGM()
                     }
                 }
-=======
-                cgmAvailable: $state.cgmAvailable
-            )
-            .onTapGesture {
-                state.openCGM()
-            }
-            .onLongPressGesture {
-                let impactHeavy = UIImpactFeedbackGenerator(style: .heavy)
-                impactHeavy.impactOccurred()
-                state.showModal(for: .snooze)
-            }
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
 
         var pumpView: some View {
@@ -206,7 +187,6 @@ extension Home {
                 name: $state.pumpName,
                 expiresAtDate: $state.pumpExpiresAtDate,
                 timerDate: $state.timerDate,
-<<<<<<< HEAD
                 timeZone: $state.timeZone,
                 pumpStatusHighlightMessage: $state.pumpStatusHighlightMessage,
                 battery: state.batteryFromPersistence
@@ -214,12 +194,6 @@ extension Home {
                 if state.pumpDisplayState != nil {
                     state.setupPump = true
                 }
-=======
-                pumpStatusHighlightMessage: $state.pumpStatusHighlightMessage
-            )
-            .onTapGesture {
-                state.setupPump = true
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
             }
         }
 
@@ -310,64 +284,6 @@ extension Home {
             return tempTarget.displayName + " " + percentString
         }
 
-<<<<<<< HEAD
-=======
-        var overrideString: String? {
-            guard fetchedPercent.first?.enabled ?? false else {
-                return nil
-            }
-            var percentString = "\((fetchedPercent.first?.percentage ?? 100).formatted(.number)) %"
-            var target = (fetchedPercent.first?.target ?? 100) as Decimal
-            let indefinite = (fetchedPercent.first?.indefinite ?? false)
-            let unit = state.units.rawValue
-            if state.units == .mmolL {
-                target = target.asMmolL
-            }
-            var targetString = (fetchedTargetFormatter.string(from: target as NSNumber) ?? "") + " " + unit
-            if tempTargetString != nil || target == 0 { targetString = "" }
-            percentString = percentString == "100 %" ? "" : percentString
-
-            let duration = (fetchedPercent.first?.duration ?? 0) as Decimal
-            let addedMinutes = Int(duration)
-            let date = fetchedPercent.first?.date ?? Date()
-            var newDuration: Decimal = 0
-
-            if date.addingTimeInterval(addedMinutes.minutes.timeInterval) > Date() {
-                newDuration = Decimal(Date().distance(to: date.addingTimeInterval(addedMinutes.minutes.timeInterval)).minutes)
-            }
-
-            var durationString = indefinite ?
-                "" : newDuration >= 1 ?
-                (newDuration.formatted(.number.grouping(.never).rounded().precision(.fractionLength(0))) + " min") :
-                (
-                    newDuration > 0 ? (
-                        (newDuration * 60).formatted(.number.grouping(.never).rounded().precision(.fractionLength(0))) + " s"
-                    ) :
-                        ""
-                )
-
-            if durationString == "", !indefinite {
-                return nil
-            }
-
-            let smbToggleString = (
-                (fetchedPercent.first?.smbIsOff ?? false) || fetchedPercent.first?.smbIsScheduledOff ?? false
-            ) ?
-                " \u{20e0}" : ""
-            let smbScheduleString = (fetchedPercent.first?.smbIsScheduledOff ?? false) &&
-                !(fetchedPercent.first?.smbIsOff ?? false) ?
-                " \(fetchedPercent.first?.start ?? 0)-\(fetchedPercent.first?.end ?? 0)" : ""
-            let comma1 = (percentString == "" || (targetString == "" && durationString == "" && smbToggleString == ""))
-                ? "" : " , "
-            let comma2 = (targetString == "" || (durationString == "" && smbToggleString == ""))
-                ? "" : " , "
-            let comma3 = (durationString == "" || smbToggleString == "")
-                ? "" : " , "
-
-            return percentString + comma1 + targetString + comma2 + durationString + comma3 + smbToggleString + smbScheduleString
-        }
-
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         var infoPanel: some View {
             HStack(alignment: .center) {
                 if state.pumpSuspended {
@@ -404,54 +320,11 @@ extension Home {
             .frame(maxWidth: .infinity, maxHeight: 30)
         }
 
-<<<<<<< HEAD
         var timeInterval: some View {
             HStack(alignment: .center) {
                 ForEach(timeButtons) { button in
                     Text(button.active ? NSLocalizedString(button.label, comment: "") : button.number).onTapGesture {
                         state.hours = button.hours
-=======
-        var legendPanel: some View {
-            ZStack {
-                HStack(alignment: .center) {
-                    Group {
-                        Circle().fill(Color.loopGreen).frame(width: 8, height: 8)
-                        Text("BG")
-                            .font(.system(size: 12, weight: .bold)).foregroundColor(.loopGreen)
-                    }
-                    Group {
-                        Circle().fill(Color.insulin).frame(width: 8, height: 8)
-                            .padding(.leading, 8)
-                        Text("IOB")
-                            .font(.system(size: 12, weight: .bold)).foregroundColor(.insulin)
-                    }
-                    Group {
-                        Circle().fill(Color.zt).frame(width: 8, height: 8)
-                            .padding(.leading, 8)
-                        Text("ZT")
-                            .font(.system(size: 12, weight: .bold)).foregroundColor(.zt)
-                    }
-                    Group {
-                        Circle().fill(Color.loopYellow).frame(width: 8, height: 8)
-                            .padding(.leading, 8)
-                        Text("COB")
-                            .font(.system(size: 12, weight: .bold)).foregroundColor(.loopYellow)
-                    }
-                    Group {
-                        Circle().fill(Color.uam).frame(width: 8, height: 8)
-                            .padding(.leading, 8)
-                        Text("UAM")
-                            .font(.system(size: 12, weight: .bold)).foregroundColor(.uam)
-                    }
-
-                    if let eventualBG = state.eventualBG {
-                        Text(
-                            "⇢ " + targetFormatter.string(
-                                from: (state.units == .mmolL ? eventualBG.asMmolL : Decimal(eventualBG)) as NSNumber
-                            )!
-                        )
-                        .font(.system(size: 12, weight: .bold)).foregroundColor(.secondary)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                     }
                     .foregroundStyle(button.active ? (colorScheme == .dark ? Color.white : Color.black).opacity(0.9) : .secondary)
                     .frame(maxHeight: 30).padding(.horizontal, 8)
@@ -568,21 +441,6 @@ extension Home {
                             .font(.system(size: 16))
                     }
                 }
-//                if let eventualBG = state.eventualBG {
-//                    HStack {
-//                        Image(systemName: "arrow.right.circle")
-//                            .font(.system(size: 16, weight: .bold))
-//                        Text(
-//                            numberFormatter.string(
-//                                from: (
-//                                    state.units == .mmolL ? eventualBG
-//                                        .asMmolL : Decimal(eventualBG)
-//                                ) as NSNumber
-//                            )!
-//                        )
-//                        .font(.system(size: 16))
-//                    }
-//                }
             }
         }
 
@@ -1064,9 +922,6 @@ extension Home {
                         .padding(.bottom, 4)
                         .padding(.top, 8)
                     Text(errorMessage).font(.caption).foregroundColor(.loopRed)
-                } else if let suggestion = state.suggestion, (suggestion.bg ?? 100) == 400 {
-                    Text("Invalid CGM reading (HIGH).").font(.callout).bold().foregroundColor(.loopRed).padding(.top, 8)
-                    Text("SMBs and High Temps Disabled.").font(.caption).foregroundColor(.white).padding(.bottom, 4)
                 }
             }
         }

+ 0 - 4
FreeAPS/Sources/Modules/ManualTempBasal/View/ManualTempBasalRootView.swift

@@ -37,16 +37,12 @@ extension ManualTempBasal {
                     HStack {
                         Text("Amount")
                         Spacer()
-<<<<<<< HEAD
-                        TextFieldWithToolBar(text: $state.rate, placeholder: "0", numberFormatter: formatter)
-=======
                         TextFieldWithToolBar(
                             text: $state.rate,
                             placeholder: "0",
                             shouldBecomeFirstResponder: true,
                             numberFormatter: formatter
                         )
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                         Text("U/hr").foregroundColor(.secondary)
                     }
                     Picker(selection: $state.durationIndex, label: Text("Duration")) {

+ 0 - 8
FreeAPS/Sources/Services/Network/NightscoutAPI.swift

@@ -321,11 +321,7 @@ extension NightscoutAPI {
             .eraseToAnyPublisher()
     }
 
-<<<<<<< HEAD
     func uploadTreatments(_ treatments: [NightscoutTreatment]) async throws {
-=======
-    func uploadTreatments(_ treatments: [NightscoutTreatment]) -> AnyPublisher<Void, Swift.Error> {
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         var components = URLComponents()
         components.scheme = url.scheme
         components.host = url.host
@@ -402,7 +398,6 @@ extension NightscoutAPI {
         debugPrint("Upload successful, response data: \(String(data: data, encoding: .utf8) ?? "No data")")
     }
 
-<<<<<<< HEAD
     func uploadStats(_ stats: NightscoutStatistics) async throws {
         var components = URLComponents()
         components.scheme = url.scheme
@@ -429,9 +424,6 @@ extension NightscoutAPI {
     }
 
     func uploadStatus(_ status: NightscoutStatus) async throws {
-=======
-    func uploadStatus(_ status: NightscoutStatus) -> AnyPublisher<Void, Swift.Error> {
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         var components = URLComponents()
         components.scheme = url.scheme
         components.host = url.host

+ 2 - 227
FreeAPS/Sources/Services/Network/NightscoutManager.swift

@@ -10,7 +10,6 @@ protocol NightscoutManager: GlucoseSource {
     func fetchCarbs() async -> [CarbsEntry]
     func fetchTempTargets() async -> [TempTarget]
     func fetchAnnouncements() -> AnyPublisher<[Announcement], Never>
-<<<<<<< HEAD
     func deleteCarbs(withID id: String) async
     func deleteInsulin(withID id: String) async
     func deleteManualGlucose(withID id: String) async
@@ -18,12 +17,6 @@ protocol NightscoutManager: GlucoseSource {
     func uploadGlucose() async
     func uploadManualGlucose() async
     func uploadStatistics(dailystat: Statistics) async
-=======
-    func deleteCarbs(at date: Date, isFPU: Bool?, fpuID: String?, syncID: String)
-    func deleteInsulin(at date: Date)
-    func uploadStatus()
-    func uploadGlucose()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     func uploadPreferences(_ preferences: Preferences)
     func uploadProfileAndSettings(_: Bool)
     var cgmURL: URL? { get }
@@ -59,10 +52,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         settingsManager.settings.isUploadEnabled
     }
 
-    private var isDownloadEnabled: Bool {
-        settingsManager.settings.isDownloadEnabled
-    }
-
     private var isUploadGlucoseEnabled: Bool {
         settingsManager.settings.uploadGlucose
     }
@@ -149,6 +138,7 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
 
     var glucoseManager: FetchGlucoseManager?
     var cgmManager: CGMManagerUI?
+    var cgmType: CGMType = .nightscout
 
     func fetch(_: DispatchTimer?) -> AnyPublisher<[BloodGlucose], Never> {
         Future { promise in
@@ -164,15 +154,9 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         fetch(nil)
     }
 
-<<<<<<< HEAD
     func fetchCarbs() async -> [CarbsEntry] {
         guard let nightscout = nightscoutAPI, isNetworkReachable else {
             return []
-=======
-    func fetchCarbs() -> AnyPublisher<[CarbsEntry], Never> {
-        guard let nightscout = nightscoutAPI, isNetworkReachable, isDownloadEnabled else {
-            return Just([]).eraseToAnyPublisher()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
 
         let since = carbsStorage.syncDate()
@@ -185,15 +169,9 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-<<<<<<< HEAD
     func fetchTempTargets() async -> [TempTarget] {
         guard let nightscout = nightscoutAPI, isNetworkReachable else {
             return []
-=======
-    func fetchTempTargets() -> AnyPublisher<[TempTarget], Never> {
-        guard let nightscout = nightscoutAPI, isNetworkReachable, isDownloadEnabled else {
-            return Just([]).eraseToAnyPublisher()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
 
         let since = tempTargetsStorage.syncDate()
@@ -207,7 +185,7 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
     }
 
     func fetchAnnouncements() -> AnyPublisher<[Announcement], Never> {
-        guard let nightscout = nightscoutAPI, isNetworkReachable, isDownloadEnabled else {
+        guard let nightscout = nightscoutAPI, isNetworkReachable else {
             return Just([]).eraseToAnyPublisher()
         }
 
@@ -217,7 +195,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
             .eraseToAnyPublisher()
     }
 
-<<<<<<< HEAD
     func deleteCarbs(withID id: String) async {
         guard let nightscout = nightscoutAPI, isUploadEnabled else { return }
 
@@ -232,62 +209,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                 .nightscout,
                 "\(DebuggingIdentifiers.failed) Failed to delete Carbs from Nightscout with error: \(error.localizedDescription)"
             )
-=======
-    func deleteCarbs(at date: Date, isFPU: Bool?, fpuID: String?, syncID: String) {
-        guard let nightscout = nightscoutAPI, isUploadEnabled else {
-            carbsStorage.deleteCarbs(at: date)
-            return
-        }
-
-        healthkitManager.deleteCarbs(syncID: syncID, fpuID: fpuID ?? "")
-
-        if let isFPU = isFPU, isFPU {
-            guard let fpuID = fpuID else { return }
-            let allValues = storage.retrieve(OpenAPS.Monitor.carbHistory, as: [CarbsEntry].self) ?? []
-            let dates = allValues.filter { $0.fpuID == fpuID }.map(\.createdAt).removeDublicates()
-
-            let publishers = dates
-                .map { d -> AnyPublisher<Void, Swift.Error> in
-                    nightscout.deleteCarbs(
-                        at: d
-                    )
-                }
-
-            Publishers.MergeMany(publishers)
-                .collect()
-                .sink { completion in
-                    self.carbsStorage.deleteCarbs(at: date)
-                    switch completion {
-                    case .finished:
-                        debug(.nightscout, "Carbs deleted")
-
-                    case let .failure(error):
-                        info(
-                            .nightscout,
-                            "Deletion of carbs in NightScout not done \n \(error.localizedDescription)",
-                            type: MessageType.warning
-                        )
-                    }
-                } receiveValue: { _ in }
-                .store(in: &lifetime)
-
-        } else {
-            nightscout.deleteCarbs(at: date)
-                .sink { completion in
-                    self.carbsStorage.deleteCarbs(at: date)
-                    switch completion {
-                    case .finished:
-                        debug(.nightscout, "Carbs deleted")
-                    case let .failure(error):
-                        info(
-                            .nightscout,
-                            "Deletion of carbs in NightScout not done \n \(error.localizedDescription)",
-                            type: MessageType.warning
-                        )
-                    }
-                } receiveValue: {}
-                .store(in: &lifetime)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 
@@ -305,7 +226,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-<<<<<<< HEAD
     func deleteManualGlucose(withID id: String) async {
         guard let nightscout = nightscoutAPI, isUploadEnabled else { return }
 
@@ -334,8 +254,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     func uploadPreferences(_ preferences: Preferences) {
         let prefs = NightscoutPreferences(
             preferences: settingsManager.preferences
@@ -352,8 +270,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                     case .finished:
                         debug(.nightscout, "Preferences uploaded")
                         self.storage.save(preferences, as: OpenAPS.Nightscout.uploadedPreferences)
-<<<<<<< HEAD
-=======
                     case let .failure(error):
                         debug(.nightscout, error.localizedDescription)
                     }
@@ -378,7 +294,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                     case .finished:
                         debug(.nightscout, "Settings uploaded")
                         self.storage.save(settings, as: OpenAPS.Nightscout.uploadedSettings)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
                     case let .failure(error):
                         debug(.nightscout, error.localizedDescription)
                     }
@@ -387,87 +302,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-<<<<<<< HEAD
-    func uploadSettings(_ settings: FreeAPSSettings) {
-        let sets = NightscoutSettings(
-            settings: settingsManager.settings
-=======
-    func uploadStatus() {
-        let iob = storage.retrieve(OpenAPS.Monitor.iob, as: [IOBEntry].self)
-        var suggested = storage.retrieve(OpenAPS.Enact.suggested, as: Suggestion.self)
-        var enacted = storage.retrieve(OpenAPS.Enact.enacted, as: Suggestion.self)
-
-        if (suggested?.timestamp ?? .distantPast) > (enacted?.timestamp ?? .distantPast) {
-            enacted?.predictions = nil
-        } else {
-            suggested?.predictions = nil
-        }
-
-        let loopIsClosed = settingsManager.settings.closedLoop
-
-        var openapsStatus: OpenAPSStatus
-
-        // Only upload suggested in Open Loop Mode. Upload suggested and enacted in Closed Loop Mode.
-        if loopIsClosed {
-            openapsStatus = OpenAPSStatus(
-                iob: iob?.first,
-                suggested: suggested,
-                enacted: enacted,
-                version: "0.7.1"
-            )
-        } else {
-            openapsStatus = OpenAPSStatus(
-                iob: iob?.first,
-                suggested: suggested,
-                enacted: nil,
-                version: "0.7.1"
-            )
-        }
-
-        let battery = storage.retrieve(OpenAPS.Monitor.battery, as: Battery.self)
-
-        var reservoir = Decimal(from: storage.retrieveRaw(OpenAPS.Monitor.reservoir) ?? "0")
-        if reservoir == 0xDEAD_BEEF {
-            reservoir = nil
-        }
-        let pumpStatus = storage.retrieve(OpenAPS.Monitor.status, as: PumpStatus.self)
-
-        let pump = NSPumpStatus(clock: Date(), battery: battery, reservoir: reservoir, status: pumpStatus)
-
-        let device = UIDevice.current
-
-        let uploader = Uploader(batteryVoltage: nil, battery: Int(device.batteryLevel * 100))
-
-        var status: NightscoutStatus
-
-        status = NightscoutStatus(
-            device: NightscoutTreatment.local,
-            openaps: openapsStatus,
-            pump: pump,
-            uploader: uploader
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
-        )
-
-        guard let nightscout = nightscoutAPI, isUploadEnabled else {
-            return
-        }
-
-        processQueue.async {
-            nightscout.uploadSettings(sets)
-                .sink { completion in
-                    switch completion {
-                    case .finished:
-                        debug(.nightscout, "Settings uploaded")
-                        self.storage.save(settings, as: OpenAPS.Nightscout.uploadedSettings)
-                    case let .failure(error):
-                        debug(.nightscout, error.localizedDescription)
-                    }
-                } receiveValue: {}
-                .store(in: &self.lifetime)
-        }
-    }
-
-<<<<<<< HEAD
     private func fetchBattery() async -> Battery {
         await backgroundContext.perform {
             do {
@@ -625,9 +459,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
     }
 
     func uploadPodAge() async {
-=======
-    func uploadPodAge() {
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         let uploadedPodAge = storage.retrieve(OpenAPS.Nightscout.uploadedPodAge, as: [NightscoutTreatment].self) ?? []
         if let podAge = storage.retrieve(OpenAPS.Monitor.podAge, as: Date.self),
            uploadedPodAge.last?.createdAt == nil || podAge != uploadedPodAge.last!.createdAt!
@@ -802,7 +633,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
     }
 
-<<<<<<< HEAD
     func uploadGlucose() async {
         await uploadGlucose(glucoseStorage.getGlucoseNotYetUploadedToNightscout())
         await uploadTreatments(
@@ -813,15 +643,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
 
     func uploadManualGlucose() async {
         await uploadManualGlucose(glucoseStorage.getManualGlucoseNotYetUploadedToNightscout())
-=======
-    func uploadGlucose() {
-        uploadGlucose(glucoseStorage.nightscoutGlucoseNotUploaded(), fileToSave: OpenAPS.Nightscout.uploadedGlucose)
-        uploadTreatments(glucoseStorage.nightscoutCGMStateNotUploaded(), fileToSave: OpenAPS.Nightscout.uploadedCGMState)
-    }
-
-    private func uploadPumpHistory() {
-        uploadTreatments(pumpHistoryStorage.nightscoutTreatmentsNotUploaded(), fileToSave: OpenAPS.Nightscout.uploadedPumphistory)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     }
 
     private func uploadPumpHistory() async {
@@ -852,11 +673,7 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         guard !glucose.isEmpty, let nightscout = nightscoutAPI, isUploadEnabled, isUploadGlucoseEnabled else {
             return
         }
-        // check if unique code
-        // var uuid = UUID(uuidString: yourString) This will return nil if yourString is not a valid UUID
-        let glucoseWithoutCorrectID = glucose.filter { UUID(uuidString: $0._id) != nil }
 
-<<<<<<< HEAD
         do {
             // Upload in Batches of 100
             for chunk in glucose.chunks(ofCount: 100) {
@@ -897,34 +714,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
     }
 
     private func uploadTreatments(_ treatments: [NightscoutTreatment], fileToSave _: String) async {
-=======
-        processQueue.async {
-            glucoseWithoutCorrectID.chunks(ofCount: 100)
-                .map { chunk -> AnyPublisher<Void, Error> in
-                    nightscout.uploadGlucose(Array(chunk))
-                }
-                .reduce(
-                    Just(()).setFailureType(to: Error.self)
-                        .eraseToAnyPublisher()
-                ) { (result, next) -> AnyPublisher<Void, Error> in
-                    Publishers.Concatenate(prefix: result, suffix: next).eraseToAnyPublisher()
-                }
-                .dropFirst()
-                .sink { completion in
-                    switch completion {
-                    case .finished:
-                        self.storage.save(glucose, as: fileToSave)
-                        debug(.nightscout, "Glucose uploaded")
-                    case let .failure(error):
-                        debug(.nightscout, "Upload of glucose failed: " + error.localizedDescription)
-                    }
-                } receiveValue: {}
-                .store(in: &self.lifetime)
-        }
-    }
-
-    private func uploadTreatments(_ treatments: [NightscoutTreatment], fileToSave: String) {
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         guard !treatments.isEmpty, let nightscout = nightscoutAPI, isUploadEnabled else {
             return
         }
@@ -999,7 +788,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                 for result in results {
                     result.isUploadedToNS = true
                 }
-<<<<<<< HEAD
 
                 guard self.backgroundContext.hasChanges else { return }
                 try self.backgroundContext.save()
@@ -1137,19 +925,6 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                     "\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to update isUploadedToNS: \(error.userInfo)"
                 )
             }
-=======
-                .dropFirst()
-                .sink { completion in
-                    switch completion {
-                    case .finished:
-                        self.storage.save(treatments, as: fileToSave)
-                        debug(.nightscout, "Treatments uploaded")
-                    case let .failure(error):
-                        debug(.nightscout, error.localizedDescription)
-                    }
-                } receiveValue: {}
-                .store(in: &self.lifetime)
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         }
     }
 }

+ 1 - 7
FreeAPS/Sources/Shortcuts/State/ListStateIntent.swift

@@ -16,17 +16,11 @@ import Foundation
         Summary("List all states of Trio")
     }
 
-<<<<<<< HEAD
-    @MainActor func perform() async throws -> some ReturnsValue<StateiAPSResults> & ShowsSnippetView {
+    @MainActor func perform() async throws -> some ReturnsValue<StateResults> & ShowsSnippetView {
         let context = CoreDataStack.shared.persistentContainer.viewContext
 
         let glucoseValues = try? stateIntent.getLastGlucose(onContext: context)
         let iob_cob_value = try? stateIntent.getIobAndCob(onContext: context)
-=======
-    @MainActor func perform() async throws -> some ReturnsValue<StateResults> & ShowsSnippetView {
-        let glucoseValues = try? stateIntent.getLastBG()
-        let iob_cob_value = try? stateIntent.getIOB_COB()
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
 
         guard let glucoseValue = glucoseValues else { throw StateIntentError.NoBG }
         guard let iob_cob = iob_cob_value else { throw StateIntentError.NoIOBCOB }

+ 0 - 3
FreeAPSWatch WatchKit Extension/DataFlow.swift

@@ -22,10 +22,7 @@ struct WatchState: Codable {
     var displayOnWatch: AwConfig?
     var displayFatAndProteinOnWatch: Bool?
     var confirmBolusFaster: Bool?
-<<<<<<< HEAD
     var useNewCalc: Bool?
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     var isf: Decimal?
     var override: String?
 }

+ 0 - 6
FreeAPSWatch WatchKit Extension/WatchStateModel.swift

@@ -35,10 +35,7 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var displayOnWatch: AwConfig = .BGTarget
     @Published var displayFatAndProteinOnWatch = false
     @Published var confirmBolusFaster = false
-<<<<<<< HEAD
     @Published var useNewCalc = false
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
     @Published var eventualBG = ""
     @Published var isConfirmationViewActive = false {
         didSet {
@@ -180,10 +177,7 @@ class WatchStateModel: NSObject, ObservableObject {
         displayOnWatch = state.displayOnWatch ?? .BGTarget
         displayFatAndProteinOnWatch = state.displayFatAndProteinOnWatch ?? false
         confirmBolusFaster = state.confirmBolusFaster ?? false
-<<<<<<< HEAD
         useNewCalc = state.useNewCalc ?? false
-=======
->>>>>>> 9672da256c317a314acc76d6e4f6e82cc174d133
         isf = state.isf
         override = state.override
     }