diff --git a/Kit/helpers.swift b/Kit/helpers.swift index b8419e0b..58da2f47 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -1820,3 +1820,14 @@ public class GPUStressTest { } } } + +public func isWidgetActive(_ defaults: UserDefaults?, _ widgets: [String]) -> Bool { + for name in widgets { + guard let lastUpdate = defaults?.double(forKey: name) else { return false } + let timeSinceUpdate = Date().timeIntervalSince1970 - lastUpdate + if timeSinceUpdate < 60 { + return true + } + } + return false +} diff --git a/Kit/module/module.swift b/Kit/module/module.swift index aeee71fd..a630ad90 100644 --- a/Kit/module/module.swift +++ b/Kit/module/module.swift @@ -73,18 +73,14 @@ open class Module { public var settings: Settings_p? = nil public let portal: Portal_p? - public var name: String { - config.name - } + public var name: String { config.name } public var combinedPosition: Int { get { Store.shared.int(key: "\(self.name)_position", defaultValue: 0) } set { Store.shared.set(key: "\(self.name)_position", value: newValue) } } public var userDefaults: UserDefaults? = UserDefaults(suiteName: "\(Bundle.main.object(forInfoDictionaryKey: "TeamId") as! String).eu.exelban.Stats.widgets") - public var popupKeyboardShortcut: [UInt16] { - return self.popupView?.keyboardShortcut ?? [] - } + public var popupKeyboardShortcut: [UInt16] { self.popupView?.keyboardShortcut ?? [] } private var moduleType: ModuleType @@ -97,12 +93,8 @@ open class Module { private var readers: [Reader_p] = [] private var pauseState: Bool { - get { - Store.shared.bool(key: "pause", defaultValue: false) - } - set { - Store.shared.set(key: "pause", value: newValue) - } + get { Store.shared.bool(key: "pause", defaultValue: false) } + set { Store.shared.set(key: "pause", value: newValue) } } public init(moduleType: ModuleType, popup: Popup_p? = nil, settings: Settings_v? = nil, portal: Portal_p? = nil, notifications: NotificationsWrapper? = nil) { diff --git a/Modules/CPU/main.swift b/Modules/CPU/main.swift index 3d13ef64..c95f160a 100644 --- a/Modules/CPU/main.swift +++ b/Modules/CPU/main.swift @@ -234,12 +234,11 @@ public class CPU: Module { } if #available(macOS 11.0, *) { - if #unavailable(macOS 26.0) { - guard let blobData = try? JSONEncoder().encode(value) else { return } + if isWidgetActive(self.userDefaults, [CPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { self.userDefaults?.set(blobData, forKey: "CPU@LoadReader") - WidgetCenter.shared.reloadTimelines(ofKind: CPU_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } + WidgetCenter.shared.reloadTimelines(ofKind: CPU_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/CPU/widget.swift b/Modules/CPU/widget.swift index 63a543f1..c913ddf3 100644 --- a/Modules/CPU/widget.swift +++ b/Modules/CPU/widget.swift @@ -39,8 +39,9 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: CPU_entry.kind) var entry = CPU_entry() - if let raw = userDefaults?.data(forKey: "CPU@LoadReader"), let load = try? JSONDecoder().decode(CPU_Load.self, from: raw) { + if let raw = self.userDefaults?.data(forKey: "CPU@LoadReader"), let load = try? JSONDecoder().decode(CPU_Load.self, from: raw) { entry.value = load } let entries: [CPU_entry] = [entry] diff --git a/Modules/Disk/main.swift b/Modules/Disk/main.swift index e8059a76..19ed8189 100644 --- a/Modules/Disk/main.swift +++ b/Modules/Disk/main.swift @@ -330,12 +330,11 @@ public class Disk: Module { } if #available(macOS 11.0, *) { - if #unavailable(macOS 26.0) { - guard let blobData = try? JSONEncoder().encode(d) else { return } + if isWidgetActive(self.userDefaults, [Disk_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(d) { self.userDefaults?.set(blobData, forKey: "Disk@CapacityReader") - WidgetCenter.shared.reloadTimelines(ofKind: Disk_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } + WidgetCenter.shared.reloadTimelines(ofKind: Disk_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } diff --git a/Modules/Disk/widget.swift b/Modules/Disk/widget.swift index 98d81946..123302a4 100644 --- a/Modules/Disk/widget.swift +++ b/Modules/Disk/widget.swift @@ -39,6 +39,7 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: Disk_entry.kind) var entry = Disk_entry() if let raw = userDefaults?.data(forKey: "Disk@CapacityReader"), let load = try? JSONDecoder().decode(drive.self, from: raw) { entry.value = load diff --git a/Modules/GPU/main.swift b/Modules/GPU/main.swift index e59f35ff..06df5e00 100644 --- a/Modules/GPU/main.swift +++ b/Modules/GPU/main.swift @@ -192,12 +192,11 @@ public class GPU: Module { } if #available(macOS 11.0, *) { - if #unavailable(macOS 26.0) { - guard let blobData = try? JSONEncoder().encode(selectedGPU) else { return } + if isWidgetActive(self.userDefaults, [GPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(selectedGPU) { self.userDefaults?.set(blobData, forKey: "GPU@InfoReader") - WidgetCenter.shared.reloadTimelines(ofKind: GPU_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } + WidgetCenter.shared.reloadTimelines(ofKind: GPU_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/GPU/widget.swift b/Modules/GPU/widget.swift index 2b2dc91f..e52a437f 100644 --- a/Modules/GPU/widget.swift +++ b/Modules/GPU/widget.swift @@ -39,6 +39,7 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: GPU_entry.kind) var entry = GPU_entry() if let raw = userDefaults?.data(forKey: "GPU@InfoReader"), let load = try? JSONDecoder().decode(GPU_Info.self, from: raw) { entry.value = load diff --git a/Modules/Net/main.swift b/Modules/Net/main.swift index 52b218d6..b9b58405 100644 --- a/Modules/Net/main.swift +++ b/Modules/Net/main.swift @@ -326,11 +326,10 @@ public class Network: Module { } if #available(macOS 11.0, *) { - if #unavailable(macOS 26.0) { - guard let blobData = try? JSONEncoder().encode(raw) else { return } + if isWidgetActive(self.userDefaults, [Network_entry.kind]), let blobData = try? JSONEncoder().encode(raw) { self.userDefaults?.set(blobData, forKey: "Network@UsageReader") - WidgetCenter.shared.reloadTimelines(ofKind: Network_entry.kind) } + WidgetCenter.shared.reloadTimelines(ofKind: Network_entry.kind) } } diff --git a/Modules/Net/widget.swift b/Modules/Net/widget.swift index 1a085fd2..a58ce74e 100644 --- a/Modules/Net/widget.swift +++ b/Modules/Net/widget.swift @@ -44,6 +44,7 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: Network_entry.kind) var entry = Network_entry() if let raw = userDefaults?.data(forKey: "Network@UsageReader"), let load = try? JSONDecoder().decode(Network_Usage.self, from: raw) { entry.value = load diff --git a/Modules/RAM/main.swift b/Modules/RAM/main.swift index 291ce401..62724583 100644 --- a/Modules/RAM/main.swift +++ b/Modules/RAM/main.swift @@ -233,12 +233,11 @@ public class RAM: Module { } if #available(macOS 11.0, *) { - if #unavailable(macOS 26.0) { - guard let blobData = try? JSONEncoder().encode(value) else { return } + if isWidgetActive(self.userDefaults, [RAM_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { self.userDefaults?.set(blobData, forKey: "RAM@UsageReader") - WidgetCenter.shared.reloadTimelines(ofKind: RAM_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } + WidgetCenter.shared.reloadTimelines(ofKind: RAM_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/RAM/widget.swift b/Modules/RAM/widget.swift index 25e3ef31..445e9cdd 100644 --- a/Modules/RAM/widget.swift +++ b/Modules/RAM/widget.swift @@ -55,6 +55,7 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: RAM_entry.kind) var entry = RAM_entry() if let raw = userDefaults?.data(forKey: "RAM@UsageReader"), let load = try? JSONDecoder().decode(RAM_Usage.self, from: raw) { entry.value = load diff --git a/Widgets/UnitedWidget.swift b/Widgets/UnitedWidget.swift index 63343c50..ec239ff0 100644 --- a/Widgets/UnitedWidget.swift +++ b/Widgets/UnitedWidget.swift @@ -21,7 +21,12 @@ public struct Value { public struct United_entry: TimelineEntry { public static let kind = "UnitedWidget" - public static var snapshot: United_entry = United_entry() + public static var snapshot: United_entry = United_entry( + cpu: Value(value: 0.34), + gpu: Value(value: 0.45), + ram: Value(value: 0.67), + disk: Value(value: 0.78) + ) public var date: Date { Calendar.current.date(byAdding: .second, value: 5, to: Date())! @@ -48,6 +53,8 @@ public struct Provider: TimelineProvider { } public func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + self.userDefaults?.set(Date().timeIntervalSince1970, forKey: United_entry.kind) + var entry = United_entry() if let raw = userDefaults?.data(forKey: "CPU@LoadReader"), let value = try? JSONDecoder().decode(CPU_Load.self, from: raw) { entry.cpu = Value(value: value.totalUsage)