Просмотр исходного кода

Fix smoothed glucose display
* Remove all gradient stop calculation logic
* Replace LineMark with PointMark and a custom symbol if isSmoothingEnabled is
* Change conditional glucose PointMark color to shrink down if-elseif-else checking

Deniz Cengiz 1 год назад
Родитель
Сommit
049cd2e1c9

+ 9 - 22
BolusStored+CoreDataProperties.swift

@@ -1,28 +1,15 @@
-//
-//  BolusStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension BolusStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<BolusStored> {
-        return NSFetchRequest<BolusStored>(entityName: "BolusStored")
+public extension BolusStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<BolusStored> {
+        NSFetchRequest<BolusStored>(entityName: "BolusStored")
     }
 
-    @NSManaged public var amount: NSDecimalNumber?
-    @NSManaged public var isExternal: Bool
-    @NSManaged public var isSMB: Bool
-    @NSManaged public var pumpEvent: PumpEventStored?
-
+    @NSManaged var amount: NSDecimalNumber?
+    @NSManaged var isExternal: Bool
+    @NSManaged var isSMB: Bool
+    @NSManaged var pumpEvent: PumpEventStored?
 }
 
-extension BolusStored : Identifiable {
-
-}
+extension BolusStored: Identifiable {}

+ 14 - 27
CarbEntryStored+CoreDataProperties.swift

@@ -1,33 +1,20 @@
-//
-//  CarbEntryStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension CarbEntryStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<CarbEntryStored> {
-        return NSFetchRequest<CarbEntryStored>(entityName: "CarbEntryStored")
+public extension CarbEntryStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<CarbEntryStored> {
+        NSFetchRequest<CarbEntryStored>(entityName: "CarbEntryStored")
     }
 
-    @NSManaged public var carbs: Double
-    @NSManaged public var date: Date?
-    @NSManaged public var fat: Double
-    @NSManaged public var fpuID: UUID?
-    @NSManaged public var id: UUID?
-    @NSManaged public var isFPU: Bool
-    @NSManaged public var isUploadedToNS: Bool
-    @NSManaged public var note: String?
-    @NSManaged public var protein: Double
-
+    @NSManaged var carbs: Double
+    @NSManaged var date: Date?
+    @NSManaged var fat: Double
+    @NSManaged var fpuID: UUID?
+    @NSManaged var id: UUID?
+    @NSManaged var isFPU: Bool
+    @NSManaged var isUploadedToNS: Bool
+    @NSManaged var note: String?
+    @NSManaged var protein: Double
 }
 
-extension CarbEntryStored : Identifiable {
-
-}
+extension CarbEntryStored: Identifiable {}

+ 15 - 29
Forecast+CoreDataProperties.swift

@@ -1,46 +1,32 @@
-//
-//  Forecast+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension Forecast {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<Forecast> {
-        return NSFetchRequest<Forecast>(entityName: "Forecast")
+public extension Forecast {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<Forecast> {
+        NSFetchRequest<Forecast>(entityName: "Forecast")
     }
 
-    @NSManaged public var date: Date?
-    @NSManaged public var id: UUID?
-    @NSManaged public var type: String?
-    @NSManaged public var forecastValues: Set<ForecastValue>?
-    @NSManaged public var orefDetermination: OrefDetermination?
-
+    @NSManaged var date: Date?
+    @NSManaged var id: UUID?
+    @NSManaged var type: String?
+    @NSManaged var forecastValues: Set<ForecastValue>?
+    @NSManaged var orefDetermination: OrefDetermination?
 }
 
 // MARK: Generated accessors for forecastValues
-extension Forecast {
 
+public extension Forecast {
     @objc(addForecastValuesObject:)
-    @NSManaged public func addToForecastValues(_ value: ForecastValue)
+    @NSManaged func addToForecastValues(_ value: ForecastValue)
 
     @objc(removeForecastValuesObject:)
-    @NSManaged public func removeFromForecastValues(_ value: ForecastValue)
+    @NSManaged func removeFromForecastValues(_ value: ForecastValue)
 
     @objc(addForecastValues:)
-    @NSManaged public func addToForecastValues(_ values: NSSet)
+    @NSManaged func addToForecastValues(_ values: NSSet)
 
     @objc(removeForecastValues:)
-    @NSManaged public func removeFromForecastValues(_ values: NSSet)
-
+    @NSManaged func removeFromForecastValues(_ values: NSSet)
 }
 
-extension Forecast : Identifiable {
-
-}
+extension Forecast: Identifiable {}

+ 8 - 21
ForecastValue+CoreDataProperties.swift

@@ -1,27 +1,14 @@
-//
-//  ForecastValue+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension ForecastValue {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<ForecastValue> {
-        return NSFetchRequest<ForecastValue>(entityName: "ForecastValue")
+public extension ForecastValue {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<ForecastValue> {
+        NSFetchRequest<ForecastValue>(entityName: "ForecastValue")
     }
 
-    @NSManaged public var index: Int32
-    @NSManaged public var value: Int32
-    @NSManaged public var forecast: Forecast?
-
+    @NSManaged var index: Int32
+    @NSManaged var value: Int32
+    @NSManaged var forecast: Forecast?
 }
 
-extension ForecastValue : Identifiable {
-
-}
+extension ForecastValue: Identifiable {}

+ 0 - 4
FreeAPS.xcodeproj/project.pbxproj

@@ -259,7 +259,6 @@
 		5864E8592C42CFAE00294306 /* DeterminationStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5864E8582C42CFAE00294306 /* DeterminationStorage.swift */; };
 		587DA1F62B77F3DD00B28F8A /* SettingsRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587DA1F52B77F3DD00B28F8A /* SettingsRowView.swift */; };
 		5887527C2BD986E1008B081D /* OpenAPSBattery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5887527B2BD986E1008B081D /* OpenAPSBattery.swift */; };
