Przeglądaj źródła

insert into Preferences and Meal Settings

Robert 1 rok temu
rodzic
commit
2109052bd4

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

@@ -77,6 +77,7 @@ struct DecimalPickerSettings {
         type: PickerSetting.PickerSettingType.glucose
     )
     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 remainingCarbsFraction = PickerSetting(
         value: 1.0,

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

@@ -16,6 +16,7 @@ struct Preferences: JSON, Equatable {
     var exerciseMode: Bool = false
     var halfBasalExerciseTarget: Decimal = 160
     var maxCOB: Decimal = 120
+    var maxAbsorptionTime: Int = 6
     var wideBGTargetRange: Bool = false
     var skipNeutralTemps: Bool = false
     var unsuspendIfNoTemp: Bool = false
@@ -72,6 +73,7 @@ extension Preferences {
         case exerciseMode = "exercise_mode"
         case halfBasalExerciseTarget = "half_basal_exercise_target"
         case maxCOB
+        case maxAbsorptionTime
         case wideBGTargetRange = "wide_bg_target_range"
         case skipNeutralTemps = "skip_neutral_temps"
         case unsuspendIfNoTemp = "unsuspend_if_no_temp"
@@ -184,6 +186,10 @@ extension Preferences: Decodable {
             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) {
             preferences.wideBGTargetRange = wideBGTargetRange
         }

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

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

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

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

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

@@ -183,6 +183,30 @@ extension MealSettings {
                 ).listRowBackground(Color.chart)
 
                 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,
                     booleanValue: $state.useFPUconversion,
                     shouldDisplayHint: $shouldDisplayHint,

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

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