From 562eebd21c2813eb155de850dbd0ae14e374ff87 Mon Sep 17 00:00:00 2001 From: Biplav Barua <90949688+biplavbarua@users.noreply.github.com> Date: Sun, 28 Dec 2025 17:36:27 +0530 Subject: [PATCH] fix: implemented local caching for settings list to prevent storage thrashing (#2840) (#2864) --- Modules/Clock/settings.swift | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Modules/Clock/settings.swift b/Modules/Clock/settings.swift index 21036c65..a09bae25 100644 --- a/Modules/Clock/settings.swift +++ b/Modules/Clock/settings.swift @@ -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