-		58CE8B892C8C6B62007A6A10 /* GradientStops.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58CE8B882C8C6B62007A6A10 /* GradientStops.swift */; };
 		58D08B222C8DAA8E00AA37D3 /* OverrideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B212C8DAA8E00AA37D3 /* OverrideView.swift */; };
 		58D08B302C8DEA7500AA37D3 /* ForecastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B2F2C8DEA7500AA37D3 /* ForecastView.swift */; };
 		58D08B322C8DF88900AA37D3 /* DummyCharts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B312C8DF88900AA37D3 /* DummyCharts.swift */; };
@@ -911,7 +910,6 @@
 		5864E8582C42CFAE00294306 /* DeterminationStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeterminationStorage.swift; sourceTree = "<group>"; };
 		587DA1F52B77F3DD00B28F8A /* SettingsRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsRowView.swift; sourceTree = "<group>"; };
 		5887527B2BD986E1008B081D /* OpenAPSBattery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAPSBattery.swift; sourceTree = "<group>"; };
-		58CE8B882C8C6B62007A6A10 /* GradientStops.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientStops.swift; sourceTree = "<group>"; };
 		58D08B212C8DAA8E00AA37D3 /* OverrideView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverrideView.swift; sourceTree = "<group>"; };
 		58D08B2F2C8DEA7500AA37D3 /* ForecastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastView.swift; sourceTree = "<group>"; };
 		58D08B312C8DF88900AA37D3 /* DummyCharts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DummyCharts.swift; sourceTree = "<group>"; };
@@ -1975,7 +1973,6 @@
 				581516A32BCED84A00BF67D7 /* DebuggingIdentifiers.swift */,
 				DD1DB7CB2BECCA1F0048B367 /* BuildDetails.swift */,
 				DD6B7CB12C7B6F0800B75029 /* Rounding.swift */,
-				58CE8B882C8C6B62007A6A10 /* GradientStops.swift */,
 				582DF9782C8CE1E5001F516D /* MainChartHelper.swift */,
 			);
 			path = Helpers;
@@ -3541,7 +3538,6 @@
 				38E4453B274E411700EC9A94 /* Disk+VolumeInformation.swift in Sources */,
 				118DF76A2C5ECBC60067FEB7 /* ApplyOverridePresetIntent.swift in Sources */,
 				7BCFACB97C821041BA43A114 /* ManualTempBasalRootView.swift in Sources */,
-				58CE8B892C8C6B62007A6A10 /* GradientStops.swift in Sources */,
 				38E44534274E411700EC9A94 /* Disk+InternalHelpers.swift in Sources */,
 				38A00B2325FC2B55006BC0B0 /* LRUCache.swift in Sources */,
 				DDD163122C4C689900CD525A /* OverrideStateModel.swift in Sources */,

+ 0 - 53
FreeAPS/Sources/Helpers/GradientStops.swift

@@ -1,53 +0,0 @@
-import Foundation
-import SwiftUI
-
-struct GradientStops {
-    static func calculateGradientStops(
-        lowGlucose: Decimal,
-        highGlucose: Decimal,
-        glucoseValues: [Decimal]
-    ) async -> [Gradient.Stop] {
-        let low = Double(lowGlucose)
-        let high = Double(highGlucose)
-
-        let minimum = glucoseValues.min() ?? 0.0
-        let maximum = glucoseValues.max() ?? 0.0
-
-        // Handle edge case where minimum and maximum are equal
-        guard minimum != maximum else {
-            return [
-                Gradient.Stop(color: .green, location: 0.0),
-                Gradient.Stop(color: .green, location: 1.0)
-            ]
-        }
-
-        // Calculate positions for gradient
-        let lowPosition = (low - Double(truncating: minimum as NSNumber)) /
-            (Double(truncating: maximum as NSNumber) - Double(truncating: minimum as NSNumber))
-        let highPosition = (high - Double(truncating: minimum as NSNumber)) /
-            (Double(truncating: maximum as NSNumber) - Double(truncating: minimum as NSNumber))
-
-        // Ensure positions are in bounds [0, 1]
-        let clampedLowPosition = max(0.0, min(lowPosition, 1.0))
-        let clampedHighPosition = max(0.0, min(highPosition, 1.0))
-
-        // Ensure lowPosition is less than highPosition
-        let epsilon: CGFloat = 0.0001
-        let sortedPositions = [clampedLowPosition, clampedHighPosition].sorted()
-        var adjustedHighPosition = sortedPositions[1]
-
-        if adjustedHighPosition - sortedPositions[0] < epsilon {
-            adjustedHighPosition = min(1.0, sortedPositions[0] + epsilon)
-        }
-
-        return [
-            Gradient.Stop(color: .red, location: 0.0),
-            Gradient.Stop(color: .red, location: sortedPositions[0]), // draw red gradient till lowGlucose
-            Gradient.Stop(color: .green, location: sortedPositions[0] + epsilon),
-            // draw green above lowGlucose till highGlucose
-            Gradient.Stop(color: .green, location: adjustedHighPosition),
-            Gradient.Stop(color: .orange, location: adjustedHighPosition + epsilon), // draw orange above highGlucose
-            Gradient.Stop(color: .orange, location: 1.0)
-        ]
-    }
-}

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

