Jonas Björkert пре 1 година
родитељ
комит
628200661b
2 измењених фајлова са 150 додато и 30 уклоњено
  1. 150 0
      LoopFollow/Storage/Storage+Migrate.swift
  2. 0 30
      LoopFollow/Storage/UserDefaults.swift

+ 150 - 0
LoopFollow/Storage/Storage+Migrate.swift

@@ -294,6 +294,8 @@ extension Storage {
         migrateMissedBolusAlarm()
         migrateSensorChangeAlarm()
         migratePumpChangeAlarm()
+        migrateOverrideStartAlarm()
+        migrateOverrideEndAlarm()
     }
 
     // MARK: - One-off alarm migrations
@@ -997,4 +999,152 @@ extension Storage {
         list.append(alarm)
         Storage.shared.alarms.value = list
     }
+
+    // ─────────────────────────────────────────────────────────────────────────────
+
+    //  MARK: Override-Start  →  .overrideStart
+
+    // ─────────────────────────────────────────────────────────────────────────────
+    private func migrateOverrideStartAlarm() {
+        let exists = UserDefaultsValue<Bool>(key: "alertOverrideStart", default: false)
+        guard exists.exists else { return } // user never touched it
+
+        func take<V: AnyConvertible & Equatable>(_ k: String, _ def: V) -> V {
+            let box = UserDefaultsValue<V>(key: k, default: def)
+            defer { box.setNil(key: k) } // wipe after reading
+            return box.value
+        }
+
+        var alarm = Alarm(type: .overrideStart)
+        alarm.name = "Override Started"
+        alarm.disableAfterFiring = true // fire once, then stay off
+
+        alarm.isEnabled = take("alertOverrideStart", false)
+        alarm.snoozeDuration = 5 // legacy UI had no stepper
+        if take("alertOverrideStartIsSnoozed", false) {
+            alarm.snoozedUntil = take("alertOverrideStartSnoozedTime", nil as Date?)
+        }
+
+        alarm.soundFile = SoundFile(
+            rawValue: take("alertOverrideStartSound", "Ending_Reached")
+        ) ?? .endingReached
+
+        // ── ACTIVE (legacy “Pre-Snooze” day/night flags) ──────────────
+        let actDay = take("alertOverrideStartAutosnoozeDay", false)
+        let actNight = take("alertOverrideStartAutosnoozeNight", false)
+        alarm.activeOption = {
+            switch (actDay, actNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .always
+            }
+        }()
+
+        // ── PLAY (legacy “Play Sound” day/night flags) ───────────────
+        let playDay = take("alertOverrideStartDayTimeAudible", true)
+        let playNight = take("alertOverrideStartNightTimeAudible", true)
+        alarm.playSoundOption = {
+            switch (playDay, playNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .never
+            }
+        }()
+
+        // ── REPEAT (legacy “Repeat Sound” day/night flags) ───────────
+        let repDay = take("alertOverrideStartDayTime", false)
+        let repNight = take("alertOverrideStartNightTime", false)
+        alarm.repeatSoundOption = {
+            switch (repDay, repNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .never
+            }
+        }()
+
+        // ignore & wipe unused keys
+        _ = take("alertOverrideStartQuiet", false as Bool)
+        _ = take("alertOverrideStartRepeatAudible", "Always" as String)
+
+        var list = Storage.shared.alarms.value
+        list.append(alarm)
+        Storage.shared.alarms.value = list
+    }
+
+    // ─────────────────────────────────────────────────────────────────────────────
+
+    //  MARK: Override-End  →  .overrideEnd
+
+    // ─────────────────────────────────────────────────────────────────────────────
+    private func migrateOverrideEndAlarm() {
+        let exists = UserDefaultsValue<Bool>(key: "alertOverrideEnd", default: false)
+        guard exists.exists else { return }
+
+        func take<V: AnyConvertible & Equatable>(_ k: String, _ def: V) -> V {
+            let box = UserDefaultsValue<V>(key: k, default: def)
+            defer { box.setNil(key: k) }
+            return box.value
+        }
+
+        var alarm = Alarm(type: .overrideEnd)
+        alarm.name = "Override Ended"
+        alarm.disableAfterFiring = true
+
+        alarm.isEnabled = take("alertOverrideEnd", false)
+        alarm.snoozeDuration = 5
+        if take("alertOverrideEndIsSnoozed", false) {
+            alarm.snoozedUntil = take("alertOverrideEndSnoozedTime", nil as Date?)
+        }
+
+        alarm.soundFile = SoundFile(
+            rawValue: take("alertOverrideEndSound", "Alert_Tone_Busy")
+        ) ?? .alertToneBusy
+
+        // ACTIVE
+        let actDay = take("alertOverrideEndAutosnoozeDay", false)
+        let actNight = take("alertOverrideEndAutosnoozeNight", false)
+        alarm.activeOption = {
+            switch (actDay, actNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .always
+            }
+        }()
+
+        // PLAY
+        let playDay = take("alertOverrideEndDayTimeAudible", true)
+        let playNight = take("alertOverrideEndNightTimeAudible", true)
+        alarm.playSoundOption = {
+            switch (playDay, playNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .never
+            }
+        }()
+
+        // REPEAT
+        let repDay = take("alertOverrideEndDayTime", false)
+        let repNight = take("alertOverrideEndNightTime", false)
+        alarm.repeatSoundOption = {
+            switch (repDay, repNight) {
+            case (true, true): return .always
+            case (true, false): return .day
+            case (false, true): return .night
+            default: return .never
+            }
+        }()
+
+        // wipe unused keys
+        _ = take("alertOverrideEndQuiet", false as Bool)
+        _ = take("alertOverrideEndRepeatAudible", "Always" as String)
+
+        var list = Storage.shared.alarms.value
+        list.append(alarm)
+        Storage.shared.alarms.value = list
+    }
 }

