Explorar o código

Revert "Bolus from watch (#326)"

This reverts changes not related to coreData for LiveActivities from commit a1c1160940431962fe680c9f3f0c25a652e8814a.
Mike Plante %!s(int64=2) %!d(string=hai) anos
pai
achega
a591e65361

+ 28 - 87
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -1,3 +1,4 @@
+import CoreData
 import Foundation
 import Swinject
 import WatchConnectivity
@@ -11,13 +12,14 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
     @Injected() private var broadcaster: Broadcaster!
     @Injected() private var settingsManager: SettingsManager!
+    @Injected() private var glucoseStorage: GlucoseStorage!
     @Injected() private var apsManager: APSManager!
     @Injected() private var storage: FileStorage!
     @Injected() private var carbsStorage: CarbsStorage!
     @Injected() private var tempTargetsStorage: TempTargetsStorage!
     @Injected() private var garmin: GarminManager!
 
-    let coreDataStorage = CoreDataStorage()
+    let coredataContext = CoreDataStack.shared.persistentContainer.viewContext // newBackgroundContext()
 
     private var lifetime = Lifetime()
 
@@ -55,13 +57,12 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
     private func configureState() {
         processQueue.async {
-            let readings = self.coreDataStorage.fetchGlucose(interval: DateFilter().twoHours)
-            let glucoseValues = self.glucoseText(readings)
+            let glucoseValues = self.glucoseText()
             self.state.glucose = glucoseValues.glucose
             self.state.trend = glucoseValues.trend
             self.state.delta = glucoseValues.delta
-            self.state.trendRaw = readings.first?.direction ?? "↔︎"
-            self.state.glucoseDate = readings.first?.date ?? .distantPast
+            self.state.trendRaw = self.glucoseStorage.recent().last?.direction?.rawValue
+            self.state.glucoseDate = self.glucoseStorage.recent().last?.dateString
             self.state.glucoseDateInterval = self.state.glucoseDate.map { UInt64($0.timeIntervalSince1970) }
             self.state.lastLoopDate = self.enactedSuggestion?.recieved == true ? self.enactedSuggestion?.deliverAt : self
                 .apsManager.lastLoopDate
@@ -75,26 +76,16 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
             self.state.carbsRequired = self.suggestion?.carbsReq
 
             var insulinRequired = self.suggestion?.insulinReq ?? 0
-
             var double: Decimal = 2
-            if self.suggestion?.manualBolusErrorString == 0 {
-                insulinRequired = self.suggestion?.insulinForManualBolus ?? 0
-                double = 1
+            if (self.suggestion?.cob ?? 0) > 0 {
+                if self.suggestion?.manualBolusErrorString == 0 {
+                    insulinRequired = self.suggestion?.insulinForManualBolus ?? 0
+                    double = 1
+                }
             }
 
-            self.state.useNewCalc = self.settingsManager.settings.useCalc
-
-            if !(self.state.useNewCalc ?? false) {
-                self.state.bolusRecommended = self.apsManager
-                    .roundBolus(amount: max(
-                        insulinRequired * (self.settingsManager.settings.insulinReqPercentage / 100) * double,
-                        0
-                    ))
-            } else {
-                let recommended = self.newBolusCalc(delta: readings, suggestion: self.suggestion)
-                self.state.bolusRecommended = self.apsManager
-                    .roundBolus(amount: max(recommended, 0))
-            }
+            self.state.bolusRecommended = self.apsManager
+                .roundBolus(amount: max(insulinRequired * (self.settingsManager.settings.insulinReqPercentage / 100) * double, 0))
 
             self.state.iob = self.suggestion?.iob
             self.state.cob = self.suggestion?.cob
@@ -122,7 +113,12 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
             self.state.isf = self.suggestion?.isf
 
-            let overrideArray = self.coreDataStorage.fetchLatestOverride()
+            var overrideArray = [Override]()
+            let requestOverrides = Override.fetchRequest() as NSFetchRequest<Override>
+            let sortOverride = NSSortDescriptor(key: "date", ascending: false)
+            requestOverrides.sortDescriptors = [sortOverride]
+            requestOverrides.fetchLimit = 1
+            try? overrideArray = self.coredataContext.fetch(requestOverrides)
 
             if overrideArray.first?.enabled ?? false {
                 let percentString = "\((overrideArray.first?.percentage ?? 100).formatted(.number)) %"
@@ -151,25 +147,26 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
         }
     }
 
-    private func glucoseText(_ glucose: [Readings]) -> (glucose: String, trend: String, delta: String) {
-        let glucoseValue = glucose.first?.glucose ?? 0
+    private func glucoseText() -> (glucose: String, trend: String, delta: String) {
+        let glucose = glucoseStorage.recent()
 
-        guard !glucose.isEmpty else { return ("--", "--", "--") }
+        guard let lastGlucose = glucose.last, let glucoseValue = lastGlucose.glucose else { return ("--", "--", "--") }
 
-        let delta = glucose.count >= 2 ? glucoseValue - glucose[1].glucose : nil
+        let delta = glucose.count >= 2 ? glucoseValue - (glucose[glucose.count - 2].glucose ?? 0) : nil
 
         let units = settingsManager.settings.units
         let glucoseText = glucoseFormatter
             .string(from: Double(
-                units == .mmolL ? Decimal(glucoseValue).asMmolL : Decimal(glucoseValue)
+                units == .mmolL ? glucoseValue
+                    .asMmolL : Decimal(glucoseValue)
             ) as NSNumber)!
-
-        let directionText = glucose.first?.direction ?? "↔︎"
+        let directionText = lastGlucose.direction?.symbol ?? "↔︎"
         let deltaText = delta
             .map {
                 self.deltaFormatter
                     .string(from: Double(
-                        units == .mmolL ? Decimal($0).asMmolL : Decimal($0)
+                        units == .mmolL ? $0
+                            .asMmolL : Decimal($0)
                     ) as NSNumber)!
             } ?? "--"
 
@@ -203,62 +200,6 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
         )!
     }
 
-    private func newBolusCalc(delta: [Readings], suggestion _: Suggestion?) -> Decimal {
-        var conversion: Decimal = 1
-        // Settings
-        if settingsManager.settings.units == .mmolL {
-            conversion = 0.0555
-        }
-        let isf = state.isf ?? 0
-        let target = suggestion?.current_target ?? 0
-        let carbratio = suggestion?.carbRatio ?? 0
-        let bg = delta.first?.glucose ?? 0
-        let cob = state.cob ?? 0
-        let iob = state.iob ?? 0
-        let useFattyMealCorrectionFactor = settingsManager.settings.fattyMeals
-        let fattyMealFactor = settingsManager.settings.fattyMealFactor
-        let maxBolus = settingsManager.pumpSettings.maxBolus
-        var insulinCalculated: Decimal = 0
-        // insulin needed for the current blood glucose
-        let targetDifference = (Decimal(bg) - target) * conversion
-        let targetDifferenceInsulin = targetDifference / isf
-        // more or less insulin because of bg trend in the last 15 minutes
-        var bgDelta: Int = 0
-        if delta.count >= 3 {
-            bgDelta = Int((delta.first?.glucose ?? 0) - delta[2].glucose)
-        }
-        let fifteenMinInsulin = (Decimal(bgDelta) * conversion) / isf
-        // determine whole COB for which we want to dose insulin for and then determine insulin for wholeCOB
-        let wholeCobInsulin = cob / carbratio
-        // determine how much the calculator reduces/ increases the bolus because of IOB
-        let iobInsulinReduction = (-1) * iob
-        // adding everything together
-        // add a calc for the case that no fifteenMinInsulin is available
-        var wholeCalc: Decimal = 0
-        if bgDelta != 0 {
-            wholeCalc = (targetDifferenceInsulin + iobInsulinReduction + wholeCobInsulin + fifteenMinInsulin)
-        } else {
-            // add (rare) case that no glucose value is available -> maybe display warning?
-            // if no bg is available, ?? sets its value to 0
-            if bg == 0 {
-                wholeCalc = (iobInsulinReduction + wholeCobInsulin)
-            } else {
-                wholeCalc = (targetDifferenceInsulin + iobInsulinReduction + wholeCobInsulin)
-            }
-        }
-        // apply custom factor at the end of the calculations
-        let result = wholeCalc * settingsManager.settings.overrideFactor
-        // apply custom factor if fatty meal toggle in bolus calc config settings is on and the box for fatty meals is checked (in RootView)
-        if useFattyMealCorrectionFactor {
-            insulinCalculated = result * fattyMealFactor
-        } else {
-            insulinCalculated = result
-        }
-        // Not 0 or over maxBolus
-        insulinCalculated = max(min(insulinCalculated, maxBolus), 0)
-        return insulinCalculated
-    }
-
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal

+ 0 - 1
FreeAPSWatch WatchKit Extension/DataFlow.swift

@@ -22,7 +22,6 @@ struct WatchState: Codable {
     var eventualBGRaw: String?
     var displayOnWatch: AwConfig?
     var displayFatAndProteinOnWatch: Bool?
-    var useNewCalc: Bool?
     var isf: Decimal?
     var override: String?
 }

+ 0 - 2
FreeAPSWatch WatchKit Extension/WatchStateModel.swift

@@ -34,7 +34,6 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var isBolusViewActive = false
     @Published var displayOnWatch: AwConfig = .BGTarget
     @Published var displayFatAndProteinOnWatch = false
-    @Published var useNewCalc = false
     @Published var eventualBG = ""
     @Published var isConfirmationViewActive = false {
         didSet {
@@ -175,7 +174,6 @@ class WatchStateModel: NSObject, ObservableObject {
         eventualBG = state.eventualBG ?? ""
         displayOnWatch = state.displayOnWatch ?? .BGTarget
         displayFatAndProteinOnWatch = state.displayFatAndProteinOnWatch ?? false
-        useNewCalc = state.useNewCalc ?? false
         isf = state.isf
         override = state.override
     }