Prechádzať zdrojové kódy

Add IOB option to sum the boluses to use for the alert trigger

Jon Fawcett 4 rokov pred
rodič
commit
97239e6ec2

+ 10 - 1
LoopFollow/Controllers/Alarms.swift

@@ -68,7 +68,16 @@ extension MainViewController {
         // Check IOB
         if UserDefaultsRepository.alertIOB.value && !UserDefaultsRepository.alertIOBIsSnoozed.value {
             let alertAt = Double(UserDefaultsRepository.alertIOBAt.value)
-            if Double(latestIOB) ?? 0 >= alertAt {
+            var totalBolus: Double = 0
+            let bolusTimeAgo = dateTimeUtils.getNowTimeIntervalUTC() - Double(UserDefaultsRepository.alertIOBBolusesWithin.value * 60)
+            if UserDefaultsRepository.alertIOBBolusesWithin.value > 0 {
+                for i in 0..<bolusData.count {
+                    if bolusData[i].date >= bolusTimeAgo {
+                        totalBolus += bolusData[i].value
+                    }
+                }
+            }
+            if Double(latestIOB) ?? 0 >= alertAt || totalBolus >= alertAt {
                 AlarmSound.whichAlarm = "IOB Alert"
                 //determine if it is day or night and what should happen
                 if UserDefaultsRepository.nightTime.value {

+ 16 - 1
LoopFollow/ViewControllers/AlarmViewController.swift

@@ -2838,7 +2838,7 @@ class AlarmViewController: FormViewController {
     
     func buildIOB() {
         form
-            +++ Section(header: "IOB", footer: "Alert will trigger when IOB is above value") { row in
+            +++ Section(header: "IOB", footer: "Alert will trigger when IOB is above value.The Total Bolus Within option with allow the alert to use the reported IOB or sum of the Boluses") { row in
                 row.hidden = "$otherAlerts3 != 'IOB'"
             }
             <<< SwitchRow("alertIOB"){ row in
@@ -2863,6 +2863,20 @@ class AlarmViewController: FormViewController {
                 guard let value = row.value else { return }
                 UserDefaultsRepository.alertIOBAt.value = Int(value)
             }
+        <<< StepperRow("alertIOBBolusesWithin") { row in
+            row.title = "Or Total Boluses (Min)"
+            row.cell.stepper.stepValue = 5
+            row.cell.stepper.minimumValue = 5
+            row.cell.stepper.maximumValue = 120
+            row.value = Double(UserDefaultsRepository.alertIOBBolusesWithin.value)
+            row.displayValueFor = { value in
+                    guard let value = value else { return nil }
+                    return "\(Int(value))"
+                }
+        }.onChange { [weak self] row in
+                guard let value = row.value else { return }
+                UserDefaultsRepository.alertIOBBolusesWithin.value = Int(value)
+        }
             
             <<< StepperRow("alertIOBSnoozeHours") { row in
                 row.title = "Snooze Hours"
@@ -3008,6 +3022,7 @@ class AlarmViewController: FormViewController {
                 guard let value = row.value else { return }
                 UserDefaultsRepository.alertCOBAt.value = Int(value)
             }
+        
             
             <<< StepperRow("alertCOBSnoozeHours") { row in
                 row.title = "Snooze Hours"

+ 1 - 0
LoopFollow/repository/UserDefaults.swift

@@ -384,6 +384,7 @@ class UserDefaultsRepository {
     
     static let alertIOB = UserDefaultsValue<Bool>(key: "alertIOB", default: false)
     static let alertIOBAt = UserDefaultsValue<Int>(key: "alertIOBAt", default: 10) //Units
+    static let alertIOBBolusesWithin = UserDefaultsValue<Int>(key: "alertIOBBolusesWithin", default: 60) //Minutes
     static let alertIOBQuiet = UserDefaultsValue<Bool>(key: "alertIOBQuiet", default: false)
     static let alertIOBRepeat = UserDefaultsValue<String>(key: "alertIOBRepeat", default: "Always")
     static let alertIOBDayTime = UserDefaultsValue<Bool>(key: "alertIOBDayTime", default: true)