summaryrefslogtreecommitdiff
path: root/Shared
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-12 00:55:42 -0500
committerChristian Cleberg <[email protected]>2026-04-12 00:55:42 -0500
commit9050405b4f33b2b9b70458fcf3e43b80c940eef7 (patch)
tree983c3a07a560258059cfe421beb3ffcf3c18baf4 /Shared
parent5f6d545eb3455a9e4da5a3cb4460811e3a48d939 (diff)
downloadhutch-9050405b4f33b2b9b70458fcf3e43b80c940eef7.tar.gz
hutch-9050405b4f33b2b9b70458fcf3e43b80c940eef7.tar.bz2
hutch-9050405b4f33b2b9b70458fcf3e43b80c940eef7.zip
add shortcuts widgets and power-user workflowsv2.15.0
Diffstat (limited to 'Shared')
-rw-r--r--Shared/SystemStatusWidgetSnapshot.swift67
1 files changed, 67 insertions, 0 deletions
diff --git a/Shared/SystemStatusWidgetSnapshot.swift b/Shared/SystemStatusWidgetSnapshot.swift
new file mode 100644
index 0000000..8489547
--- /dev/null
+++ b/Shared/SystemStatusWidgetSnapshot.swift
@@ -0,0 +1,67 @@
+import Foundation
+#if canImport(WidgetKit)
+import WidgetKit
+#endif
+
+enum SystemStatusWidgetConfiguration {
+ static let kind = "SystemStatusWidget"
+}
+
+struct SystemStatusWidgetSnapshot: Codable, Sendable {
+ let services: [ServiceEntry]
+ let hasDisruption: Bool
+ let overallStatusText: String
+ let bannerSummary: String
+ let updatedAt: Date
+
+ struct ServiceEntry: Codable, Sendable, Identifiable {
+ let id: String
+ let name: String
+ let status: String
+ let requiresAttention: Bool
+ }
+
+ static let unavailable = SystemStatusWidgetSnapshot(
+ services: [],
+ hasDisruption: false,
+ overallStatusText: "Unavailable",
+ bannerSummary: "",
+ updatedAt: .now
+ )
+}
+
+enum SystemStatusWidgetSnapshotStore {
+ private static let snapshotKey = "systemStatus.widgetSnapshot"
+
+ static func load(defaults: UserDefaults? = sharedDefaults()) -> SystemStatusWidgetSnapshot? {
+ guard let defaults,
+ let data = defaults.data(forKey: snapshotKey) else {
+ return nil
+ }
+ return try? JSONDecoder().decode(SystemStatusWidgetSnapshot.self, from: data)
+ }
+
+ static func save(_ snapshot: SystemStatusWidgetSnapshot, defaults: UserDefaults? = sharedDefaults()) {
+ guard let defaults,
+ let data = try? JSONEncoder().encode(snapshot) else {
+ return
+ }
+ defaults.set(data, forKey: snapshotKey)
+ reloadWidgetTimelines()
+ }
+
+ static func clear(defaults: UserDefaults? = sharedDefaults()) {
+ defaults?.removeObject(forKey: snapshotKey)
+ reloadWidgetTimelines()
+ }
+
+ private static func sharedDefaults() -> UserDefaults? {
+ UserDefaults(suiteName: HutchAppGroup.identifier)
+ }
+
+ private static func reloadWidgetTimelines() {
+ #if canImport(WidgetKit)
+ WidgetCenter.shared.reloadTimelines(ofKind: SystemStatusWidgetConfiguration.kind)
+ #endif
+ }
+}