fix: implemented local caching for settings list to prevent storage thrashing (#2840) (#2864)

This commit is contained in:
Biplav Barua
2025-12-28 17:36:27 +05:30
committed by GitHub
parent 8ebf755a75
commit 562eebd21c

View File

@@ -20,17 +20,14 @@ let statusColumnID = NSUserInterfaceItemIdentifier(rawValue: "status")
internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableViewDataSource, NSTextFieldDelegate {
public var callback: (() -> Void) = {}
private var cachedList: [Clock_t] = []
private var list: [Clock_t] {
get {
if let objects = Store.shared.data(key: "\(self.title)_list") {
let decoder = JSONDecoder()
if let objectsDecoded = try? decoder.decode(Array.self, from: objects) as [Clock_t] {
return objectsDecoded
}
}
return [Clock.local]
return self.cachedList
}
set {
self.cachedList = newValue
if newValue.isEmpty {
Store.shared.remove("\(self.title)_list")
} else {
@@ -55,6 +52,16 @@ internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableVi
super.init(frame: NSRect.zero)
if let objects = Store.shared.data(key: "\(self.title)_list") {
let decoder = JSONDecoder()
if let objectsDecoded = try? decoder.decode(Array.self, from: objects) as [Clock_t] {
self.cachedList = objectsDecoded
}
}
if self.cachedList.isEmpty {
self.cachedList = [Clock.local]
}
self.orientation = .vertical
self.distribution = .gravityAreas
self.spacing = 0