krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v2.14.0: Shared/ContributionWidgetContext.swift · raw
1import Foundation
2#if canImport(WidgetKit)
3import WidgetKit
4#endif
5
6enum ContributionGraphWidgetConfiguration {
7 static let kind = "ContributionGraphWidget"
8}
9
10enum ContributionWidgetContextStore {
11 private static let actorKey = "contributionWidget.actor"
12 private static let enabledKey = "contributionWidget.enabled"
13
14 static func loadActor(defaults: UserDefaults? = sharedDefaults()) -> String? {
15 defaults?.string(forKey: actorKey)
16 }
17
18 static func isEnabled(defaults: UserDefaults? = sharedDefaults()) -> Bool {
19 defaults?.object(forKey: enabledKey) == nil ? true : defaults?.bool(forKey: enabledKey) ?? true
20 }
21
22 static func setEnabled(_ enabled: Bool, defaults: UserDefaults? = sharedDefaults()) {
23 defaults?.set(enabled, forKey: enabledKey)
24 reloadWidgetTimelines()
25 }
26
27 static func saveActor(_ actor: String, defaults: UserDefaults? = sharedDefaults()) {
28 defaults?.set(actor, forKey: actorKey)
29 reloadWidgetTimelines()
30 }
31
32 static func clear(defaults: UserDefaults? = sharedDefaults()) {
33 defaults?.removeObject(forKey: actorKey)
34 reloadWidgetTimelines()
35 }
36
37 private static func sharedDefaults() -> UserDefaults? {
38 UserDefaults(suiteName: HutchAppGroup.identifier)
39 }
40
41 private static func reloadWidgetTimelines() {
42 #if canImport(WidgetKit)
43 WidgetCenter.shared.reloadTimelines(ofKind: ContributionGraphWidgetConfiguration.kind)
44 #endif
45 }
46}