@@ -109,7 +109,7 @@ extension Bolus {
         @Published var maxForecast: [Int] = []
         @Published var minCount: Int = 12 // count of Forecasts drawn in 5 min distances, i.e. 12 means a min of 1 hour
         @Published var forecastDisplayType: ForecastDisplayType = .cone
-        @Published var smooth: Bool = false
+        @Published var isSmoothingEnabled: Bool = false
         @Published var stops: [Gradient.Stop] = []
 
         let now = Date.now
@@ -225,7 +225,7 @@ extension Bolus {
             maxFat = settings.settings.maxFat
             maxProtein = settings.settings.maxProtein
             useFPUconversion = settingsManager.settings.useFPUconversion
-            smooth = settingsManager.settings.smoothGlucose
+            isSmoothingEnabled = settingsManager.settings.smoothGlucose
         }
 
         private func getCurrentSettingValue(for type: SettingType) async {
@@ -463,21 +463,6 @@ extension Bolus {
             }
         }
 
-        private func calculateGradientStops() async {
-            let glucoseValues = glucoseFromPersistence
-                .map { units == .mgdL ? Decimal($0.glucose) : Decimal($0.glucose).asMmolL }
-
-            let calculatedStops = await GradientStops.calculateGradientStops(
-                lowGlucose: lowGlucose,
-                highGlucose: highGlucose,
-                glucoseValues: glucoseValues
-            )
-
-            await MainActor.run {
-                stops = calculatedStops
-            }
-        }
-
         // MARK: - Carbs
 
         func saveMeal() async {
@@ -615,10 +600,6 @@ extension Bolus.StateModel {
             let ids = await self.fetchGlucose()
             let glucoseObjects: [GlucoseStored] = await CoreDataStack.shared.getNSManagedObject(with: ids, context: viewContext)
             await updateGlucoseArray(with: glucoseObjects)
-
-            if smooth {
-                await self.calculateGradientStops()
-            }
         }
     }
 

+ 19 - 30
FreeAPS/Sources/Modules/Bolus/View/ForeCastChart.swift

@@ -121,39 +121,28 @@ struct ForeCastChart: View {
 
     private func drawGlucose() -> some ChartContent {
         ForEach(state.glucoseFromPersistence) { item in
-            let glucoseToDisplay = units == .mgdL ? Decimal(item.glucose) : Decimal(item.glucose).asMmolL
-
-            if state.smooth {
-                LineMark(
-                    x: .value("Time", item.date ?? Date()),
+            let glucoseToDisplay = state.units == .mgdL ? Decimal(item.glucose) : Decimal(item.glucose).asMmolL
+            let pointMarkColor: Color = glucoseToDisplay > state.highGlucose ? Color.orange :
+                glucoseToDisplay < state.lowGlucose ? Color.red :
+                Color.green
+
+            if !state.isSmoothingEnabled {
+                PointMark(
+                    x: .value("Time", item.date ?? Date(), unit: .second),
                     y: .value("Value", glucoseToDisplay)
                 )
-                .foregroundStyle(
-                    .linearGradient(stops: state.stops, startPoint: .bottom, endPoint: .top)
-                )
-                .symbol(.circle).symbolSize(34)
+                .foregroundStyle(pointMarkColor)
+                .symbolSize(20)
             } else {
-                if item.glucose > Int(state.highGlucose) {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    )
-                    .foregroundStyle(Color.orange.gradient)
-                    .symbolSize(20)
-                } else if item.glucose < Int(state.lowGlucose) {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    )
-                    .foregroundStyle(Color.red.gradient)
-                    .symbolSize(20)
-                } else {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    )
-                    .foregroundStyle(Color.green.gradient)
-                    .symbolSize(20)
+                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)
                 }
             }
         }

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

@@ -44,7 +44,7 @@ extension Home {
         @Published var pumpDisplayState: PumpDisplayState?
         @Published var alarm: GlucoseAlarm?
         @Published var manualTempBasal = false
-        @Published var smooth = false
+        @Published var isSmoothingEnabled = false
         @Published var maxValue: Decimal = 1.2
         @Published var lowGlucose: Decimal = 70
         @Published var highGlucose: Decimal = 180
@@ -88,7 +88,6 @@ extension Home {
         @Published var maxForecast: [Int] = []
         @Published var minCount: Int = 12 // count of Forecasts drawn in 5 min distances, i.e. 12 means a min of 1 hour
         @Published var forecastDisplayType: ForecastDisplayType = .cone
-        @Published var gradientStops: [Gradient.Stop] = []
 
         let context = CoreDataStack.shared.newTaskContext()
         let viewContext = CoreDataStack.shared.persistentContainer.viewContext
@@ -296,7 +295,7 @@ extension Home {
             alarm = provider.glucoseStorage.alarm
             manualTempBasal = apsManager.isManualTempBasal
             setupCurrentTempTarget()
-            smooth = settingsManager.settings.smoothGlucose
+            isSmoothingEnabled = settingsManager.settings.smoothGlucose
             maxValue = settingsManager.preferences.autosensMax
             lowGlucose = units == .mgdL ? settingsManager.settings.low : settingsManager.settings.low.asMmolL
             highGlucose = units == .mgdL ? settingsManager.settings.high : settingsManager.settings.high.asMmolL
@@ -331,21 +330,6 @@ extension Home {
             }
         }
 
-        private func calculateGradientStops() async {
-            let glucoseValues = glucoseFromPersistence
-                .map { units == .mgdL ? Decimal($0.glucose) : Decimal($0.glucose).asMmolL }
-
-            let calculatedStops = await GradientStops.calculateGradientStops(
-                lowGlucose: lowGlucose,
-                highGlucose: highGlucose,
-                glucoseValues: glucoseValues
-            )
-
-            await MainActor.run {
-                self.gradientStops = calculatedStops
-            }
-        }
-
         func runLoop() {
             provider.heartbeatNow()
         }
@@ -517,7 +501,7 @@ extension Home.StateModel:
         closedLoop = settingsManager.settings.closedLoop
         units = settingsManager.settings.units
         manualTempBasal = apsManager.isManualTempBasal
-        smooth = settingsManager.settings.smoothGlucose
+        isSmoothingEnabled = settingsManager.settings.smoothGlucose
         lowGlucose = units == .mgdL ? settingsManager.settings.low : settingsManager.settings.low.asMmolL
         highGlucose = units == .mgdL ? settingsManager.settings.high : settingsManager.settings.high.asMmolL
         overrideUnit = settingsManager.settings.overrideHbA1cUnit
@@ -629,10 +613,6 @@ extension Home.StateModel {
             let ids = await self.fetchGlucose()
             let glucoseObjects: [GlucoseStored] = await CoreDataStack.shared.getNSManagedObject(with: ids, context: viewContext)
             await updateGlucoseArray(with: glucoseObjects)
-
-            if smooth {
-                await calculateGradientStops()
-            }
         }
     }
 
@@ -673,10 +653,6 @@ extension Home.StateModel {
             let manualGlucoseObjects: [GlucoseStored] = await CoreDataStack.shared
                 .getNSManagedObject(with: ids, context: viewContext)
             await updateManualGlucoseArray(with: manualGlucoseObjects)
-
-            if smooth {
-                await calculateGradientStops()
-            }
         }
     }
 

+ 20 - 28
FreeAPS/Sources/Modules/Home/View/Chart/GlucoseChartView.swift

@@ -8,8 +8,7 @@ struct GlucoseChartView: ChartContent {
     let units: GlucoseUnits
     let highGlucose: Decimal
     let lowGlucose: Decimal
-    let smooth: Bool
-    let gradientStops: [Gradient.Stop]
+    let isSmoothingEnabled: Bool
 
     var body: some ChartContent {
         drawGlucoseChart()
@@ -18,34 +17,27 @@ struct GlucoseChartView: ChartContent {
     private func drawGlucoseChart() -> some ChartContent {
         ForEach(glucoseData) { item in
             let glucoseToDisplay = units == .mgdL ? Decimal(item.glucose) : Decimal(item.glucose).asMmolL
+            let pointMarkColor: Color = glucoseToDisplay > highGlucose ? Color.orange :
+                glucoseToDisplay < lowGlucose ? Color.red :
+                Color.green
 
-            if smooth {
-                LineMark(x: .value("Time", item.date ?? Date()), y: .value("Value", glucoseToDisplay))
-                    .foregroundStyle(
-                        LinearGradient(
-                            gradient: Gradient(stops: gradientStops),
-                            startPoint: .bottom,
-                            endPoint: .top
-                        )
-                    )
-                    .symbol(.circle)
-                    .symbolSize(34)
+            if !isSmoothingEnabled {
+                PointMark(
+                    x: .value("Time", item.date ?? Date(), unit: .second),
+                    y: .value("Value", glucoseToDisplay)
+                )
+                .foregroundStyle(pointMarkColor)
+                .symbolSize(20)
             } else {
-                if glucoseToDisplay > highGlucose {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    ).foregroundStyle(Color.orange.gradient).symbolSize(20)
-                } else if glucoseToDisplay < lowGlucose {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    ).foregroundStyle(Color.red.gradient).symbolSize(20)
-                } else {
-                    PointMark(
-                        x: .value("Time", item.date ?? Date(), unit: .second),
-                        y: .value("Value", glucoseToDisplay)
-                    ).foregroundStyle(Color.green.gradient).symbolSize(20)
+                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)
                 }
             }
         }

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

@@ -151,8 +151,7 @@ extension MainChartView {
                     units: state.units,
                     highGlucose: state.highGlucose,
                     lowGlucose: state.lowGlucose,
-                    smooth: state.smooth,
-                    gradientStops: state.gradientStops
+                    isSmoothingEnabled: state.isSmoothingEnabled
                 )
 
                 InsulinView(

+ 11 - 24
GlucoseStored+CoreDataProperties.swift

@@ -1,30 +1,17 @@
-//
-//  GlucoseStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension GlucoseStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<GlucoseStored> {
-        return NSFetchRequest<GlucoseStored>(entityName: "GlucoseStored")
+public extension GlucoseStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<GlucoseStored> {
+        NSFetchRequest<GlucoseStored>(entityName: "GlucoseStored")
     }
 
-    @NSManaged public var date: Date?
-    @NSManaged public var direction: String?
-    @NSManaged public var glucose: Int16
-    @NSManaged public var id: UUID?
-    @NSManaged public var isManual: Bool
-    @NSManaged public var isUploadedToNS: Bool
-
+    @NSManaged var date: Date?
+    @NSManaged var direction: String?
+    @NSManaged var glucose: Int16
+    @NSManaged var id: UUID?
+    @NSManaged var isManual: Bool
+    @NSManaged var isUploadedToNS: Bool
 }
 
-extension GlucoseStored : Identifiable {
-
-}
+extension GlucoseStored: Identifiable {}

+ 10 - 23
LoopStatRecord+CoreDataProperties.swift

@@ -1,29 +1,16 @@
-//
-//  LoopStatRecord+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension LoopStatRecord {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<LoopStatRecord> {
-        return NSFetchRequest<LoopStatRecord>(entityName: "LoopStatRecord")
+public extension LoopStatRecord {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<LoopStatRecord> {
+        NSFetchRequest<LoopStatRecord>(entityName: "LoopStatRecord")
     }
 
-    @NSManaged public var duration: Double
-    @NSManaged public var end: Date?
-    @NSManaged public var interval: Double
-    @NSManaged public var loopStatus: String?
-    @NSManaged public var start: Date?
-
+    @NSManaged var duration: Double
+    @NSManaged var end: Date?
+    @NSManaged var interval: Double
+    @NSManaged var loopStatus: String?
+    @NSManaged var start: Date?
 }
 
-extension LoopStatRecord : Identifiable {
-
-}
+extension LoopStatRecord: Identifiable {}

+ 9 - 22
MealPresetStored+CoreDataProperties.swift

@@ -1,28 +1,15 @@
-//
-//  MealPresetStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension MealPresetStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<MealPresetStored> {
-        return NSFetchRequest<MealPresetStored>(entityName: "MealPresetStored")
+public extension MealPresetStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<MealPresetStored> {
+        NSFetchRequest<MealPresetStored>(entityName: "MealPresetStored")
     }
 
-    @NSManaged public var carbs: NSDecimalNumber?
-    @NSManaged public var dish: String?
-    @NSManaged public var fat: NSDecimalNumber?
-    @NSManaged public var protein: NSDecimalNumber?
-
+    @NSManaged var carbs: NSDecimalNumber?
+    @NSManaged var dish: String?
+    @NSManaged var fat: NSDecimalNumber?
+    @NSManaged var protein: NSDecimalNumber?
 }
 
-extension MealPresetStored : Identifiable {
-
-}
+extension MealPresetStored: Identifiable {}

+ 11 - 24
OpenAPS_Battery+CoreDataProperties.swift

@@ -1,30 +1,17 @@
-//
-//  OpenAPS_Battery+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension OpenAPS_Battery {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<OpenAPS_Battery> {
-        return NSFetchRequest<OpenAPS_Battery>(entityName: "OpenAPS_Battery")
+public extension OpenAPS_Battery {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<OpenAPS_Battery> {
+        NSFetchRequest<OpenAPS_Battery>(entityName: "OpenAPS_Battery")
     }
 
-    @NSManaged public var date: Date?
-    @NSManaged public var display: Bool
-    @NSManaged public var id: UUID?
-    @NSManaged public var percent: Int16
-    @NSManaged public var status: String?
-    @NSManaged public var voltage: NSDecimalNumber?
-
+    @NSManaged var date: Date?
+    @NSManaged var display: Bool
+    @NSManaged var id: UUID?
+    @NSManaged var percent: Int16
+    @NSManaged var status: String?
+    @NSManaged var voltage: NSDecimalNumber?
 }
 
-extension OpenAPS_Battery : Identifiable {
-
-}
+extension OpenAPS_Battery: Identifiable {}

+ 43 - 57
OrefDetermination+CoreDataProperties.swift

@@ -1,74 +1,60 @@
-//
-//  OrefDetermination+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension OrefDetermination {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<OrefDetermination> {
-        return NSFetchRequest<OrefDetermination>(entityName: "OrefDetermination")
+public extension OrefDetermination {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<OrefDetermination> {
+        NSFetchRequest<OrefDetermination>(entityName: "OrefDetermination")
     }
 
-    @NSManaged public var bolus: NSDecimalNumber?
-    @NSManaged public var carbRatio: NSDecimalNumber?
-    @NSManaged public var carbsRequired: Int16
-    @NSManaged public var cob: Int16
-    @NSManaged public var currentTarget: NSDecimalNumber?
-    @NSManaged public var deliverAt: Date?
-    @NSManaged public var duration: NSDecimalNumber?
-    @NSManaged public var enacted: Bool
-    @NSManaged public var eventualBG: NSDecimalNumber?
-    @NSManaged public var expectedDelta: NSDecimalNumber?
-    @NSManaged public var glucose: NSDecimalNumber?
-    @NSManaged public var id: UUID?
-    @NSManaged public var insulinForManualBolus: NSDecimalNumber?
-    @NSManaged public var insulinReq: NSDecimalNumber?
-    @NSManaged public var insulinSensitivity: NSDecimalNumber?
-    @NSManaged public var iob: NSDecimalNumber?
-    @NSManaged public var isUploadedToNS: Bool
-    @NSManaged public var manualBolusErrorString: NSDecimalNumber?
-    @NSManaged public var minDelta: NSDecimalNumber?
-    @NSManaged public var rate: NSDecimalNumber?
-    @NSManaged public var reason: String?
-    @NSManaged public var received: Bool
-    @NSManaged public var reservoir: NSDecimalNumber?
-    @NSManaged public var scheduledBasal: NSDecimalNumber?
-    @NSManaged public var sensitivityRatio: NSDecimalNumber?
-    @NSManaged public var smbToDeliver: NSDecimalNumber?
-    @NSManaged public var temp: String?
-    @NSManaged public var tempBasal: NSDecimalNumber?
-    @NSManaged public var threshold: NSDecimalNumber?
-    @NSManaged public var timestamp: Date?
-    @NSManaged public var timestampEnacted: Date?
-    @NSManaged public var totalDailyDose: NSDecimalNumber?
-    @NSManaged public var forecasts: NSSet?
-
+    @NSManaged var bolus: NSDecimalNumber?
+    @NSManaged var carbRatio: NSDecimalNumber?
+    @NSManaged var carbsRequired: Int16
+    @NSManaged var cob: Int16
+    @NSManaged var currentTarget: NSDecimalNumber?
+    @NSManaged var deliverAt: Date?
+    @NSManaged var duration: NSDecimalNumber?
+    @NSManaged var enacted: Bool
+    @NSManaged var eventualBG: NSDecimalNumber?
+    @NSManaged var expectedDelta: NSDecimalNumber?
+    @NSManaged var glucose: NSDecimalNumber?
+    @NSManaged var id: UUID?
+    @NSManaged var insulinForManualBolus: NSDecimalNumber?
+    @NSManaged var insulinReq: NSDecimalNumber?
+    @NSManaged var insulinSensitivity: NSDecimalNumber?
+    @NSManaged var iob: NSDecimalNumber?
+    @NSManaged var isUploadedToNS: Bool
+    @NSManaged var manualBolusErrorString: NSDecimalNumber?
+    @NSManaged var minDelta: NSDecimalNumber?
+    @NSManaged var rate: NSDecimalNumber?
+    @NSManaged var reason: String?
+    @NSManaged var received: Bool
+    @NSManaged var reservoir: NSDecimalNumber?
+    @NSManaged var scheduledBasal: NSDecimalNumber?
+    @NSManaged var sensitivityRatio: NSDecimalNumber?
+    @NSManaged var smbToDeliver: NSDecimalNumber?
+    @NSManaged var temp: String?
+    @NSManaged var tempBasal: NSDecimalNumber?
+    @NSManaged var threshold: NSDecimalNumber?
+    @NSManaged var timestamp: Date?
+    @NSManaged var timestampEnacted: Date?
+    @NSManaged var totalDailyDose: NSDecimalNumber?
+    @NSManaged var forecasts: NSSet?
 }
 
 // MARK: Generated accessors for forecasts
-extension OrefDetermination {
 
+public extension OrefDetermination {
     @objc(addForecastsObject:)
-    @NSManaged public func addToForecasts(_ value: Forecast)
+    @NSManaged func addToForecasts(_ value: Forecast)
 
     @objc(removeForecastsObject:)
-    @NSManaged public func removeFromForecasts(_ value: Forecast)
+    @NSManaged func removeFromForecasts(_ value: Forecast)
 
     @objc(addForecasts:)
-    @NSManaged public func addToForecasts(_ values: NSSet)
+    @NSManaged func addToForecasts(_ values: NSSet)
 
     @objc(removeForecasts:)
-    @NSManaged public func removeFromForecasts(_ values: NSSet)
-
+    @NSManaged func removeFromForecasts(_ values: NSSet)
 }
 
-extension OrefDetermination : Identifiable {
-
-}
+extension OrefDetermination: Identifiable {}

+ 12 - 25
OverrideRunStored+CoreDataProperties.swift

@@ -1,31 +1,18 @@
-//
-//  OverrideRunStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension OverrideRunStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<OverrideRunStored> {
-        return NSFetchRequest<OverrideRunStored>(entityName: "OverrideRunStored")
+public extension OverrideRunStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<OverrideRunStored> {
+        NSFetchRequest<OverrideRunStored>(entityName: "OverrideRunStored")
     }
 
-    @NSManaged public var endDate: Date?
-    @NSManaged public var id: UUID?
-    @NSManaged public var isUploadedToNS: Bool
-    @NSManaged public var name: String?
-    @NSManaged public var startDate: Date?
-    @NSManaged public var target: NSDecimalNumber?
-    @NSManaged public var override: OverrideStored?
-
+    @NSManaged var endDate: Date?
+    @NSManaged var id: UUID?
+    @NSManaged var isUploadedToNS: Bool
+    @NSManaged var name: String?
+    @NSManaged var startDate: Date?
+    @NSManaged var target: NSDecimalNumber?
+    @NSManaged var override: OverrideStored?
 }
 
-extension OverrideRunStored : Identifiable {
-
-}
+extension OverrideRunStored: Identifiable {}

+ 27 - 40
OverrideStored+CoreDataProperties.swift

@@ -1,46 +1,33 @@
-//
-//  OverrideStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension OverrideStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<OverrideStored> {
-        return NSFetchRequest<OverrideStored>(entityName: "OverrideStored")
+public extension OverrideStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<OverrideStored> {
+        NSFetchRequest<OverrideStored>(entityName: "OverrideStored")
     }
 
-    @NSManaged public var advancedSettings: Bool
-    @NSManaged public var cr: Bool
-    @NSManaged public var date: Date?
-    @NSManaged public var duration: NSDecimalNumber?
-    @NSManaged public var enabled: Bool
-    @NSManaged public var end: NSDecimalNumber?
-    @NSManaged public var id: String?
-    @NSManaged public var indefinite: Bool
-    @NSManaged public var isf: Bool
-    @NSManaged public var isfAndCr: Bool
-    @NSManaged public var isPreset: Bool
-    @NSManaged public var isUploadedToNS: Bool
-    @NSManaged public var name: String?
-    @NSManaged public var orderPosition: Int16
-    @NSManaged public var percentage: Double
-    @NSManaged public var smbIsAlwaysOff: Bool
-    @NSManaged public var smbIsOff: Bool
-    @NSManaged public var smbMinutes: NSDecimalNumber?
-    @NSManaged public var start: NSDecimalNumber?
-    @NSManaged public var target: NSDecimalNumber?
-    @NSManaged public var uamMinutes: NSDecimalNumber?
-    @NSManaged public var overrideRun: OverrideRunStored?
-
+    @NSManaged var advancedSettings: Bool
+    @NSManaged var cr: Bool
+    @NSManaged var date: Date?
+    @NSManaged var duration: NSDecimalNumber?
+    @NSManaged var enabled: Bool
+    @NSManaged var end: NSDecimalNumber?
+    @NSManaged var id: String?
+    @NSManaged var indefinite: Bool
+    @NSManaged var isf: Bool
+    @NSManaged var isfAndCr: Bool
+    @NSManaged var isPreset: Bool
+    @NSManaged var isUploadedToNS: Bool
+    @NSManaged var name: String?
+    @NSManaged var orderPosition: Int16
+    @NSManaged var percentage: Double
+    @NSManaged var smbIsAlwaysOff: Bool
+    @NSManaged var smbIsOff: Bool
+    @NSManaged var smbMinutes: NSDecimalNumber?
+    @NSManaged var start: NSDecimalNumber?
+    @NSManaged var target: NSDecimalNumber?
+    @NSManaged var uamMinutes: NSDecimalNumber?
+    @NSManaged var overrideRun: OverrideRunStored?
 }
 
-extension OverrideStored : Identifiable {
-
-}
+extension OverrideStored: Identifiable {}

+ 12 - 25
PumpEventStored+CoreDataProperties.swift

@@ -1,31 +1,18 @@
-//
-//  PumpEventStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension PumpEventStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<PumpEventStored> {
-        return NSFetchRequest<PumpEventStored>(entityName: "PumpEventStored")
+public extension PumpEventStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<PumpEventStored> {
+        NSFetchRequest<PumpEventStored>(entityName: "PumpEventStored")
     }
 
-    @NSManaged public var id: String?
-    @NSManaged public var isUploadedToNS: Bool
-    @NSManaged public var note: String?
-    @NSManaged public var timestamp: Date?
-    @NSManaged public var type: String?
-    @NSManaged public var bolus: BolusStored?
-    @NSManaged public var tempBasal: TempBasalStored?
-
+    @NSManaged var id: String?
+    @NSManaged var isUploadedToNS: Bool
+    @NSManaged var note: String?
+    @NSManaged var timestamp: Date?
+    @NSManaged var type: String?
+    @NSManaged var bolus: BolusStored?
+    @NSManaged var tempBasal: TempBasalStored?
 }
 
