From 4fc109e6cf50fd91440bcba2e02eb8be07bbf0ef Mon Sep 17 00:00:00 2001 From: Abhishek Banthia <8280282+n0shake@users.noreply.github.com> Date: Fri, 12 Apr 2024 20:17:14 -0400 Subject: [PATCH] Cache timezones + menubar timezones. --- Clocker/Overall App/DataStore.swift | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Clocker/Overall App/DataStore.swift b/Clocker/Overall App/DataStore.swift index 9e8150d..4cf582e 100644 --- a/Clocker/Overall App/DataStore.swift +++ b/Clocker/Overall App/DataStore.swift @@ -24,6 +24,8 @@ class DataStore: NSObject { private static var sharedStore = DataStore(with: UserDefaults.standard) private var userDefaults: UserDefaults! private var ubiquitousStore: NSUbiquitousKeyValueStore? + private var cachedTimezones: [Data] + private var cachedMenubarTimezones: [Data] private static let timeFormatsWithSuffix: Set = Set([NSNumber(integerLiteral: 0), NSNumber(integerLiteral: 3), NSNumber(integerLiteral: 4), @@ -35,8 +37,14 @@ class DataStore: NSObject { } init(with defaults: UserDefaults) { - super.init() + cachedTimezones = (defaults.object(forKey: CLDefaultPreferenceKey) as? [Data]) ?? [] + cachedMenubarTimezones = cachedTimezones.filter { + let customTimezone = TimezoneData.customObject(from: $0) + return customTimezone?.isFavourite == 1 + } userDefaults = defaults + super.init() + setupSyncNotification() } @@ -85,26 +93,24 @@ class DataStore: NSObject { } func timezones() -> [Data] { - guard let preferences = userDefaults.object(forKey: CLDefaultPreferenceKey) as? [Data] else { - return [] - } - - return preferences + return cachedTimezones } func setTimezones(_ timezones: [Data]?) { userDefaults.set(timezones, forKey: CLDefaultPreferenceKey) userDefaults.set(Date(), forKey: CLUserDefaultsLastUpdateKey) + cachedTimezones = timezones ?? [] + cachedMenubarTimezones = cachedTimezones.filter { + let customTimezone = TimezoneData.customObject(from: $0) + return customTimezone?.isFavourite == 1 + } // iCloud sync ubiquitousStore?.set(timezones, forKey: CLDefaultPreferenceKey) ubiquitousStore?.set(Date(), forKey: CLUbiquitousStoreLastUpdateKey) } func menubarTimezones() -> [Data]? { - return timezones().filter { - let customTimezone = TimezoneData.customObject(from: $0) - return customTimezone?.isFavourite == 1 - } + return cachedMenubarTimezones } func selectedCalendars() -> [String]? {