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

Revert "first attempt to outsource"

This reverts commit a72330e55091a2d17c1b6f17f2e69ee85775bd9c.
Robert пре 1 година
родитељ
комит
216f0586ed

+ 0 - 4
FreeAPS.xcodeproj/project.pbxproj

@@ -241,7 +241,6 @@
 		38FEF413273B317A00574A46 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF412273B317A00574A46 /* HKUnit.swift */; };
 		45252C95D220E796FDB3B022 /* ConfigEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A87AA037BD079BA3528BA /* ConfigEditorDataFlow.swift */; };
 		45717281F743594AA9D87191 /* ConfigEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 920DDB21E5D0EB813197500D /* ConfigEditorRootView.swift */; };
-		4977A5282CCCC6C500FA2849 /* TargetPicker+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4977A5272CCCC6BB00FA2849 /* TargetPicker+Helper.swift */; };
 		5075C1608E6249A51495C422 /* TargetsEditorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDEA2DC60EDE0A3CA54DC73 /* TargetsEditorProvider.swift */; };
 		53F2382465BF74DB1A967C8B /* PumpConfigProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8630D58BDAD6D9C650B9B39 /* PumpConfigProvider.swift */; };
 		581516A42BCED84A00BF67D7 /* DebuggingIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581516A32BCED84A00BF67D7 /* DebuggingIdentifiers.swift */; };
@@ -922,7 +921,6 @@
 		3F8A87AA037BD079BA3528BA /* ConfigEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfigEditorDataFlow.swift; sourceTree = "<group>"; };
 		42369F66CF91F30624C0B3A6 /* BasalProfileEditorProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BasalProfileEditorProvider.swift; sourceTree = "<group>"; };
 		44080E4709E3AE4B73054563 /* ConfigEditorProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfigEditorProvider.swift; sourceTree = "<group>"; };
-		4977A5272CCCC6BB00FA2849 /* TargetPicker+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TargetPicker+Helper.swift"; sourceTree = "<group>"; };
 		4DD795BA46B193644D48138C /* TargetsEditorRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TargetsEditorRootView.swift; sourceTree = "<group>"; };
 		505E09DC17A0C3D0AF4B66FE /* ISFEditorStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ISFEditorStateModel.swift; sourceTree = "<group>"; };
 		581516A32BCED84A00BF67D7 /* DebuggingIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebuggingIdentifiers.swift; sourceTree = "<group>"; };
@@ -2038,7 +2036,6 @@
 				FE66D16A291F74F8005D6F77 /* Bundle+Extensions.swift */,
 				FEFFA7A12929FE49007B8193 /* UIDevice+Extensions.swift */,
 				CEA4F62229BE10F70011ADF7 /* SavitzkyGolayFilter.swift */,
-				4977A5272CCCC6BB00FA2849 /* TargetPicker+Helper.swift */,
 				587DA1F52B77F3DD00B28F8A /* SettingsRowView.swift */,
 				BD2FF19F2AE29D43005D1C5D /* CheckboxToggleStyle.swift */,
 				BD1661302B82ADAB00256551 /* CustomProgressView.swift */,
@@ -3675,7 +3672,6 @@
 				891DECF7BC20968D7F566161 /* AutotuneConfigProvider.swift in Sources */,
 				D76333C9256787610B3B4875 /* AutotuneConfigStateModel.swift in Sources */,
 				A05235B9112E677ED03B6E8E /* AutotuneConfigRootView.swift in Sources */,
-				4977A5282CCCC6C500FA2849 /* TargetPicker+Helper.swift in Sources */,
 				7F7B756BE8543965D9FDF1A2 /* DataTableDataFlow.swift in Sources */,
 				1D845DF2E3324130E1D95E67 /* DataTableProvider.swift in Sources */,
 				19F95FFA29F1102A00314DDC /* StatRootView.swift in Sources */,

+ 0 - 128
FreeAPS/Sources/Helpers/TargetPicker+Helper.swift