-extension PumpEventStored : Identifiable {
-
-}
+extension PumpEventStored: Identifiable {}

+ 6 - 19
StatsData+CoreDataProperties.swift

@@ -1,25 +1,12 @@
-//
-//  StatsData+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension StatsData {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<StatsData> {
-        return NSFetchRequest<StatsData>(entityName: "StatsData")
+public extension StatsData {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<StatsData> {
+        NSFetchRequest<StatsData>(entityName: "StatsData")
     }
 
-    @NSManaged public var lastrun: Date?
-
+    @NSManaged var lastrun: Date?
 }
 
-extension StatsData : Identifiable {
-
-}
+extension StatsData: Identifiable {}

+ 9 - 22
TempBasalStored+CoreDataProperties.swift

@@ -1,28 +1,15 @@
-//
-//  TempBasalStored+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension TempBasalStored {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<TempBasalStored> {
-        return NSFetchRequest<TempBasalStored>(entityName: "TempBasalStored")
+public extension TempBasalStored {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<TempBasalStored> {
+        NSFetchRequest<TempBasalStored>(entityName: "TempBasalStored")
     }
 
-    @NSManaged public var duration: Int16
-    @NSManaged public var rate: NSDecimalNumber?
-    @NSManaged public var tempType: String?
-    @NSManaged public var pumpEvent: PumpEventStored?
-
+    @NSManaged var duration: Int16
+    @NSManaged var rate: NSDecimalNumber?
+    @NSManaged var tempType: String?
+    @NSManaged var pumpEvent: PumpEventStored?
 }
 
