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

combine step rounding functions

remove unneeded log
Mike Plante 1 год назад
Родитель
Сommit
a2375053b5

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

@@ -409,6 +409,50 @@ extension OverrideConfig.StateModel {
         uamMinutes = defaultUamMinutes
         target = 100
     }
+
+    static func roundTargetToStep(_ target: Decimal, _ step: Decimal) -> Decimal {
+        // Convert target and step to NSDecimalNumber
+        guard let targetValue = NSDecimalNumber(decimal: target).doubleValue as Double?,
+              let stepValue = NSDecimalNumber(decimal: step).doubleValue as Double?
+        else {
+            return target
+        }
+
+        // Perform the remainder check using truncatingRemainder
+        let remainder = Decimal(targetValue.truncatingRemainder(dividingBy: stepValue))
+
+        if remainder != 0 {
+            // Calculate how much to adjust (up or down) based on the remainder
+            let adjustment = step - remainder
+            return target + adjustment
+        }
+
+        // Return the original target if no adjustment is needed
+        return target
+    }
+
+    static func roundOverridePercentageToStep(_ percentage: Double, _ step: Int) -> Double {
+        let stepDouble = Double(step)
+        // Check if overridePercentage is not divisible by the selected step
+        if percentage.truncatingRemainder(dividingBy: stepDouble) != 0 {
+            let roundedValue: Double
+
+            if percentage > 100 {
+                // Round down to the nearest valid step away from 100
+                let stepCount = (percentage - 100) / stepDouble
+                roundedValue = 100 + floor(stepCount) * stepDouble
+            } else {
+                // Round up to the nearest valid step away from 100
+                let stepCount = (100 - percentage) / stepDouble
+                roundedValue = 100 - floor(stepCount) * stepDouble
+            }
+
+            // Ensure the value stays between 10 and 200
+            return max(10, min(roundedValue, 200))
+        }
+
+        return percentage
+    }
 }
 
 // MARK: - TEMP TARGET

+ 6 - 45
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -200,7 +200,10 @@ struct AddOverrideForm: View {
                             ForEach([1, 5], id: \.self) { step in
                                 RadioButton(isSelected: percentageStep == step, label: "\(step) %") {
                                     percentageStep = step
-                                    roundOverridePercentageToStep()
+                                    state.overridePercentage = OverrideConfig.StateModel.roundOverridePercentageToStep(
+                                        state.overridePercentage,
+                                        step
+                                    )
                                 }
                                 .padding(.top, 10)
                             }
@@ -292,7 +295,7 @@ struct AddOverrideForm: View {
                                             label: label
                                         ) {
                                             targetStep = step
-                                            state.target = roundTargetToStep(state.target, targetStep)
+                                            state.target = OverrideConfig.StateModel.roundTargetToStep(state.target, targetStep)
                                         }
                                         .padding(.top, 10)
                                     }
