Преглед изворни кода

insert into Preferences and Meal Settings

Robert пре 1 година
родитељ
комит
2109052bd4

+ 1 - 0
FreeAPS/Sources/Models/DecimalPickerSettings.swift

@@ -77,6 +77,7 @@ struct DecimalPickerSettings {
         type: PickerSetting.PickerSettingType.glucose
         type: PickerSetting.PickerSettingType.glucose
     )
     )
     var maxCOB = PickerSetting(value: 120, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gram)
     var maxCOB = PickerSetting(value: 120, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gram)
+    var maxAbsorptionTime = PickerSetting(value: 6, step: 1, min: 4, max: 10, type: PickerSetting.PickerSettingType.hour)
     var min5mCarbimpact = PickerSetting(value: 8, step: 1, min: 1, max: 20, type: PickerSetting.PickerSettingType.glucose)
     var min5mCarbimpact = PickerSetting(value: 8, step: 1, min: 1, max: 20, type: PickerSetting.PickerSettingType.glucose)
     var remainingCarbsFraction = PickerSetting(
     var remainingCarbsFraction = PickerSetting(
         value: 1.0,
         value: 1.0,

+ 6 - 0
FreeAPS/Sources/Models/Preferences.swift

@@ -16,6 +16,7 @@ struct Preferences: JSON, Equatable {
     var exerciseMode: Bool = false
     var exerciseMode: Bool = false
     var halfBasalExerciseTarget: Decimal = 160
     var halfBasalExerciseTarget: Decimal = 160
     var maxCOB: Decimal = 120
     var maxCOB: Decimal = 120
+    var maxAbsorptionTime: Int = 6
     var wideBGTargetRange: Bool = false
     var wideBGTargetRange: Bool = false
     var skipNeutralTemps: Bool = false
     var skipNeutralTemps: Bool = false
     var unsuspendIfNoTemp: Bool = false
     var unsuspendIfNoTemp: Bool = false
@@ -72,6 +73,7 @@ extension Preferences {
         case exerciseMode = "exercise_mode"
         case exerciseMode = "exercise_mode"
         case halfBasalExerciseTarget = "half_basal_exercise_target"
         case halfBasalExerciseTarget = "half_basal_exercise_target"
         case maxCOB
         case maxCOB
+        case maxAbsorptionTime
         case wideBGTargetRange = "wide_bg_target_range"
         case wideBGTargetRange = "wide_bg_target_range"
         case skipNeutralTemps = "skip_neutral_temps"
         case skipNeutralTemps = "skip_neutral_temps"
         case unsuspendIfNoTemp = "unsuspend_if_no_temp"
         case unsuspendIfNoTemp = "unsuspend_if_no_temp"
@@ -184,6 +186,10 @@ extension Preferences: Decodable {
             preferences.maxCOB = maxCOB
             preferences.maxCOB = maxCOB
         }
         }
 
 
+        if let maxAbsorptionTime = try? container.decode(Int.self, forKey: .maxAbsorptionTime) {
+            preferences.maxAbsorptionTime = maxAbsorptionTime
+        }
+
         if let wideBGTargetRange = try? container.decode(Bool.self, forKey: .wideBGTargetRange) {
         if let wideBGTargetRange = try? container.decode(Bool.self, forKey: .wideBGTargetRange) {
             preferences.wideBGTargetRange = wideBGTargetRange
             preferences.wideBGTargetRange = wideBGTargetRange
         }
         }

+ 1 - 1
FreeAPS/Sources/Modules/Home/HomeStateModel+Setup/GlucoseTargetSetup.swift

@@ -77,7 +77,7 @@ extension Home.StateModel {
                 )
                 )
             )
             )
         }
         }
-      
+
         return targetProfiles
         return targetProfiles
     }
     }
 }
 }

+ 8 - 0
FreeAPS/Sources/Modules/MealSettings/MealSettingsStateModel.swift