@@ -1,128 +0,0 @@
-import CoreData
-import Foundation
-import SwiftUI
-
-struct TargetPicker: View {
-    let label: String
-    @Binding var selection: Decimal
-    let options: [Decimal]
-    let units: GlucoseUnits
-    @Binding var hasChanges: Bool
-    @Binding var targetStep: Decimal
-    @Binding var displayPickerTarget: Bool
-    var toggleScrollWheel: (_ picker: Bool) -> Bool
-
-    var body: some View {
-        VStack {
-            HStack {
-                Text(label)
-                Spacer()
-                Text(
-                    (units == .mgdL ? selection.description : selection.formattedAsMmolL) + " " + units.rawValue
-                )
-                .foregroundColor(!displayPickerTarget ? .primary : .accentColor)
-            }
-            .onTapGesture {
-                displayPickerTarget = toggleScrollWheel(displayPickerTarget)
-            }
-            if displayPickerTarget {
-                HStack {
-                    // Radio buttons and text on the left side
-                    VStack(alignment: .leading) {
-                        // Radio buttons for step iteration
-                        let stepChoices: [Decimal] = units == .mgdL ? [1, 5] : [1, 9]
-                        ForEach(stepChoices, id: \.self) { step in
-                            let label = (units == .mgdL ? step.description : step.formattedAsMmolL) + " " +
-                                units.rawValue
-                            RadioButton(
-                                isSelected: targetStep == step,
-                                label: label
-                            ) {
-                                targetStep = step
-                                selection = OverrideConfig.StateModel.roundTargetToStep(selection, step)
-                            }
-                            .padding(.top, 10)
-                        }
-                    }
-                    .frame(maxWidth: .infinity)
-
-                    Spacer()
-
-                    // Picker on the right side
-                    Picker(selection: Binding(
-                        get: { OverrideConfig.StateModel.roundTargetToStep(selection, targetStep) },
-                        set: {
-                            selection = $0
-                            hasChanges = true
-                        }
-                    ), label: Text("")) {
-                        ForEach(options, id: \.self) { option in
-                            Text((units == .mgdL ? option.description : option.formattedAsMmolL) + " " + units.rawValue)
-                                .tag(option)
-                        }
-                    }
-                    .pickerStyle(WheelPickerStyle())
-                    .frame(maxWidth: .infinity)
-                }
-                .listRowSeparator(.hidden, edges: .top)
-            }
-        }
-    }
-}
-
-enum TargetHelper {
-    func computeHalfBasalTarget(
-        usingTarget initialTarget: Decimal? = nil,
-        usingPercentage initialPercentage: Double? = nil
-    ) -> Double {
-        let adjustmentPercentage = initialPercentage ?? percentage
-        let adjustmentRatio = Decimal(adjustmentPercentage / 100)
-        let tempTargetValue: Decimal = initialTarget ?? tempTargetTarget
-        var halfBasalTargetValue = halfBasalTarget
-        if adjustmentRatio != 1 {
-            halfBasalTargetValue = ((2 * adjustmentRatio * normalTarget) - normalTarget - (adjustmentRatio * tempTargetValue)) /
-                (adjustmentRatio - 1)
-        }
-        return round(Double(halfBasalTargetValue))
-    }
-
-    func computeSliderLow(usingTarget initialTarget: Decimal? = nil) -> Double {
-        let calcTarget = initialTarget ?? tempTargetTarget
-        guard calcTarget != 0 else { return 15 }
-
-        let shouldRaiseSensitivity = settingsManager.preferences.highTemptargetRaisesSensitivity
-        let isExerciseModeActive = settingsManager.preferences.exerciseMode
-        let isTargetNormalOrLower = calcTarget <= normalTarget
-
-        let minSens = (isTargetNormalOrLower || (!shouldRaiseSensitivity && !isExerciseModeActive)) ? 100 : 15
-
-        return Double(max(0, minSens))
-    }
-
-    func computeSliderHigh(usingTarget initialTarget: Decimal? = nil) -> Double {
-        let calcTarget = initialTarget ?? tempTargetTarget
-        guard calcTarget != 0 else { return Double(maxValue * 100) }
-
-        let shouldLowerSensitivity = settingsManager.preferences.lowTemptargetLowersSensitivity
-        let isTargetNormalOrHigher = calcTarget >= normalTarget
-
-        let maxSens = (isTargetNormalOrHigher || !shouldLowerSensitivity) ? 100 : Double(maxValue * 100)
-
-        return maxSens
-    }
-
-    func computeAdjustedPercentage(
-        usingHBT initialHalfBasalTarget: Decimal? = nil,
-        usingTarget initialTarget: Decimal? = nil
-    ) -> Decimal {
-        let halfBasalTargetValue = initialHalfBasalTarget ?? halfBasalTarget
-        let calcTarget = initialTarget ?? tempTargetTarget
-        let deviationFromNormal = halfBasalTargetValue - normalTarget
-
-        let adjustmentFactor = deviationFromNormal + (calcTarget - normalTarget)
-        let adjustmentRatio: Decimal = (deviationFromNormal * adjustmentFactor <= 0) ? maxValue : deviationFromNormal /
-            adjustmentFactor
-
-        return min(adjustmentRatio, maxValue)
-    }
-}