-extension TempBasalStored : Identifiable {
-
-}
+extension TempBasalStored: Identifiable {}

+ 11 - 24
TempTargets+CoreDataProperties.swift

@@ -1,30 +1,17 @@
-//
-//  TempTargets+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension TempTargets {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<TempTargets> {
-        return NSFetchRequest<TempTargets>(entityName: "TempTargets")
+public extension TempTargets {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<TempTargets> {
+        NSFetchRequest<TempTargets>(entityName: "TempTargets")
     }
 
-    @NSManaged public var active: Bool
-    @NSManaged public var date: Date?
-    @NSManaged public var duration: NSDecimalNumber?
-    @NSManaged public var hbt: Double
-    @NSManaged public var id: String?
-    @NSManaged public var startDate: Date?
-
+    @NSManaged var active: Bool
+    @NSManaged var date: Date?
+    @NSManaged var duration: NSDecimalNumber?
+    @NSManaged var hbt: Double
+    @NSManaged var id: String?
+    @NSManaged var startDate: Date?
 }
 
-extension TempTargets : Identifiable {
-
-}
+extension TempTargets: Identifiable {}

+ 12 - 25
TempTargetsSlider+CoreDataProperties.swift

@@ -1,31 +1,18 @@
-//
-//  TempTargetsSlider+CoreDataProperties.swift
-//  FreeAPS
-//
-//  Created by Cengiz Deniz on 08.09.24.
-//
-//
-
-import Foundation
 import CoreData
+import Foundation
 
-
-extension TempTargetsSlider {
-
-    @nonobjc public class func fetchRequest() -> NSFetchRequest<TempTargetsSlider> {
-        return NSFetchRequest<TempTargetsSlider>(entityName: "TempTargetsSlider")
+public extension TempTargetsSlider {
+    @nonobjc class func fetchRequest() -> NSFetchRequest<TempTargetsSlider> {
+        NSFetchRequest<TempTargetsSlider>(entityName: "TempTargetsSlider")
     }
 
-    @NSManaged public var date: Date?
-    @NSManaged public var defaultHBT: Double
-    @NSManaged public var duration: NSDecimalNumber?
-    @NSManaged public var enabled: Bool
-    @NSManaged public var hbt: Double
-    @NSManaged public var id: String?
-    @NSManaged public var isPreset: Bool
-
+    @NSManaged var date: Date?
+    @NSManaged var defaultHBT: Double
+    @NSManaged var duration: NSDecimalNumber?
+    @NSManaged var enabled: Bool
+    @NSManaged var hbt: Double
+    @NSManaged var id: String?
+    @NSManaged var isPreset: Bool
 }
 
-extension TempTargetsSlider : Identifiable {
-
-}
+extension TempTargetsSlider: Identifiable {}