-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWidgetSnapshotPreferenceStoreImpl.swift
More file actions
69 lines (57 loc) · 2.39 KB
/
Copy pathWidgetSnapshotPreferenceStoreImpl.swift
File metadata and controls
69 lines (57 loc) · 2.39 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
// WidgetSnapshotPreferenceStoreImpl.swift
// DevLogWidget
//
// Created by opfic on 4/30/26.
//
import Foundation
import DevLogCore
import DevLogData
final class WidgetSnapshotPreferenceStoreImpl: WidgetSnapshotPreferenceStore {
private enum Key: String, CaseIterable {
case heatmapActivityTypes = "Profile.heatmap.activityTypes"
case todayDueDateVisibility = "Today.dueDateVisibility"
case todayFocusVisibility = "Today.focusVisibility"
}
private let userDefaults: UserDefaults
init(userDefaults: UserDefaults = .standard) {
self.userDefaults = userDefaults
}
func heatmapActivityTypes() -> [String] {
userDefaults.stringArray(forKey: Key.heatmapActivityTypes.rawValue) ?? []
}
func setHeatmapActivityTypes(_ activityTypes: [String]) {
userDefaults.set(activityTypes, forKey: Key.heatmapActivityTypes.rawValue)
}
func selectedActivityKinds() -> Set<ActivityKind> {
let selectedActivityKinds = Set(
heatmapActivityTypes().compactMap(ActivityKind.init(rawValue:))
)
let selectableActivityKinds: [ActivityKind] = [.created, .completed, .deleted]
let normalizedActivityKinds = Set(
selectableActivityKinds.filter { selectedActivityKinds.contains($0) }
)
return normalizedActivityKinds.isEmpty ? Set(selectableActivityKinds) : normalizedActivityKinds
}
func todayDisplayOptions() -> TodayDisplayOptions {
let dueDateVisibilityRawValue = userDefaults.string(forKey: Key.todayDueDateVisibility.rawValue)
let focusVisibilityRawValue = userDefaults.string(forKey: Key.todayFocusVisibility.rawValue)
return TodayDisplayOptions(
dueDateVisibility: TodayDisplayOptions.DueDateVisibility(
rawValue: dueDateVisibilityRawValue ?? ""
) ?? .all,
focusVisibility: TodayDisplayOptions.FocusVisibility(
rawValue: focusVisibilityRawValue ?? ""
) ?? .all
)
}
func setTodayDisplayOptions(_ options: TodayDisplayOptions) {
userDefaults.set(options.dueDateVisibility.rawValue, forKey: Key.todayDueDateVisibility.rawValue)
userDefaults.set(options.focusVisibility.rawValue, forKey: Key.todayFocusVisibility.rawValue)
}
func clear() {
Key.allCases.forEach {
userDefaults.removeObject(forKey: $0.rawValue)
}
}
}