Jonas Björkert 1 年間 前
コミット
6a86806948

+ 8 - 10
LoopFollow/Alarm/AlarmManager.swift

@@ -78,17 +78,15 @@ class AlarmManager {
         }
     }
 
-    //TODO: Handle default snooze for notofication snoze
-    //TODO: Check interval type handling
-    func performSnooze(_ minutes: Int? = nil) {
-        if let alarmID = Observable.shared.currentAlarm.value {
-            var alarms = Storage.shared.alarms.value
-            if let idx = alarms.firstIndex(where: { $0.id == alarmID }) {
-                alarms[idx].snoozedUntil = Date().addingTimeInterval(
-                    TimeInterval((minutes ?? 5) * 60)) // fix default value
-            }
+    func performSnooze(_ snoozeUnits: Int? = nil) {
+        guard let alarmID = Observable.shared.currentAlarm.value else { return }
+        var alarms = Storage.shared.alarms.value
+        if let idx = alarms.firstIndex(where: { $0.id == alarmID }) {
+            let alarm = alarms[idx]
+            let units = snoozeUnits ?? alarm.snoozeDuration
+            let snoozeSeconds = Double(units) * alarm.type.timeUnit.seconds
+            alarms[idx].snoozedUntil = Date().addingTimeInterval(snoozeSeconds)
             Storage.shared.alarms.value = alarms
-
             AlarmSound.stop()
             Observable.shared.currentAlarm.value = nil
         }

+ 2 - 3
LoopFollow/Snoozer/SnoozerView.swift

@@ -100,12 +100,11 @@ struct SnoozerView: View {
                         VStack(alignment: .leading, spacing: 4) {
                             Text("Snooze for")
                                 .font(.headline)
-                            Text("\(vm.snoozeMins) \(vm.timeUnitLabel)")
+                            Text("\(vm.snoozeUnits) \(vm.timeUnitLabel)")
                                 .font(.title3).bold()
                         }
                         Spacer()
-                        // stepper or wheel picker style for days/hours/minutes
-                        Stepper("", value: $vm.snoozeMins,
+                        Stepper("", value: $vm.snoozeUnits,
                                 in: 1...(alarm.type.timeUnit == .day ? 30 :
                                             alarm.type.timeUnit == .hour ? 24 : 60),
                                 step: alarm.type.timeUnit == .minute ? 5 : 1)

+ 3 - 6
LoopFollow/Snoozer/SnoozerViewModel.swift

@@ -11,7 +11,7 @@ import Combine
 
 final class SnoozerViewModel: ObservableObject {
     @Published var activeAlarm: Alarm?
-    @Published var snoozeMins: Int = 5
+    @Published var snoozeUnits: Int = 5
     @Published var timeUnitLabel: String = "minutes"
 
     private var cancellables = Set<AnyCancellable>()
@@ -26,7 +26,7 @@ final class SnoozerViewModel: ObservableObject {
             .sink { [weak self] alarm in
                 self?.activeAlarm = alarm
                 if let a = alarm {
-                    self?.snoozeMins = a.snoozeDuration
+                    self?.snoozeUnits = a.snoozeDuration
                     self?.timeUnitLabel = a.type.timeUnit.label
                 }
             }
@@ -34,9 +34,6 @@ final class SnoozerViewModel: ObservableObject {
     }
 
     func snoozeTapped() {
-        guard let alarm = activeAlarm else { return }
-        AlarmManager.shared.performSnooze(
-            snoozeMins * Int(alarm.type.timeUnit.seconds) / 60
-        )
+        AlarmManager.shared.performSnooze(snoozeUnits)
     }
 }