feat: added a check if the macOS widget is active before updating the read value in the user defaults. It will prevent unnecessary writes when the widget is not enabled (#2733)

This commit is contained in:
Serhiy Mytrovtsiy
2025-12-02 21:00:52 +01:00
parent a96232b0c1
commit 3cad4f49dd
13 changed files with 43 additions and 33 deletions

View File

@@ -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")
}
}
}

View File

@@ -39,8 +39,9 @@ public struct Provider: TimelineProvider {
}
public func getTimeline(in context: Context, completion: @escaping (Timeline<CPU_entry>) -> 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]

View File

@@ -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")
}
}

View File

@@ -39,6 +39,7 @@ public struct Provider: TimelineProvider {
}
public func getTimeline(in context: Context, completion: @escaping (Timeline<Disk_entry>) -> 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

View File

@@ -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")
}
}
}

View File

@@ -39,6 +39,7 @@ public struct Provider: TimelineProvider {
}
public func getTimeline(in context: Context, completion: @escaping (Timeline<GPU_entry>) -> 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

View File

@@ -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)
}
}

View File

@@ -44,6 +44,7 @@ public struct Provider: TimelineProvider {
}
public func getTimeline(in context: Context, completion: @escaping (Timeline<Network_entry>) -> 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

View File

@@ -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")
}
}
}

View File

@@ -55,6 +55,7 @@ public struct Provider: TimelineProvider {
}
public func getTimeline(in context: Context, completion: @escaping (Timeline<RAM_entry>) -> 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