Bläddra i källkod

Address PR feedback from Dan

polscm32 aka Marvout 1 år sedan
förälder
incheckning
fa8b61eae1

+ 2 - 2
FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift

@@ -145,8 +145,8 @@ extension Bolus {
 
                     if self.waitForSuggestionInitial {
                         group.addTask {
-                            let ok = await self.apsManager.determineBasal()
-                            if !ok {
+                            let isDetermineBasalSuccessful = await self.apsManager.determineBasal()
+                            if !isDetermineBasalSuccessful {
                                 await MainActor.run {
                                     self.waitForSuggestion = false
                                     self.insulinRequired = 0

+ 1 - 57
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -63,9 +63,7 @@ extension Home {
         @Published var selectedTab: Int = 0
         @Published var waitForSuggestion: Bool = false
         @Published var glucoseFromPersistence: [GlucoseStored] = []
-        @Published var manualGlucoseFromPersistence: [GlucoseStored] = []
         @Published var latestTwoGlucoseValues: [GlucoseStored] = []
-        @Published var latestTwoManualGlucoseValues: [GlucoseStored] = []
         @Published var carbsFromPersistence: [CarbEntryStored] = []
         @Published var fpusFromPersistence: [CarbEntryStored] = []
         @Published var determinationsFromPersistence: [OrefDetermination] = []
@@ -116,9 +114,6 @@ extension Home {
                         self.setupGlucoseArray()
                     }
                     group.addTask {
-                        self.setupManualGlucoseArray()
-                    }
-                    group.addTask {
                         self.setupCarbsArray()
                     }
                     group.addTask {
@@ -179,7 +174,6 @@ extension Home {
             coreDataObserver?.registerHandler(for: "GlucoseStored") { [weak self] in
                 guard let self = self else { return }
                 self.setupGlucoseArray()
-                self.setupManualGlucoseArray()
             }
 
             coreDataObserver?.registerHandler(for: "CarbEntryStored") { [weak self] in
@@ -286,8 +280,6 @@ extension Home {
         }
 
         @MainActor private func setupSettings() async {
-            // TODO: isUploadEnabled the right var here??
-            uploadStats = settingsManager.settings.isUploadEnabled
             units = settingsManager.settings.units
             allowManualTemp = !settingsManager.settings.closedLoop
             closedLoop = settingsManager.settings.closedLoop
@@ -635,55 +627,7 @@ extension Home.StateModel {
 
     @MainActor private func updateGlucoseArray(with objects: [GlucoseStored]) {
         glucoseFromPersistence = objects
-
-        // Check if there are enough elements to get the last two
-        if let last = objects.last, let secondLast = objects.dropLast().last {
-            latestTwoGlucoseValues = [last, secondLast]
-        } else if let last = objects.last {
-            latestTwoGlucoseValues = [last]
-        } else {
-            latestTwoGlucoseValues = []
-        }
-    }
-
-    // Setup Manual Glucose
-    private func setupManualGlucoseArray() {
-        Task {
-            let ids = await self.fetchManualGlucose()
-            let manualGlucoseObjects: [GlucoseStored] = await CoreDataStack.shared
-                .getNSManagedObject(with: ids, context: viewContext)
-            await updateManualGlucoseArray(with: manualGlucoseObjects)
-        }
-    }
-
-    private func fetchManualGlucose() async -> [NSManagedObjectID] {
-        let results = await CoreDataStack.shared.fetchEntitiesAsync(
-            ofType: GlucoseStored.self,
-            onContext: context,
-            predicate: NSPredicate.manualGlucose,
-            key: "date",
-            ascending: true,
-            fetchLimit: 288
-        )
-
-        guard let fetchedResults = results as? [GlucoseStored] else { return [] }
-
-        return await context.perform {
-            return fetchedResults.map(\.objectID)
-        }
-    }
-
-    @MainActor private func updateManualGlucoseArray(with objects: [GlucoseStored]) {
-        manualGlucoseFromPersistence = objects
-
-        // Check if there are enough elements to get the last two
-        if let last = objects.last, let secondLast = objects.dropLast().last {
-            latestTwoManualGlucoseValues = [last, secondLast]
-        } else if let last = objects.last {
-            latestTwoManualGlucoseValues = [last]
-        } else {
-            latestTwoManualGlucoseValues = []
-        }
+        latestTwoGlucoseValues = Array(objects.suffix(2))
     }
 
     // Setup Carbs

+ 26 - 5
FreeAPS/Sources/Modules/Home/View/Chart/GlucoseChartView.swift

@@ -4,7 +4,6 @@ import SwiftUI
 
 struct GlucoseChartView: ChartContent {
     let glucoseData: [GlucoseStored]
-    let manualGlucoseData: [GlucoseStored]
     let units: GlucoseUnits
     let highGlucose: Decimal
     let lowGlucose: Decimal
@@ -28,16 +27,38 @@ struct GlucoseChartView: ChartContent {
                 )
                 .foregroundStyle(pointMarkColor)
                 .symbolSize(20)
+                .symbol {
+                    if item.isManual {
+                        Image(systemName: "drop.fill")
+                            .font(.system(size: 10))
+                            .symbolRenderingMode(.monochrome)
+                            .bold()
+                            .foregroundStyle(.red)
+                    } else {
+                        Image(systemName: "circle.fill")
+                            .font(.system(size: 5))
+                            .bold()
+                            .foregroundStyle(pointMarkColor)
+                    }
+                }
             } else {
                 PointMark(
                     x: .value("Time", item.date ?? Date(), unit: .second),
                     y: .value("Value", glucoseToDisplay)
                 )
                 .symbol {
-                    Image(systemName: "record.circle.fill")
-                        .font(.system(size: 8))
-                        .bold()
-                        .foregroundStyle(pointMarkColor)
+                    if item.isManual {
+                        Image(systemName: "drop.fill")
+                            .font(.system(size: 10))
+                            .symbolRenderingMode(.monochrome)
+                            .bold()
+                            .foregroundStyle(.red)
+                    } else {
+                        Image(systemName: "record.circle.fill")
+                            .font(.system(size: 8))
+                            .bold()
+                            .foregroundStyle(pointMarkColor)
+                    }
                 }
             }
         }

+ 4 - 5
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -24,8 +24,8 @@ struct MainChartView: View {
     @State var startMarker =
         Date(timeIntervalSinceNow: TimeInterval(hours: -24))
     @State var endMarker = Date(timeIntervalSinceNow: TimeInterval(hours: 3))
-    @State var minValue: Decimal = 45
-    @State var maxValue: Decimal = 270
+    @State var minValue: Decimal = 39
+    @State var maxValue: Decimal = 300
     @State var selection: Date? = nil
     @State var minValueCobChart: Decimal = 0
     @State var maxValueCobChart: Decimal = 20
@@ -147,7 +147,6 @@ extension MainChartView {
 
                 GlucoseChartView(
                     glucoseData: state.glucoseFromPersistence,
-                    manualGlucoseData: state.manualGlucoseFromPersistence,
                     units: state.units,
                     highGlucose: state.highGlucose,
                     lowGlucose: state.lowGlucose,
@@ -230,7 +229,7 @@ extension MainChartView {
             }
             .onChange(of: tempTargets) { _ in
                 Task {
-                    await calculateTTs()
+                    await calculateTempTargets()
                 }
             }
             .frame(minHeight: geo.size.height * 0.28)
@@ -426,7 +425,7 @@ extension MainChartView {
             guard let minGlucose = minGlucose, let maxGlucose = maxGlucose,
                   let minForecast = minForecast, let maxForecast = maxForecast
             else {
-                await updateChartBounds(minValue: 45 - 20, maxValue: 270 + 50)
+                await updateChartBounds(minValue: 39, maxValue: 300)
                 return
             }
 

+ 1 - 1
FreeAPS/Sources/Modules/Home/View/Chart/TempTargets.swift

@@ -23,7 +23,7 @@ extension MainChartView {
     }
 
     // Calculations for temp target bar mark
-    func calculateTTs() async {
+    func calculateTempTargets() async {
         // Perform calculations off the main thread
         let calculatedTTs = await Task.detached { () -> [ChartTempTarget] in
             var groupedPackages: [[TempTarget]] = []

+ 11 - 16
FreeAPS/Sources/Modules/Home/View/Header/CurrentGlucoseView.swift

@@ -9,8 +9,7 @@ struct CurrentGlucoseView: View {
     @Binding var highGlucose: Decimal
     @Binding var cgmAvailable: Bool
 
-    var glucose: [GlucoseStored]
-    var manualGlucose: [GlucoseStored]
+    var glucose: [GlucoseStored] // This contains the last two glucose values, no matter if its manual or a cgm reading
 
     @State private var rotationDegrees: Double = 0.0
     @State private var angularGradient = AngularGradient(colors: [
@@ -24,12 +23,6 @@ struct CurrentGlucoseView: View {
 
     @Environment(\.colorScheme) var colorScheme
 
-    // Combine and sort the glucose values via computed property
-    /// -Returns: the latest GlucoseStored object as the last element in the Array
-    private var combinedGlucoseValues: [GlucoseStored] {
-        (glucose + manualGlucose).sorted { $0.date ?? Date() < $1.date ?? Date() }
-    }
-
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
@@ -83,7 +76,7 @@ struct CurrentGlucoseView: View {
 
                 VStack(alignment: .center) {
                     HStack {
-                        if let glucoseValue = combinedGlucoseValues.last?.glucose {
+                        if let glucoseValue = glucose.last?.glucose {
                             let displayGlucose = units == .mgdL ? Decimal(glucoseValue).description : Decimal(glucoseValue)
                                 .formattedAsMmolL
                             Text(
@@ -98,7 +91,7 @@ struct CurrentGlucoseView: View {
                         }
                     }
                     HStack {
-                        let minutesAgo = -1 * (combinedGlucoseValues.last?.date?.timeIntervalSinceNow ?? 0) / 60
+                        let minutesAgo = -1 * (glucose.last?.date?.timeIntervalSinceNow ?? 0) / 60
                         let text = timaAgoFormatter.string(for: Double(minutesAgo)) ?? ""
                         Text(
                             minutesAgo <= 1 ? "< 1 " + NSLocalizedString("min", comment: "Short form for minutes") : (
@@ -115,7 +108,7 @@ struct CurrentGlucoseView: View {
                     }.frame(alignment: .top)
                 }
             }
-            .onChange(of: combinedGlucoseValues.last?.directionEnum) { newDirection in
+            .onChange(of: glucose.last?.directionEnum) { newDirection in
                 withAnimation {
                     switch newDirection {
                     case .doubleUp,
@@ -156,20 +149,22 @@ struct CurrentGlucoseView: View {
     }
 
     private var delta: String {
-        guard combinedGlucoseValues.count >= 2 else {
+        guard glucose.count >= 2 else {
             return "--"
         }
 
-        let lastGlucose = combinedGlucoseValues.last?.glucose ?? 0
-        let secondLastGlucose = combinedGlucoseValues.dropLast().last?.glucose ?? 0
+        let lastGlucose = glucose.last?.glucose ?? 0
+        let secondLastGlucose = glucose.first?.glucose ?? 0
         let delta = lastGlucose - secondLastGlucose
         let deltaAsDecimal = units == .mmolL ? Decimal(delta).asMmolL : Decimal(delta)
         return deltaFormatter.string(from: deltaAsDecimal as NSNumber) ?? "--"
     }
 
     var glucoseDisplayColor: Color {
-        // Fetch the first glucose reading and convert it to Int for comparison
-        let whichGlucose = Int(combinedGlucoseValues.first?.glucose ?? 0)
+        guard let lastGlucose = glucose.last?.glucose else { return .primary }
+
+        // Convert the lastest glucose value to Int for comparison
+        let whichGlucose = Int(lastGlucose)
 
         // Define default color based on the color scheme
         let defaultColor: Color = colorScheme == .dark ? .white : .black

+ 1 - 2
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -136,8 +136,7 @@ extension Home {
                 lowGlucose: $state.lowGlucose,
                 highGlucose: $state.highGlucose,
                 cgmAvailable: $state.cgmAvailable,
-                glucose: state.latestTwoGlucoseValues,
-                manualGlucose: state.latestTwoManualGlucoseValues
+                glucose: state.latestTwoGlucoseValues
             ).scaleEffect(0.9)
                 .onTapGesture {
                     state.openCGM()

+ 1 - 1
Model/Helper/GlucoseStored+helper.swift

@@ -32,7 +32,7 @@ extension GlucoseStored {
 extension NSPredicate {
     static var glucose: NSPredicate {
         let date = Date.oneDayAgo
-        return NSPredicate(format: "isManual == %@ AND date >= %@", false as NSNumber, date as NSDate)
+        return NSPredicate(format: "date >= %@", date as NSDate)
     }
 
     static var manualGlucose: NSPredicate {