Browse Source

Migrate low

Jonas Björkert 1 year ago
parent
commit
5f1dc05b0d
2 changed files with 61 additions and 18 deletions
  1. 61 0
      LoopFollow/Storage/Storage+Migrate.swift
  2. 0 18
      LoopFollow/Storage/UserDefaults.swift

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

@@ -284,6 +284,7 @@ extension Storage {
         }
         }
 
 
         migrateUrgentLowAlarm()
         migrateUrgentLowAlarm()
+        migrateLowAlarm()
     }
     }
 
 
     // MARK: - One-off alarm migrations
     // MARK: - One-off alarm migrations
@@ -340,4 +341,64 @@ extension Storage {
         // Persist -----------------------------------------------------------------
         // Persist -----------------------------------------------------------------
         Storage.shared.alarms.value.append(alarm)
         Storage.shared.alarms.value.append(alarm)
     }
     }
+
+    // MARK: - Low-BG alarm -------------------------------------------------------
+
+    private func migrateLowAlarm() {
+        // Bail if the old keys were never written
+        guard UserDefaultsValue<Bool>(key: "alertLowActive", default: false).exists else { return }
+
+        // tiny helper: fetch value → erase key
+        func take<V: AnyConvertible & Equatable>(_ key: String, default def: V) -> V {
+            let box = UserDefaultsValue<V>(key: key, default: def)
+            defer { box.setNil(key: key) }
+            return box.value
+        }
+
+        // Build the new Alarm ----------------------------------------------------
+        var alarm = Alarm(type: .low)
+        alarm.name = "Low"
+        alarm.isEnabled = take("alertLowActive", default: false)
+        alarm.belowBG = Double(take("alertLowBG", default: 70.0))
+
+        // “Persistent ≥ X min”  → `persistentMinutes`
+        alarm.persistentMinutes = take("alertLowPersistent", default: 0)
+
+        // “Persistence max BG drop” -- ignoring this for now
+        // let persistentLowTriggerImmediatelyBG = UserDefaultsRepository.alertLowBG.value - UserDefaultsRepository.alertLowPersistenceMax.value
+        // (Float(persistentLowBG) <= UserDefaultsRepository.alertLowBG.value || Float(currentBG) <= persistentLowTriggerImmediatelyBG)
+        _ = Double(take("alertLowPersistenceMax", default: 5.0))
+
+        alarm.snoozeDuration = take("alertLowSnooze", default: 5)
+        alarm.snoozedUntil = take("alertLowSnoozedTime", default: nil as Date?)
+        alarm.soundFile = SoundFile(
+            rawValue: take("alertLowSound",
+                           default: "Indeed")) ?? .indeed
+
+        alarm.playSoundOption = PlaySoundOption(
+            rawValue: take("alertLowAudible",
+                           default: "Always").lowercased()) ?? .always
+
+        alarm.repeatSoundOption = RepeatSoundOption(
+            rawValue: take("alertLowRepeat",
+                           default: "Always").lowercased()) ?? .always
+
+        // activeOption  ← legacy “Pre-Snooze” flags / picker
+        let autoStr = take("alertLowAutosnooze", default: "Never").lowercased()
+        let dayFlag = take("alertLowAutosnoozeDay", default: false)
+        let nightFlag = take("alertLowAutosnoozeNight", default: false)
+
+        alarm.activeOption = {
+            if dayFlag, !nightFlag { return .day }
+            if !dayFlag, nightFlag { return .night }
+            switch autoStr {
+            case "day", "at day": return .day
+            case "night", "at night": return .night
+            default: return .always
+            }
+        }()
+
+        // Done → append to the modern store
+        Storage.shared.alarms.value.append(alarm)
+    }
 }
 }

+ 0 - 18
LoopFollow/Storage/UserDefaults.swift

@@ -97,24 +97,6 @@ class UserDefaultsRepository {
     static let alertCageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertCageInsertTime", default: 0)
     static let alertCageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertCageInsertTime", default: 0)
     static let alertSageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertSageInsertTime", default: 0)
     static let alertSageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertSageInsertTime", default: 0)
 
 
-    static let alertLowActive = UserDefaultsValue<Bool>(key: "alertLowActive", default: false)
-    static let alertLowBG = UserDefaultsValue<Float>(key: "alertLowBG", default: 70.0)
-    static let alertLowPersistent = UserDefaultsValue<Int>(key: "alertLowPersistent", default: 0)
-    static let alertLowPersistenceMax = UserDefaultsValue<Float>(key: "alertLowPersistenceMax", default: 5.0)
-    static let alertLowSnooze = UserDefaultsValue<Int>(key: "alertLowSnooze", default: 5)
-    static let alertLowSnoozedTime = UserDefaultsValue<Date?>(key: "alertLowSnoozedTime", default: nil)
-    static let alertLowIsSnoozed = UserDefaultsValue<Bool>(key: "alertLowIsSnoozed", default: false)
-    static let alertLowRepeat = UserDefaultsValue<String>(key: "alertLowRepeat", default: "Always")
-    static let alertLowDayTime = UserDefaultsValue<Bool>(key: "alertLowDayTime", default: true)
-    static let alertLowNightTime = UserDefaultsValue<Bool>(key: "alertLowNightTime", default: true)
-    static let alertLowSound = UserDefaultsValue<String>(key: "alertLowSound", default: "Indeed")
-    static let alertLowAudible = UserDefaultsValue<String>(key: "alertLowAudible", default: "Always")
-    static let alertLowDayTimeAudible = UserDefaultsValue<Bool>(key: "alertLowDayTimeAudible", default: true)
-    static let alertLowNightTimeAudible = UserDefaultsValue<Bool>(key: "alertLowNightTimeAudible", default: true)
-    static let alertLowAutosnooze = UserDefaultsValue<String>(key: "alertLowAutosnooze", default: "Never")
-    static let alertLowAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertLowAutosnoozeDay", default: false)
-    static let alertLowAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertLowAutosnoozeNight", default: false)
-
     static let alertHighActive = UserDefaultsValue<Bool>(key: "alertHighActive", default: false)
     static let alertHighActive = UserDefaultsValue<Bool>(key: "alertHighActive", default: false)
     static let alertHighBG = UserDefaultsValue<Float>(key: "alertHighBG", default: 180.0)
     static let alertHighBG = UserDefaultsValue<Float>(key: "alertHighBG", default: 180.0)
     static let alertHighPersistent = UserDefaultsValue<Int>(key: "alertHighPersistent", default: 60)
     static let alertHighPersistent = UserDefaultsValue<Int>(key: "alertHighPersistent", default: 60)