Explorar o código

Add recommended bolus alert

Jonas Björkert %!s(int64=2) %!d(string=hai) anos
pai
achega
c2f9bab188

+ 21 - 2
LoopFollow/Controllers/Alarms.swift

@@ -509,9 +509,21 @@ extension MainViewController {
             }
         }
 
+        if UserDefaultsRepository.alertRecBolusActive.value && !UserDefaultsRepository.alertRecBolusIsSnoozed.value {
+            let currentRecBolus = UserDefaultsRepository.deviceRecBolus.value
+            let alertAtRecBolus = Double(UserDefaultsRepository.alertRecBolusLevel.value)
+
+            if currentRecBolus >= alertAtRecBolus {
+                AlarmSound.whichAlarm = "Rec. Bolus"
+
+                if UserDefaultsRepository.alertRecBolusRepeat.value { numLoops = -1 }
+                triggerAlarm(sound: UserDefaultsRepository.alertRecBolusSound.value, snooozedBGReadingTime: nil, overrideVolume: UserDefaultsRepository.overrideSystemOutputVolume.value, numLoops: numLoops, snoozeTime: UserDefaultsRepository.alertRecBolusSnoozeHours.value, snoozeIncrement: 1, audio: true)
+                return
+            }
+        }
+
         // still send persistent notification if no alarms trigger and persistent notification is on
         persistentNotification(bgTime: currentBGTime)
-        
     }
        
     func checkOverrideAlarms()
@@ -773,7 +785,14 @@ extension MainViewController {
             alarms.reloadSnoozeTime(key: "alertBatterySnoozedTime", setNil: true)
             alarms.reloadIsSnoozed(key: "alertBatteryIsSnoozed", value: false)
         }
