SnoozerViewModel.swift 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // LoopFollow
  2. // SnoozerViewModel.swift
  3. // Created by Jonas Björkert.
  4. import Combine
  5. import Foundation
  6. final class SnoozerViewModel: ObservableObject {
  7. @Published var activeAlarm: Alarm?
  8. @Published var snoozeUnits: Int = 5
  9. @Published var timeUnitLabel: String = "minutes"
  10. private var cancellables = Set<AnyCancellable>()
  11. init() {
  12. Observable.shared.currentAlarm.$value
  13. .map { id -> Alarm? in
  14. guard let id = id else { return nil }
  15. return Storage.shared.alarms.value.first { $0.id == id }
  16. }
  17. .receive(on: DispatchQueue.main)
  18. .sink { [weak self] alarm in
  19. self?.activeAlarm = alarm
  20. if let a = alarm {
  21. self?.snoozeUnits = a.snoozeDuration
  22. self?.timeUnitLabel = a.type.snoozeTimeUnit.label
  23. }
  24. }
  25. .store(in: &cancellables)
  26. if let alarm = activeAlarm {
  27. snoozeUnits = alarm.snoozeDuration
  28. }
  29. }
  30. func snoozeTapped() {
  31. AlarmManager.shared.performSnooze(snoozeUnits)
  32. }
  33. }