@@ -11,6 +11,7 @@ extension MealSettings {
         @Published var timeCap: Decimal = 8
         @Published var timeCap: Decimal = 8
         @Published var minuteInterval: Decimal = 30
         @Published var minuteInterval: Decimal = 30
         @Published var delay: Decimal = 60
         @Published var delay: Decimal = 60
+        @Published var maxAbsorptionTime: Decimal = 6
 
 
         override func subscribe() {
         override func subscribe() {
             units = settingsManager.settings.units
             units = settingsManager.settings.units
@@ -19,12 +20,19 @@ extension MealSettings {
             subscribeSetting(\.maxCarbs, on: $maxCarbs) { maxCarbs = $0 }
             subscribeSetting(\.maxCarbs, on: $maxCarbs) { maxCarbs = $0 }
             subscribeSetting(\.maxFat, on: $maxFat) { maxFat = $0 }
             subscribeSetting(\.maxFat, on: $maxFat) { maxFat = $0 }
             subscribeSetting(\.maxProtein, on: $maxProtein) { maxProtein = $0 }
             subscribeSetting(\.maxProtein, on: $maxProtein) { maxProtein = $0 }
+
             subscribeSetting(\.timeCap, on: $timeCap.map(Int.init), initial: {
             subscribeSetting(\.timeCap, on: $timeCap.map(Int.init), initial: {
                 timeCap = Decimal($0)
                 timeCap = Decimal($0)
             }, map: {
             }, map: {
                 $0
                 $0
             })
             })
 
 
+            subscribePreferencesSetting(\.maxAbsorptionTime, on: $maxAbsorptionTime.map(Int.init), initial: {
+                maxAbsorptionTime = Decimal($0)
+            }, map: {
+                $0
+            })
+
             subscribeSetting(\.minuteInterval, on: $minuteInterval.map(Int.init), initial: {
             subscribeSetting(\.minuteInterval, on: $minuteInterval.map(Int.init), initial: {
                 minuteInterval = Decimal($0)
                 minuteInterval = Decimal($0)
             }, map: {
             }, map: {

+ 24 - 0
FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift

@@ -183,6 +183,30 @@ extension MealSettings {
                 ).listRowBackground(Color.chart)
                 ).listRowBackground(Color.chart)
 
 
                 SettingInputSection(
                 SettingInputSection(
+                    decimalValue: $state.maxAbsorptionTime,
+                    booleanValue: $booleanPlaceholder,
+                    shouldDisplayHint: $shouldDisplayHint,
+                    selectedVerboseHint: Binding(
+                        get: { selectedVerboseHint },
+                        set: {
+                            selectedVerboseHint = $0.map { AnyView($0) }
+                            hintLabel = "Maximum Meal Absorption Time"
+                        }
+                    ),
+                    units: state.units,
+                    type: .decimal("timeCap"),
+                    label: "Maximum Meal Absorption Time",
+                    miniHint: "Set the maximum hours for which COB can be accumulated to define the maximum absorption time.",
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
+                        Text("Default: 6 hours").bold()
+                        Text(
+                            "Handling of long lasting effects of heavy meals containing large cqantities of fat and protein might be improved by letting the system consider meal effects for longer than the default six hours."
+                        )
+                    }
+                )
+
+                SettingInputSection(
                     decimalValue: $decimalPlaceholder,
                     decimalValue: $decimalPlaceholder,
                     booleanValue: $state.useFPUconversion,
                     booleanValue: $state.useFPUconversion,
                     shouldDisplayHint: $shouldDisplayHint,
                     shouldDisplayHint: $shouldDisplayHint,

+ 2 - 0
FreeAPS/Sources/Views/SettingInputSection.swift

@@ -107,6 +107,8 @@ struct SettingInputSection<VerboseHint: View>: View {
             return pickerSettingsProvider.settings.hours
             return pickerSettingsProvider.settings.hours
         case "maxCarbs":
         case "maxCarbs":
             return pickerSettingsProvider.settings.maxCarbs
             return pickerSettingsProvider.settings.maxCarbs
+        case "maxAbsorptionTime":
+            return pickerSettingsProvider.settings.maxAbsorptionTime
         case "maxFat":
         case "maxFat":
             return pickerSettingsProvider.settings.maxFat
             return pickerSettingsProvider.settings.maxFat
         case "maxProtein":
         case "maxProtein":