-      }
+
+        if date > UserDefaultsRepository.alertRecBolusSnoozedTime.value ?? date {
+            UserDefaultsRepository.alertRecBolusSnoozedTime.setNil(key: "alertRecBolusSnoozedTime")
+            UserDefaultsRepository.alertRecBolusIsSnoozed.value = false
+            alarms.reloadSnoozeTime(key: "alertRecBolusSnoozedTime", setNil: true)
+            alarms.reloadIsSnoozed(key: "alertRecBolusIsSnoozed", value: false)
+        }
+    }
     
     func checkQuietHours() {
         if UserDefaultsRepository.quietHourStart.value == nil || UserDefaultsRepository.quietHourEnd.value == nil { return }

+ 10 - 2
LoopFollow/Controllers/Nightscout/DeviceStatus.swift

@@ -181,6 +181,7 @@ extension MainViewController {
                     }
                     if let recBolus = lastLoopRecord["recommendedBolus"] as? Double {
                         tableData[8].value = String(format:"%.2fU", recBolus)
+                        UserDefaultsRepository.deviceRecBolus.value = recBolus
                     }
                     if let loopStatus = lastLoopRecord["recommendedTempBasal"] as? [String:AnyObject] {
                         if let tempBasalTime = formatter.date(from: (loopStatus["timestamp"] as! String))?.timeIntervalSince1970 {
@@ -239,9 +240,16 @@ extension MainViewController {
                         tableData[1].value = String(format:"%.0f", cobdata["COB"] as! Double)
                         latestCOB = String(format:"%.0f", cobdata["COB"] as! Double)
                     }
-                    if let recbolusdata = lastLoopRecord["enacted"] as? [String:AnyObject] {
-                        tableData[8].value = String(format:"%.2fU", recbolusdata["insulinReq"] as! Double)
+                    if let recbolusdata = lastLoopRecord["enacted"] as? [String: AnyObject],
+                       let insulinReq = recbolusdata["insulinReq"] as? Double {
+                        tableData[8].value = String(format: "%.2fU", insulinReq)
+                        UserDefaultsRepository.deviceRecBolus.value = insulinReq
+                    } else {
+                        tableData[8].value = "N/A"
+                        UserDefaultsRepository.deviceRecBolus.value = 0
+                        print("Warning: Failed to extract insulinReq from recbolusdata.")
                     }
+
                     if let autosensdata = lastLoopRecord["enacted"] as? [String:AnyObject] {
                         let sens = autosensdata["sensitivityRatio"] as! Double * 100.0
                         tableData[11].value = String(format:"%.0f", sens) + "%"

+ 107 - 8
LoopFollow/ViewControllers/AlarmViewController.swift

@@ -252,7 +252,6 @@ class AlarmViewController: FormViewController {
           <<< SegmentedRow<String>("bgAlerts"){ row in
                 row.title = ""
                 row.options = ["Urgent Low", "Low", "High", "Urgent High"]
-                   // row.value = "Urgent Low"
         }.onChange { [weak self] row in
             guard let value = row.value else { return }
             let otherRow = self?.form.rowBy(tag: "bgExtraAlerts") as! SegmentedRow<String>
@@ -267,12 +266,14 @@ class AlarmViewController: FormViewController {
             let otherRow4 = self?.form.rowBy(tag: "otherAlerts3") as! SegmentedRow<String>
             otherRow4.value = nil
             otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts4") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
             row.value = value
         }
             <<< SegmentedRow<String>("bgExtraAlerts"){ row in
                 row.title = ""
                 row.options = ["No Readings", "Fast Drop", "Fast Rise", "Temporary"]
-                    //row.value = "Missed Readings"
         }.onChange { [weak self] row in
              guard let value = row.value else { return }
             let otherRow = self?.form.rowBy(tag: "bgAlerts") as! SegmentedRow<String>
@@ -287,6 +288,9 @@ class AlarmViewController: FormViewController {
             let otherRow4 = self?.form.rowBy(tag: "otherAlerts3") as! SegmentedRow<String>
             otherRow4.value = nil
             otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts4") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
             row.value = value
         }
             <<< SegmentedRow<String>("otherAlerts"){ row in
@@ -295,8 +299,6 @@ class AlarmViewController: FormViewController {
                 if UserDefaultsRepository.url.value == "" {
                     row.hidden = true
                 }
-                
-                //row.value = "Not Looping"
         }.onChange { [weak self] row in
              guard let value = row.value else { return }
             let otherRow = self?.form.rowBy(tag: "bgExtraAlerts") as! SegmentedRow<String>
@@ -311,6 +313,9 @@ class AlarmViewController: FormViewController {
             let otherRow4 = self?.form.rowBy(tag: "otherAlerts3") as! SegmentedRow<String>
             otherRow4.value = nil
             otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts4") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
             row.value = value
         }
         <<< SegmentedRow<String>("otherAlerts2"){ row in
@@ -319,7 +324,6 @@ class AlarmViewController: FormViewController {
                 if UserDefaultsRepository.url.value == "" {
                     row.hidden = true
                 }
-                //row.value = "Not Looping"
         }.onChange { [weak self] row in
              guard let value = row.value else { return }
             let otherRow = self?.form.rowBy(tag: "bgExtraAlerts") as! SegmentedRow<String>
@@ -334,6 +338,9 @@ class AlarmViewController: FormViewController {
             let otherRow4 = self?.form.rowBy(tag: "otherAlerts3") as! SegmentedRow<String>
             otherRow4.value = nil
             otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts4") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
             row.value = value
         }
         
@@ -343,7 +350,6 @@ class AlarmViewController: FormViewController {
                 if UserDefaultsRepository.url.value == "" {
                     row.hidden = true
                 }
-                //row.value = "Not Looping"
         }.onChange { [weak self] row in
              guard let value = row.value else { return }
             let otherRow = self?.form.rowBy(tag: "bgExtraAlerts") as! SegmentedRow<String>
@@ -358,10 +364,37 @@ class AlarmViewController: FormViewController {
             let otherRow4 = self?.form.rowBy(tag: "otherAlerts2") as! SegmentedRow<String>
             otherRow4.value = nil
             otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts4") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
             row.value = value
         }
         
-
+        <<< SegmentedRow<String>("otherAlerts4"){ row in
+            row.title = ""
+            row.options = ["Rec. Bolus"]
+            if UserDefaultsRepository.url.value == "" {
+                row.hidden = true
+            }
+        }.onChange { [weak self] row in
+            guard let value = row.value else { return }
+            let otherRow = self?.form.rowBy(tag: "bgExtraAlerts") as! SegmentedRow<String>
+            otherRow.value = nil
+            otherRow.reload()
+            let otherRow2 = self?.form.rowBy(tag: "bgAlerts") as! SegmentedRow<String>
+            otherRow2.value = nil
+            otherRow2.reload()
+            let otherRow3 = self?.form.rowBy(tag: "otherAlerts") as! SegmentedRow<String>
+            otherRow3.value = nil
+            otherRow3.reload()
+            let otherRow4 = self?.form.rowBy(tag: "otherAlerts2") as! SegmentedRow<String>
+            otherRow4.value = nil
+            otherRow4.reload()
+            let otherRow5 = self?.form.rowBy(tag: "otherAlerts3") as! SegmentedRow<String>
+            otherRow5.value = nil
+            otherRow5.reload()
+            row.value = value
+        }
         
         buildUrgentLow()
         buildLow()
@@ -390,7 +423,8 @@ class AlarmViewController: FormViewController {
         buildIOB()
         buildCOB()
         buildBatteryAlarm()
-        
+        buildRecBolus()
+
         buildSnoozeAll()
         buildAlarmSettings()
         
@@ -3242,6 +3276,71 @@ class AlarmViewController: FormViewController {
             UserDefaultsRepository.alertBatteryRepeat.value = value
         }
     }
+
+    func buildRecBolus(){
+        form
+        +++ Section(header: "Rec. Bolus Alert", footer: "Activates a notification alert whenever recommended bolus is above a user-defined threshold, allowing for proactive manual bolusing.") { row in
+            row.hidden = "$otherAlerts4 != 'Rec. Bolus'"
+        }
+        <<< SwitchRow("alertRecBolusActive"){ row in
+            row.title = "Active"
+            row.value = UserDefaultsRepository.alertRecBolusActive.value
+        }.onChange { [weak self] row in
+            guard let value = row.value else { return }
+            UserDefaultsRepository.alertRecBolusActive.value = value
+        }
+        <<< StepperRow("alertRecBolusAt") { row in
+            row.title = "Rec. Bolus threshold"
+            row.cell.stepper.stepValue = 0.1
+            row.cell.stepper.minimumValue = 0.1
+            row.cell.stepper.maximumValue = 50
+            row.value = Double(UserDefaultsRepository.alertRecBolusLevel.value)
+            row.displayValueFor = { value in
+                guard let value = value else { return nil }
+                return "\(Double(round(10*value)/10))"
+            }
+        }.onChange { [weak self] row in
+            guard let value = row.value else { return }
+            UserDefaultsRepository.alertRecBolusLevel.value = value
+        }
+        
+        <<< StepperRow("alertRecBolusSnoozeHours") { row in
+            row.title = "Snooze Hours"
+            row.cell.stepper.stepValue = 1
+            row.cell.stepper.minimumValue = 1
+            row.cell.stepper.maximumValue = 24
+            row.value = Double(UserDefaultsRepository.alertRecBolusSnoozeHours.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.alertRecBolusSnoozeHours.value = Int(value)
+        }
+        <<< PickerInputRow<String>("alertRecBolusSound") { row in
+            row.title = "Sound"
+            row.options = soundFiles
+            row.value = UserDefaultsRepository.alertRecBolusSound.value
+            row.displayValueFor = { value in
+                guard let value = value else { return nil }
+                return "\(String(value.replacingOccurrences(of: "_", with: " ")))"
+            }
+        }.onChange { [weak self] row in
+            guard let value = row.value else { return }
+            UserDefaultsRepository.alertRecBolusSound.value = value
+            AlarmSound.setSoundFile(str: value)
+            AlarmSound.stop()
+            AlarmSound.playTest()
+        }
+        <<< SwitchRow("alertRecBolusRepeat"){ row in
+            row.title = "Repeat Sound"
+            row.value = UserDefaultsRepository.alertRecBolusRepeat.value
+        }.onChange { [weak self] row in
+            guard let value = row.value else { return }
+            UserDefaultsRepository.alertRecBolusRepeat.value = value
+        }
+    }
     
     func buildAlarmSettings() {
            form

+ 59 - 52
LoopFollow/ViewControllers/SnoozeViewController.swift

@@ -168,60 +168,67 @@ class SnoozeViewController: UIViewController, UNUserNotificationCenterDelegate {
             alarms.reloadIsSnoozed(key: "alertFastRiseIsSnoozed", value: true)
             alarms.reloadSnoozeTime(key: "alertFastRiseSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
         }  else if AlarmSound.whichAlarm == "Missed Reading Alert" {
-           UserDefaultsRepository.alertMissedReadingIsSnoozed.value = true
-           UserDefaultsRepository.alertMissedReadingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
-           guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-           alarms.reloadIsSnoozed(key: "alertMissedReadingIsSnoozed", value: true)
-           alarms.reloadSnoozeTime(key: "alertMissedReadingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
-       }  else if AlarmSound.whichAlarm == "Sensor Change Alert" {
-                UserDefaultsRepository.alertSAGEIsSnoozed.value = true
-                UserDefaultsRepository.alertSAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
-                guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-                alarms.reloadIsSnoozed(key: "alertSAGEIsSnoozed", value: true)
-                alarms.reloadSnoozeTime(key: "alertSAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
-       } else if AlarmSound.whichAlarm == "Pump Change Alert" {
-        UserDefaultsRepository.alertCAGEIsSnoozed.value = true
-        UserDefaultsRepository.alertCAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertCAGEIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertCAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
-       } else if AlarmSound.whichAlarm == "Not Looping Alert" {
-        UserDefaultsRepository.alertNotLoopingIsSnoozed.value = true
-        UserDefaultsRepository.alertNotLoopingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertNotLoopingIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertNotLoopingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
-       } else if AlarmSound.whichAlarm == "Missed Bolus Alert" {
-        UserDefaultsRepository.alertMissedBolusIsSnoozed.value = true
-        UserDefaultsRepository.alertMissedBolusSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertMissedBolusIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertMissedBolusSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
-       } else if AlarmSound.whichAlarm == "Low Insulin Alert" {
-        UserDefaultsRepository.alertPumpIsSnoozed.value = true
-        UserDefaultsRepository.alertPumpSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertPumpIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertPumpSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
-       } else if AlarmSound.whichAlarm == "IOB Alert" {
-        UserDefaultsRepository.alertIOBIsSnoozed.value = true
-        UserDefaultsRepository.alertIOBSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertIOBIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertIOBSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
-       } else if AlarmSound.whichAlarm == "COB Alert" {
-        UserDefaultsRepository.alertCOBIsSnoozed.value = true
-        UserDefaultsRepository.alertCOBSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
-        guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-        alarms.reloadIsSnoozed(key: "alertCOBIsSnoozed", value: true)
-        alarms.reloadSnoozeTime(key: "alertCOBSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
-       } else if AlarmSound.whichAlarm == "Low Battery" {
-           UserDefaultsRepository.alertBatteryIsSnoozed.value = true
+            UserDefaultsRepository.alertMissedReadingIsSnoozed.value = true
+            UserDefaultsRepository.alertMissedReadingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertMissedReadingIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertMissedReadingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
+        }  else if AlarmSound.whichAlarm == "Sensor Change Alert" {
+            UserDefaultsRepository.alertSAGEIsSnoozed.value = true
+            UserDefaultsRepository.alertSAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertSAGEIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertSAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "Pump Change Alert" {
+            UserDefaultsRepository.alertCAGEIsSnoozed.value = true
+            UserDefaultsRepository.alertCAGESnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertCAGEIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertCAGESnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "Not Looping Alert" {
+            UserDefaultsRepository.alertNotLoopingIsSnoozed.value = true
+            UserDefaultsRepository.alertNotLoopingSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertNotLoopingIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertNotLoopingSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
+        } else if AlarmSound.whichAlarm == "Missed Bolus Alert" {
+            UserDefaultsRepository.alertMissedBolusIsSnoozed.value = true
+            UserDefaultsRepository.alertMissedBolusSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertMissedBolusIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertMissedBolusSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60)))
+        } else if AlarmSound.whichAlarm == "Low Insulin Alert" {
+            UserDefaultsRepository.alertPumpIsSnoozed.value = true
+            UserDefaultsRepository.alertPumpSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertPumpIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertPumpSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "IOB Alert" {
+            UserDefaultsRepository.alertIOBIsSnoozed.value = true
+            UserDefaultsRepository.alertIOBSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertIOBIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertIOBSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "COB Alert" {
+            UserDefaultsRepository.alertCOBIsSnoozed.value = true
+            UserDefaultsRepository.alertCOBSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertCOBIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertCOBSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "Low Battery" {
+            UserDefaultsRepository.alertBatteryIsSnoozed.value = true
+            
+            UserDefaultsRepository.alertBatterySnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
+            alarms.reloadIsSnoozed(key: "alertBatteryIsSnoozed", value: true)
+            alarms.reloadSnoozeTime(key: "alertBatterySnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+        } else if AlarmSound.whichAlarm == "Rec. Bolus" {
+           UserDefaultsRepository.alertRecBolusIsSnoozed.value = true
 
-           UserDefaultsRepository.alertBatterySnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
+           UserDefaultsRepository.alertRecBolusSnoozedTime.value = Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60))
            guard let alarms = self.tabBarController!.viewControllers?[1] as? AlarmViewController else { return }
-           alarms.reloadIsSnoozed(key: "alertBatteryIsSnoozed", value: true)
-           alarms.reloadSnoozeTime(key: "alertBatterySnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
+           alarms.reloadIsSnoozed(key: "alertRecBolusIsSnoozed", value: true)
+           alarms.reloadSnoozeTime(key: "alertRecBolusSnoozedTime", setNil: false, value: Date().addingTimeInterval(TimeInterval(snoozeForMinuteStepper.value * 60 * 60)))
        }
     }
     

+ 9 - 0
LoopFollow/repository/UserDefaults.swift

@@ -450,4 +450,13 @@ class UserDefaultsRepository {
     static let alertBatterySnoozedTime = UserDefaultsValue<Date?>(key: "alertBatterySnoozedTime", default: nil)
     static let alertBatterySnoozeHours = UserDefaultsValue<Int>(key: "alertBatterySnoozeHours", default: 1)
     static var deviceBatteryLevel: UserDefaultsValue<Double> = UserDefaultsValue(key: "deviceBatteryLevel", default: 100.0)
+    
+    static let alertRecBolusActive = UserDefaultsValue<Bool>(key: "alertRecBolusActive", default: false)
+    static let alertRecBolusLevel = UserDefaultsValue<Double>(key: "alertRecBolusLevel", default: 1)  //Unit[s]
+    static let alertRecBolusSound = UserDefaultsValue<String>(key: "alertRecBolusSound", default: "Dhol_Shuffleloop")
+    static let alertRecBolusRepeat = UserDefaultsValue<Bool>(key: "alertRecBolusRepeat", default: false)
+    static let alertRecBolusIsSnoozed = UserDefaultsValue<Bool>(key: "alertRecBolusIsSnoozed", default: false)
+    static let alertRecBolusSnoozedTime = UserDefaultsValue<Date?>(key: "alertRecBolusSnoozedTime", default: nil)
+    static let alertRecBolusSnoozeHours = UserDefaultsValue<Int>(key: "alertRecBolusSnoozeHours", default: 1)
+    static var deviceRecBolus: UserDefaultsValue<Double> = UserDefaultsValue(key: "deviceRecBolus", default: 0.0)
 }