-
Notifications
You must be signed in to change notification settings - Fork 1
/
Preferences.swift
29 lines (22 loc) · 756 Bytes
/
Preferences.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import Foundation
actor PreferencesManager {
static var shared = try! PreferencesManager()
private init() throws {
manager = try DataFileManager<Value>(fileURL: PreferencesDataURL, fallback: Value())
}
private let manager: DataFileManager<Value>
struct Value: Codable {
var lastRefresh: Date?
var updatePeriod: TimeInterval = 60 * 60 * 24 // 1 day in seconds
}
func needsRefresh(now: Date = Date()) async -> Bool {
guard let lastRefresh = await manager.current.lastRefresh else {
return true
}
let updatePeriod = await manager.current.updatePeriod
return (lastRefresh + updatePeriod) <= now
}
func markRefreshed(now: Date = Date()) async {
await manager.update { $0.lastRefresh = now }
}
}