فهرست منبع

drop and rise migration

Jonas Björkert 1 سال پیش
والد
کامیت
e52bef49df
2فایلهای تغییر یافته به همراه112 افزوده شده و 37 حذف شده
  1. 112 0
      LoopFollow/Storage/Storage+Migrate.swift
  2. 0 37
      LoopFollow/Storage/UserDefaults.swift

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

@@ -510,4 +510,116 @@ extension Storage {
         // ───────── Persist in new storage ─────────────────────────────────────
         Storage.shared.alarms.value.append(alarm)
     }
+
+    // MARK: - Fast-Drop alarm ----------------------------------------------------
+    private func migrateFastDropAlarm() {
+
+        guard UserDefaultsValue<Bool>(key: "alertFastDropDeltaActive",
+                                      default: false).exists else { return }
+
+        // helper: read-then-erase
+        func take<V: AnyConvertible & Equatable>(_ k: String, default d: V) -> V {
+            let box = UserDefaultsValue<V>(key: k, default: d)
+            defer { box.setNil(key: k) }
+            return box.value
+        }
+
+        var alarm = Alarm(type: .fastDrop)
+        alarm.name           = "Fast Drop"
+        alarm.isEnabled      = take("alertFastDropDeltaActive", default: false)
+
+        // core trigger parameters
+        alarm.delta          = Double(take("alertFastDropDelta", default: 10.0))
+        alarm.monitoringWindow = take("alertFastDropReadings", default: 3)   // store #readings
+        if take("alertFastDropUseLimit", default: false) {
+            alarm.belowBG    = Double(take("alertFastDropBelowBG", default: 120.0))
+        }
+
+        // snoozing
+        alarm.snoozeDuration = take("alertFastDropDeltaSnooze", default: 10)
+        alarm.snoozedUntil   = take("alertFastDropSnoozedTime", default: nil as Date?)
+
+        // sound + options
+        alarm.soundFile      = SoundFile(
+            rawValue: take("alertFastDropSound", default: "Big_Clock_Ticking")
+        ) ?? .bigClockTicking
+
+        alarm.playSoundOption = PlaySoundOption(
+            rawValue: take("alertFastDropAudible", default: "Always").lowercased()
+        ) ?? .always
+
+        alarm.repeatSoundOption = RepeatSoundOption(
+            rawValue: take("alertFastDropRepeat", default: "Never").lowercased()
+        ) ?? .never
+
+        // activeOption from old “Pre-Snooze” picker + day/night flags
+        let autoStr   = take("alertFastDropAutosnooze",      default: "Never").lowercased()
+        let dayFlag   = take("alertFastDropAutosnoozeDay",   default: false)
+        let nightFlag = take("alertFastDropAutosnoozeNight", 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
+            }
+        }()
+
+        Storage.shared.alarms.value.append(alarm)
+    }
+
+    // MARK: - Fast-Rise alarm ----------------------------------------------------
+    private func migrateFastRiseAlarm() {
+
+        guard UserDefaultsValue<Bool>(key: "alertFastRiseDeltaActive",
+                                      default: false).exists else { return }
+
+        func take<V: AnyConvertible & Equatable>(_ k: String, default d: V) -> V {
+            let box = UserDefaultsValue<V>(key: k, default: d)
+            defer { box.setNil(key: k) }
+            return box.value
+        }
+
+        var alarm = Alarm(type: .fastRise)
+        alarm.name           = "Fast Rise"
+        alarm.isEnabled      = take("alertFastRiseDeltaActive", default: false)
+
+        alarm.delta          = Double(take("alertFastRiseDelta", default: 10.0))
+        alarm.monitoringWindow = take("alertFastRiseReadings", default: 3)
+        if take("alertFastRiseUseLimit", default: false) {
+            alarm.aboveBG    = Double(take("alertFastRiseAboveBG", default: 200.0))
+        }
+
+        alarm.snoozeDuration = take("alertFastRiseDeltaSnooze", default: 10)
+        alarm.snoozedUntil   = take("alertFastRiseSnoozedTime", default: nil as Date?)
+
+        alarm.soundFile      = SoundFile(
+            rawValue: take("alertFastRiseSound",
+                           default: "Cartoon_Fail_Strings_Trumpet")
+        ) ?? .cartoonFailStringsTrumpet
+
+        alarm.playSoundOption = PlaySoundOption(
+            rawValue: take("alertFastRiseAudible", default: "Always").lowercased()
+        ) ?? .always
+
+        alarm.repeatSoundOption = RepeatSoundOption(
+            rawValue: take("alertFastRiseRepeat", default: "Never").lowercased()
+        ) ?? .never
+
+        let autoStr   = take("alertFastRiseAutosnooze",      default: "Never").lowercased()
+        let dayFlag   = take("alertFastRiseAutosnoozeDay",   default: false)
+        let nightFlag = take("alertFastRiseAutosnoozeNight", 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
+            }
+        }()
+
+        Storage.shared.alarms.value.append(alarm)
+    }
 }

+ 0 - 37
LoopFollow/Storage/UserDefaults.swift