+ 0 - 30
LoopFollow/Storage/UserDefaults.swift

@@ -106,36 +106,6 @@ class UserDefaultsRepository {
     static let alertTemporaryBGAudible = UserDefaultsValue<Bool>(key: "alertTemporaryBGRepeatAudible", default: true)
     static let alertTemporarySound = UserDefaultsValue<String>(key: "alertTemporarySound", default: "Indeed")
 
-    static let alertOverrideStart = UserDefaultsValue<Bool>(key: "alertOverrideStart", default: false)
-    static let alertOverrideStartQuiet = UserDefaultsValue<Bool>(key: "alertOverrideStartQuiet", default: false)
-    static let alertOverrideStartRepeat = UserDefaultsValue<String>(key: "alertOverrideStartRepeat", default: "Never")
-    static let alertOverrideStartDayTime = UserDefaultsValue<Bool>(key: "alertOverrideStartDayTime", default: false)
-    static let alertOverrideStartNightTime = UserDefaultsValue<Bool>(key: "alertOverrideStartNightTime", default: false)
-    static let alertOverrideStartAudible = UserDefaultsValue<String>(key: "alertOverrideStartRepeatAudible", default: "Always")
-    static let alertOverrideStartDayTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideStartDayTimeAudible", default: true)
-    static let alertOverrideStartNightTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideStartNightTimeAudible", default: true)
-    static let alertOverrideStartSound = UserDefaultsValue<String>(key: "alertOverrideStartSound", default: "Ending_Reached")
-    static let alertOverrideStartSnoozedTime = UserDefaultsValue<Date?>(key: "alertOverrideStartSnoozedTime", default: nil)
-    static let alertOverrideStartIsSnoozed = UserDefaultsValue<Bool>(key: "alertOverrideStartIsSnoozed", default: false)
-    static let alertOverrideStartAutosnooze = UserDefaultsValue<String>(key: "alertOverrideStartAutosnooze", default: "Never")
-    static let alertOverrideStartAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertOverrideStartAutosnoozeDay", default: false)
-    static let alertOverrideStartAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertOverrideStartAutosnoozeNight", default: false)
-
-    static let alertOverrideEnd = UserDefaultsValue<Bool>(key: "alertOverrideEnd", default: false)
-    static let alertOverrideEndQuiet = UserDefaultsValue<Bool>(key: "alertOverrideEndQuiet", default: false)
-    static let alertOverrideEndRepeat = UserDefaultsValue<String>(key: "alertOverrideEndRepeat", default: "Never")
-    static let alertOverrideEndDayTime = UserDefaultsValue<Bool>(key: "alertOverrideEndDayTime", default: false)
-    static let alertOverrideEndNightTime = UserDefaultsValue<Bool>(key: "alertOverrideEndNightTime", default: false)
-    static let alertOverrideEndAudible = UserDefaultsValue<String>(key: "alertOverrideEndRepeatAudible", default: "Always")
-    static let alertOverrideEndDayTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideEndDayTimeAudible", default: true)
-    static let alertOverrideEndNightTimeAudible = UserDefaultsValue<Bool>(key: "alertOverrideEndNightTimeAudible", default: true)
-    static let alertOverrideEndSound = UserDefaultsValue<String>(key: "alertOverrideEndSound", default: "Alert_Tone_Busy")
-    static let alertOverrideEndSnoozedTime = UserDefaultsValue<Date?>(key: "alertOverrideEndSnoozedTime", default: nil)
-    static let alertOverrideEndIsSnoozed = UserDefaultsValue<Bool>(key: "alertOverrideEndIsSnoozed", default: false)
-    static let alertOverrideEndAutosnooze = UserDefaultsValue<String>(key: "alertOverrideEndAutosnooze", default: "Never")
-    static let alertOverrideEndAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertOverrideEndAutosnoozeDay", default: false)
-    static let alertOverrideEndAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertOverrideEndAutosnoozeNight", default: false)
-
     static let alertTempTargetStart = UserDefaultsValue<Bool>(key: "alertTempTargetStart", default: false)
     static let alertTempTargetStartQuiet = UserDefaultsValue<Bool>(key: "alertTempTargetStartQuiet", default: false)
     static let alertTempTargetStartRepeat = UserDefaultsValue<String>(key: "alertTempTargetStartRepeat", default: "Never")