@@ -303,7 +306,7 @@ struct AddOverrideForm: View {
 
                                 // Picker on the right side
                                 Picker(selection: Binding(
-                                    get: { roundTargetToStep(state.target, targetStep) },
+                                    get: { OverrideConfig.StateModel.roundTargetToStep(state.target, targetStep) },
                                     set: { state.target = $0 }
                                 ), label: Text("")) {
                                     ForEach(
@@ -554,48 +557,6 @@ struct AddOverrideForm: View {
         return (false, nil)
     }
 
-    private func roundOverridePercentageToStep() {
-        // Check if overridePercentage is not divisible by the selected step
-        if state.overridePercentage.truncatingRemainder(dividingBy: Double(percentageStep)) != 0 {
-            let roundedValue: Double
-
-            if state.overridePercentage > 100 {
-                // Round down to the nearest valid step away from 100
-                let stepCount = (state.overridePercentage - 100) / Double(percentageStep)
-                roundedValue = 100 + floor(stepCount) * Double(percentageStep)
-            } else {
-                // Round up to the nearest valid step away from 100
-                let stepCount = (100 - state.overridePercentage) / Double(percentageStep)
-                roundedValue = 100 - floor(stepCount) * Double(percentageStep)
-            }
-
-            // Ensure the value stays between 10 and 200
-            state.overridePercentage = max(10, min(roundedValue, 200))
-        }
-    }
-
-    private func roundTargetToStep(_ target: Decimal, _ step: Decimal) -> Decimal {
-        // Convert target and step to NSDecimalNumber
-        guard let targetValue = NSDecimalNumber(decimal: target).doubleValue as Double?,
-              let stepValue = NSDecimalNumber(decimal: step).doubleValue as Double?
-        else {
-            print("Failed to unwrap target or step as NSDecimalNumber")
-            return target
-        }
-
-        // Perform the remainder check using truncatingRemainder
-        let remainder = Decimal(targetValue.truncatingRemainder(dividingBy: stepValue))
-
-        if remainder != 0 {
-            // Calculate how much to adjust (up or down) based on the remainder
-            let adjustment = step - remainder
-            return target + adjustment
-        }
-
-        // Return the original target if no adjustment is needed
-        return target
-    }
-
     func generateTargetPickerValues() -> [Decimal] {
         var values: [Decimal] = []
         var currentValue: Double = 72

+ 3 - 45
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -286,7 +286,7 @@ struct EditOverrideForm: View {
                             ForEach([1, 5], id: \.self) { step in
                                 RadioButton(isSelected: percentageStep == step, label: "\(step) %") {
                                     percentageStep = step
-                                    roundPercentageToStep()
+                                    percentage = OverrideConfig.StateModel.roundOverridePercentageToStep(percentage, step)
                                 }
                                 .padding(.top, 10)
                             }
@@ -658,26 +658,6 @@ struct EditOverrideForm: View {
         uamMinutes = override.uamMinutes?.decimalValue ?? state.defaultUamMinutes
     }
 
-    private func roundPercentageToStep() {
-        // Check if overridePercentage is not divisible by the selected step
-        if percentage.truncatingRemainder(dividingBy: Double(percentageStep)) != 0 {
-            let roundedValue: Double
-
-            if percentage > 100 {
-                // Round down to the nearest valid step away from 100
-                let stepCount = (percentage - 100) / Double(percentageStep)
-                roundedValue = 100 + floor(stepCount) * Double(percentageStep)
-            } else {
-                // Round up to the nearest valid step away from 100
-                let stepCount = (100 - percentage) / Double(percentageStep)
-                roundedValue = 100 - floor(stepCount) * Double(percentageStep)
-            }
-
-            // Ensure the value stays between 10 and 200
-            percentage = max(10, min(roundedValue, 200))
-        }
-    }
-
     func generateTargetPickerValues() -> [Decimal] {
         var values: [Decimal] = []
         var currentValue: Double = 72
@@ -711,28 +691,6 @@ struct EditOverrideForm: View {
     }
 }
 
-private func roundTargetToStep(_ target: Decimal, _ step: Decimal) -> Decimal {
-    // Convert target and step to NSDecimalNumber
-    guard let targetValue = NSDecimalNumber(decimal: target).doubleValue as Double?,
-          let stepValue = NSDecimalNumber(decimal: step).doubleValue as Double?
-    else {
-        print("Failed to unwrap target or step as NSDecimalNumber")
-        return target
-    }
-
-    // Perform the remainder check using truncatingRemainder
-    let remainder = Decimal(targetValue.truncatingRemainder(dividingBy: stepValue))
-
-    if remainder != 0 {
-        // Calculate how much to adjust (up or down) based on the remainder
-        let adjustment = step - remainder
-        return target + adjustment
-    }
-
-    // Return the original target if no adjustment is needed
-    return target
-}
-
 struct TargetPicker: View {
     let label: String
     @Binding var selection: Decimal
@@ -769,7 +727,7 @@ struct TargetPicker: View {
                                 label: label
                             ) {
                                 targetStep = step
-                                selection = roundTargetToStep(selection, step)
+                                selection = OverrideConfig.StateModel.roundTargetToStep(selection, step)
                             }
                             .padding(.top, 10)
                         }
@@ -780,7 +738,7 @@ struct TargetPicker: View {
 
                     // Picker on the right side
                     Picker(selection: Binding(
-                        get: { roundTargetToStep(selection, targetStep) },
+                        get: { OverrideConfig.StateModel.roundTargetToStep(selection, targetStep) },
                         set: {
                             selection = $0
                             hasChanges = true