44 lines
1.7 KiB
Swift
44 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
// MARK: - Timer state persistence across relaunches
|
|
|
|
enum TimerPersistence {
|
|
private static let keyRemaining = "pommedoro.persistedRemainingSeconds"
|
|
private static let keyPaused = "pommedoro.persistedIsPaused"
|
|
private static let keyIntervalStart = "pommedoro.persistedIntervalStart"
|
|
|
|
private static let defaults = UserDefaults.standard
|
|
|
|
/// Save work timer state. Call on terminate. Only saves when remainingSeconds > 0.
|
|
static func save(remainingSeconds: Int, isPaused: Bool, intervalStartDate: Date?) {
|
|
guard remainingSeconds > 0 else {
|
|
clear()
|
|
return
|
|
}
|
|
defaults.set(remainingSeconds, forKey: keyRemaining)
|
|
defaults.set(isPaused, forKey: keyPaused)
|
|
defaults.set(intervalStartDate?.timeIntervalSince1970, forKey: keyIntervalStart)
|
|
}
|
|
|
|
/// Restore saved state. Returns nil if nothing valid saved (e.g. timer had finished).
|
|
static func restore() -> (remainingSeconds: Int, isPaused: Bool, intervalStartDate: Date?)? {
|
|
let remaining = defaults.integer(forKey: keyRemaining)
|
|
guard remaining > 0 else {
|
|
clear()
|
|
return nil
|
|
}
|
|
let paused = defaults.bool(forKey: keyPaused)
|
|
let start: Date? = {
|
|
let t = defaults.double(forKey: keyIntervalStart)
|
|
return t > 0 ? Date(timeIntervalSince1970: t) : nil
|
|
}()
|
|
return (remainingSeconds: remaining, isPaused: paused, intervalStartDate: start)
|
|
}
|
|
|
|
static func clear() {
|
|
defaults.removeObject(forKey: keyRemaining)
|
|
defaults.removeObject(forKey: keyPaused)
|
|
defaults.removeObject(forKey: keyIntervalStart)
|
|
}
|
|
}
|