@@ -97,43 +97,6 @@ class UserDefaultsRepository {
     static let alertCageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertCageInsertTime", default: 0)
     static let alertSageInsertTime = UserDefaultsValue<TimeInterval>(key: "alertSageInsertTime", default: 0)
 
-    static let alertFastDropActive = UserDefaultsValue<Bool>(key: "alertFastDropDeltaActive", default: false)
-    static let alertFastDropSnooze = UserDefaultsValue<Int>(key: "alertFastDropDeltaSnooze", default: 10)
-    static let alertFastDropDelta = UserDefaultsValue<Float>(key: "alertFastDropDelta", default: 10.0)
-    static let alertFastDropReadings = UserDefaultsValue<Int>(key: "alertFastDropReadings", default: 3)
-    static let alertFastDropUseLimit = UserDefaultsValue<Bool>(key: "alertFastDropUseLimit", default: false)
-    static let alertFastDropBelowBG = UserDefaultsValue<Float>(key: "alertFastDropBelowBG", default: 120.0)
-    static let alertFastDropSnoozedTime = UserDefaultsValue<Date?>(key: "alertFastDropSnoozedTime", default: nil)
-    static let alertFastDropIsSnoozed = UserDefaultsValue<Bool>(key: "alertFastDropIsSnoozed", default: false)
-    static let alertFastDropRepeat = UserDefaultsValue<String>(key: "alertFastDropRepeat", default: "Never")
-    static let alertFastDropDayTime = UserDefaultsValue<Bool>(key: "alertFastDropDayTime", default: false)
-    static let alertFastDropNightTime = UserDefaultsValue<Bool>(key: "alertFastDropNightTime", default: false)
-    static let alertFastDropSound = UserDefaultsValue<String>(key: "alertFastDropSound", default: "Big_Clock_Ticking")
-    static let alertFastDropAudible = UserDefaultsValue<String>(key: "alertFastDropAudible", default: "Always")
-    static let alertFastDropDayTimeAudible = UserDefaultsValue<Bool>(key: "alertFastDropDayTimeAudible", default: true)
-    static let alertFastDropNightTimeAudible = UserDefaultsValue<Bool>(key: "alertFastDropNightTimeAudible", default: true)
-    static let alertFastDropAutosnooze = UserDefaultsValue<String>(key: "alertFastDropAutosnooze", default: "Never")
-    static let alertFastDropAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertFastDropAutosnoozeDay", default: false)
-    static let alertFastDropAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertFastDropAutosnoozeNight", default: false)
-
-    static let alertFastRiseActive = UserDefaultsValue<Bool>(key: "alertFastRiseDeltaActive", default: false)
-    static let alertFastRiseSnooze = UserDefaultsValue<Int>(key: "alertFastRiseDeltaSnooze", default: 10)
-    static let alertFastRiseDelta = UserDefaultsValue<Float>(key: "alertFastRiseDelta", default: 10.0)
-    static let alertFastRiseReadings = UserDefaultsValue<Int>(key: "alertFastRiseReadings", default: 3)
-    static let alertFastRiseUseLimit = UserDefaultsValue<Bool>(key: "alertFastRiseUseLimit", default: false)
-    static let alertFastRiseAboveBG = UserDefaultsValue<Float>(key: "alertFastRiseAboveBG", default: 200.0)
-    static let alertFastRiseSnoozedTime = UserDefaultsValue<Date?>(key: "alertFastRiseSnoozedTime", default: nil)
-    static let alertFastRiseIsSnoozed = UserDefaultsValue<Bool>(key: "alertFastRiseIsSnoozed", default: false)
-    static let alertFastRiseRepeat = UserDefaultsValue<String>(key: "alertFastRiseRepeat", default: "Never")
-    static let alertFastRiseDayTime = UserDefaultsValue<Bool>(key: "alertFastRiseDayTime", default: false)
-    static let alertFastRiseNightTime = UserDefaultsValue<Bool>(key: "alertFastRiseNightTime", default: false)
-    static let alertFastRiseSound = UserDefaultsValue<String>(key: "alertFastRiseSound", default: "Cartoon_Fail_Strings_Trumpet")
-    static let alertFastRiseAudible = UserDefaultsValue<String>(key: "alertFastRiseAudible", default: "Always")
-    static let alertFastRiseDayTimeAudible = UserDefaultsValue<Bool>(key: "alertFastRiseDayTimeAudible", default: true)
-    static let alertFastRiseNightTimeAudible = UserDefaultsValue<Bool>(key: "alertFastRiseNightTimeAudible", default: true)
-    static let alertFastRiseAutosnooze = UserDefaultsValue<String>(key: "alertFastRiseAutosnooze", default: "Never")
-    static let alertFastRiseAutosnoozeDay = UserDefaultsValue<Bool>(key: "alertFastRiseAutosnoozeDay", default: false)
-    static let alertFastRiseAutosnoozeNight = UserDefaultsValue<Bool>(key: "alertFastRiseAutosnoozeNight", default: false)
 
     static let alertMissedReadingActive = UserDefaultsValue<Bool>(key: "alertMissedReadingActive", default: false)
     static let alertMissedReading = UserDefaultsValue<Int>(key: "alertMissedReading", default: 31)