+ 55 - 0
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -909,6 +909,61 @@ extension OverrideConfig.StateModel {
     func isAdjustSensEnabled(usingTarget initialTarget: Decimal? = nil) -> Bool {
         computeSliderHigh(usingTarget: initialTarget) > computeSliderLow(usingTarget: initialTarget)
     }
+
+    func computeHalfBasalTarget(
+        usingTarget initialTarget: Decimal? = nil,
+        usingPercentage initialPercentage: Double? = nil
+    ) -> Double {
+        let adjustmentPercentage = initialPercentage ?? percentage
+        let adjustmentRatio = Decimal(adjustmentPercentage / 100)
+        let tempTargetValue: Decimal = initialTarget ?? tempTargetTarget
+        var halfBasalTargetValue = halfBasalTarget
+        if adjustmentRatio != 1 {
+            halfBasalTargetValue = ((2 * adjustmentRatio * normalTarget) - normalTarget - (adjustmentRatio * tempTargetValue)) /
+                (adjustmentRatio - 1)
+        }
+        return round(Double(halfBasalTargetValue))
+    }
+
+    func computeSliderLow(usingTarget initialTarget: Decimal? = nil) -> Double {
+        let calcTarget = initialTarget ?? tempTargetTarget
+        guard calcTarget != 0 else { return 15 }
+
+        let shouldRaiseSensitivity = settingsManager.preferences.highTemptargetRaisesSensitivity
+        let isExerciseModeActive = settingsManager.preferences.exerciseMode
+        let isTargetNormalOrLower = calcTarget <= normalTarget
+
+        let minSens = (isTargetNormalOrLower || (!shouldRaiseSensitivity && !isExerciseModeActive)) ? 100 : 15
+
+        return Double(max(0, minSens))
+    }
+
+    func computeSliderHigh(usingTarget initialTarget: Decimal? = nil) -> Double {
+        let calcTarget = initialTarget ?? tempTargetTarget
+        guard calcTarget != 0 else { return Double(maxValue * 100) }
+
+        let shouldLowerSensitivity = settingsManager.preferences.lowTemptargetLowersSensitivity
+        let isTargetNormalOrHigher = calcTarget >= normalTarget
+
+        let maxSens = (isTargetNormalOrHigher || !shouldLowerSensitivity) ? 100 : Double(maxValue * 100)
+
+        return maxSens
+    }
+
+    func computeAdjustedPercentage(
+        usingHBT initialHalfBasalTarget: Decimal? = nil,
+        usingTarget initialTarget: Decimal? = nil
+    ) -> Decimal {
+        let halfBasalTargetValue = initialHalfBasalTarget ?? halfBasalTarget
+        let calcTarget = initialTarget ?? tempTargetTarget
+        let deviationFromNormal = halfBasalTargetValue - normalTarget
+
+        let adjustmentFactor = deviationFromNormal + (calcTarget - normalTarget)
+        let adjustmentRatio: Decimal = (deviationFromNormal * adjustmentFactor <= 0) ? maxValue : deviationFromNormal /
+            adjustmentFactor
+
+        return min(adjustmentRatio, maxValue)
+    }
 }
 
 extension OverrideConfig.StateModel: SettingsObserver {

+ 7 - 7
FreeAPS/Sources/Modules/OverrideConfig/View/AddTempTargetForm.swift

@@ -199,13 +199,13 @@ struct AddTempTargetForm: View {
                     )
                 }
                 .onChange(of: state.tempTargetTarget) {
-                    state.percentage = Double(TargetHelper.computeAdjustedPercentage() * 100)
+                    state.percentage = Double(state.computeAdjustedPercentage() * 100)
                 }
             }
             .listRowBackground(Color.chart)
 
             if state.tempTargetTarget != state.normalTarget {
-                let computedHalfBasalTarget = Decimal(TargetHelper.computeHalfBasalTarget())
+                let computedHalfBasalTarget = Decimal(state.computeHalfBasalTarget())
                 let sensHint = state.tempTargetTarget > state.normalTarget ?
                     "Reducing all delivered insulin to \(formattedPercentage(state.percentage))%." :
                     "Increasing all delivered insulin by \(formattedPercentage(state.percentage - 100))%."
@@ -224,7 +224,7 @@ struct AddTempTargetForm: View {
                                     .onChange(of: tempTargetSensitivityAdjustmentType) { newValue in
                                         if newValue == .standard {
                                             state.halfBasalTarget = state.settingHalfBasalTarget
-                                            state.percentage = Double(TargetHelper.computeAdjustedPercentage() * 100)
+                                            state.percentage = Double(state.computeAdjustedPercentage() * 100)
                                         }
                                     }
                                 }
@@ -236,15 +236,15 @@ struct AddTempTargetForm: View {
                                         .fontWeight(.bold)
                                     Slider(
                                         value: $state.percentage,
-                                        in: TargetHelper.computeSliderLow() ... TargetHelper.computeSliderHigh(),
+                                        in: state.computeSliderLow() ... state.computeSliderHigh(),
                                         step: 5
                                     ) {} minimumValueLabel: {
-                                        Text("\(TargetHelper.computeSliderLow(), specifier: "%.0f")%")
+                                        Text("\(state.computeSliderLow(), specifier: "%.0f")%")
                                     } maximumValueLabel: {
-                                        Text("\(TargetHelper.computeSliderHigh(), specifier: "%.0f")%")
+                                        Text("\(state.computeSliderHigh(), specifier: "%.0f")%")
                                     } onEditingChanged: { editing in
                                         isUsingSlider = editing
-                                        state.halfBasalTarget = Decimal(TargetHelper.computeHalfBasalTarget())
+                                        state.halfBasalTarget = Decimal(state.computeHalfBasalTarget())
                                     }
 
                                     Divider()

+ 68 - 0
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -654,3 +654,71 @@ struct EditOverrideForm: View {
         return !toggle
     }
 }
+
+struct TargetPicker: View {
+    let label: String
+    @Binding var selection: Decimal
+    let options: [Decimal]
+    let units: GlucoseUnits
+    @Binding var hasChanges: Bool
+    @Binding var targetStep: Decimal
+    @Binding var displayPickerTarget: Bool
+    var toggleScrollWheel: (_ picker: Bool) -> Bool
+
+    var body: some View {
+        VStack {
+            HStack {
+                Text(label)
+                Spacer()
+                Text(
+                    (units == .mgdL ? selection.description : selection.formattedAsMmolL) + " " + units.rawValue
+                )
+                .foregroundColor(!displayPickerTarget ? .primary : .accentColor)
+            }
+            .onTapGesture {
+                displayPickerTarget = toggleScrollWheel(displayPickerTarget)
+            }
+            if displayPickerTarget {
+                HStack {
+                    // Radio buttons and text on the left side
+                    VStack(alignment: .leading) {
+                        // Radio buttons for step iteration
+                        let stepChoices: [Decimal] = units == .mgdL ? [1, 5] : [1, 9]
+                        ForEach(stepChoices, id: \.self) { step in
+                            let label = (units == .mgdL ? step.description : step.formattedAsMmolL) + " " +
+                                units.rawValue
+                            RadioButton(
+                                isSelected: targetStep == step,
+                                label: label
+                            ) {
+                                targetStep = step
+                                selection = OverrideConfig.StateModel.roundTargetToStep(selection, step)
+                            }
+                            .padding(.top, 10)
+                        }
+                    }
+                    .frame(maxWidth: .infinity)
+
+                    Spacer()
+
+                    // Picker on the right side
+                    Picker(selection: Binding(
+                        get: { OverrideConfig.StateModel.roundTargetToStep(selection, targetStep) },
+                        set: {
+                            selection = $0
+                            hasChanges = true
+                        }
+                    ), label: Text("")) {
+                        ForEach(options, id: \.self) { option in
+                            Text((units == .mgdL ? option.description : option.formattedAsMmolL) + " " + units.rawValue)
+                                .tag(option)
+                        }
+                    }
+                    .pickerStyle(WheelPickerStyle())
+                    .frame(maxWidth: .infinity)
+                }
+                .listRowSeparator(.hidden, edges: .top)
+            }
+        }
+    }
+}

+ 7 - 7
FreeAPS/Sources/Modules/OverrideConfig/View/EditTempTargetForm.swift

@@ -39,7 +39,7 @@ struct EditTempTargetForm: View {
         if let hbt = tempTargetToEdit.halfBasalTarget?.decimalValue {
             let H = hbt
             let T = tempTargetToEdit.target?.decimalValue ?? 100
-            let calcPercentage = Double(TargetHelper.computeAdjustedPercentage(usingHBT: H, usingTarget: T) * 100)
+            let calcPercentage = Double(state.computeAdjustedPercentage(usingHBT: H, usingTarget: T) * 100)
             _percentage = State(initialValue: Decimal(calcPercentage))
         } else { _percentage = State(initialValue: Decimal(100)) }
     }
@@ -192,7 +192,7 @@ struct EditTempTargetForm: View {
                     )
                 }
                 .onChange(of: target) {
-                    percentage = TargetHelper.computeAdjustedPercentage(usingHBT: halfBasalTarget, usingTarget: target) * 100
+                    percentage = state.computeAdjustedPercentage(usingHBT: halfBasalTarget, usingTarget: target) * 100
                 }
             }
             .listRowBackground(Color.chart)
