-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWidgetSnapshotUpdaterImpl.swift
More file actions
98 lines (89 loc) · 2.85 KB
/
Copy pathWidgetSnapshotUpdaterImpl.swift
File metadata and controls
98 lines (89 loc) · 2.85 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//
// WidgetSnapshotUpdaterImpl.swift
// DevLogWidget
//
// Created by opfic on 4/30/26.
//
import Foundation
import WidgetKit
import DevLogCore
import DevLogData
import DevLogWidgetCore
final class WidgetSnapshotUpdaterImpl: WidgetSnapshotUpdater {
private let snapshotStore: WidgetSnapshotStore
private let preferenceStore: WidgetSnapshotPreferenceStore
private let todayFactory: TodayWidgetSnapshotFactory
private let heatmapFactory: HeatmapWidgetSnapshotFactory
private let logger = Logger(category: "WidgetSnapshotUpdaterImpl")
init(
snapshotStore: WidgetSnapshotStore,
preferenceStore: WidgetSnapshotPreferenceStore,
todayFactory: TodayWidgetSnapshotFactory = .init(),
heatmapFactory: HeatmapWidgetSnapshotFactory = .init()
) {
self.snapshotStore = snapshotStore
self.preferenceStore = preferenceStore
self.todayFactory = todayFactory
self.heatmapFactory = heatmapFactory
}
func updateTodaySnapshot(
todos: [WidgetTodoSnapshot],
now: Date = Date()
) {
updateTodaySnapshot(
todos: todos,
displayOptions: preferenceStore.todayDisplayOptions(),
now: now
)
}
func updateTodaySnapshot(
todos: [WidgetTodoSnapshot],
displayOptions: TodayDisplayOptions,
now: Date = Date()
) {
let todayWidgetSnapshot = todayFactory.makeSnapshot(
todos: todos,
displayOptions: displayOptions,
now: now
)
do {
try snapshotStore.saveTodaySnapshot(todayWidgetSnapshot)
WidgetCenter.shared.reloadTimelines(ofKind: WidgetKind.todayTodo)
} catch {
logger.error(
"Failed to update today widget snapshot.",
error: error
)
}
}
func updateHeatmapSnapshot(
createdTodos: [WidgetTodoSnapshot],
completedTodos: [WidgetTodoSnapshot],
deletedTodos: [WidgetTodoSnapshot],
quarterStart: Date,
now: Date = Date()
) {
let heatmapWidgetSnapshot = heatmapFactory.makeSnapshot(
createdTodos: createdTodos,
completedTodos: completedTodos,
deletedTodos: deletedTodos,
selectedActivityKinds: preferenceStore.selectedActivityKinds(),
quarterStart: quarterStart,
now: now
)
do {
try snapshotStore.saveHeatmapSnapshot(heatmapWidgetSnapshot)
WidgetCenter.shared.reloadTimelines(ofKind: WidgetKind.heatmap)
} catch {
logger.error(
"Failed to update heatmap widget snapshot.",
error: error
)
}
}
func clear() {
snapshotStore.clearSnapshots()
preferenceStore.clear()
WidgetCenter.shared.reloadAllTimelines()
}
}