@@ -243,21 +243,21 @@ struct EditTempTargetForm: View {
                                             set: { newValue in
                                                 percentage = Decimal(newValue)
                                                 hasChanges = true
-                                                halfBasalTarget = Decimal(TargetHelper.computeHalfBasalTarget(
+                                                halfBasalTarget = Decimal(state.computeHalfBasalTarget(
                                                     usingTarget: target,
                                                     usingPercentage: Double(percentage)
                                                 ))
                                             }
                                         ),
-                                        in: Double(TargetHelper.computeSliderLow(usingTarget: target)) ...
-                                            Double(TargetHelper.computeSliderHigh(usingTarget: target)),
+                                        in: Double(state.computeSliderLow(usingTarget: target)) ...
+                                            Double(state.computeSliderHigh(usingTarget: target)),
                                         step: 5
                                     ) {}
                                     minimumValueLabel: {
-                                        Text("\(TargetHelper.computeSliderLow(usingTarget: target), specifier: "%.0f")%")
+                                        Text("\(state.computeSliderLow(usingTarget: target), specifier: "%.0f")%")
                                     }
                                     maximumValueLabel: {
-                                        Text("\(TargetHelper.computeSliderHigh(usingTarget: target), specifier: "%.0f")%")
+                                        Text("\(state.computeSliderHigh(usingTarget: target), specifier: "%.0f")%")
                                     }
 
                                     Divider()

+ 2 - 1
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -489,7 +489,8 @@ extension OverrideConfig {
                     .RawValue ?? Double(state.settingHalfBasalTarget)
             )
             let percentage = Int(
-                TargetHelper.computeAdjustedPercentage(usingHBT: presetHalfBasalTarget, usingTarget: presetTarget) * 100
+                state
+                    .computeAdjustedPercentage(usingHBT: presetHalfBasalTarget, usingTarget: presetTarget) * 100
             )
 
             return ZStack(alignment: .trailing, content: {