diff options
| author | Fuwn <[email protected]> | 2025-06-20 08:41:35 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-20 08:41:35 -0700 |
| commit | 7d6ac38b6283b08eb8d21d87949bdaa65c856cc0 (patch) | |
| tree | 7fbd40a3b17ad53e44946895c8d8dc7d54deb551 | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-7d6ac38b6283b08eb8d21d87949bdaa65c856cc0.tar.xz sora-testing-7d6ac38b6283b08eb8d21d87949bdaa65c856cc0.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index 8c8f495..21317bb 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -38,6 +38,10 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l var saveTagsToFile = false #endif + // MARK: - Private Properties + private var bookmarksCache: [SettingsBookmark] = [] + private var searchHistoryCache: [BooruSearchQuery] = [] + // MARK: - Codable Properties @AppStorage("bookmarks") private var bookmarksData = Data() @@ -65,14 +69,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l // MARK: - Computed Properties var bookmarks: [SettingsBookmark] { - get { - syncableData( - key: "bookmarks", - localData: bookmarksData, - sort: { $0.sorted { $0.date > $1.date } }, - identifier: { $0.id } - ) - } + get { bookmarksCache } set { syncableData( @@ -82,6 +79,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l sort: { $0.sorted { $0.date > $1.date } }, identifier: { $0.id } ) + loadBookmarksCache() } } @@ -100,14 +98,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l } var searchHistory: [BooruSearchQuery] { - get { - syncableData( - key: "searchHistory", - localData: searchHistoryData, - sort: { $0.sorted { $0.date > $1.date } }, - identifier: { $0.id } - ) - } + get { searchHistoryCache } set { syncableData( @@ -117,6 +108,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l sort: { $0.sorted { $0.date > $1.date } }, identifier: { $0.id } ) + loadSearchHistoryCache() } } @@ -240,6 +232,8 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l ) { [weak self] _ in self?.syncFromCloud() } + loadBookmarksCache() + loadSearchHistoryCache() } // MARK: - Private Helpers @@ -308,6 +302,33 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l } } + // MARK: Cache Loaders + private func loadBookmarksCache() { + let data = bookmarksData + + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + let decoded = Self.decode([SettingsBookmark].self, from: data) ?? [] + let sorted = decoded.sorted { $0.date > $1.date } + + DispatchQueue.main.async { + self?.bookmarksCache = sorted + } + } + } + + private func loadSearchHistoryCache() { + let data = searchHistoryData + + DispatchQueue.global(qos: .userInitiated).async { [weak self] in + let decoded = Self.decode([BooruSearchQuery].self, from: data) ?? [] + let sorted = decoded.sorted { $0.date > $1.date } + + DispatchQueue.main.async { + self?.searchHistoryCache = sorted + } + } + } + // MARK: - Public Methods func appendToSearchHistory(_ query: BooruSearchQuery) { self.searchHistory.append(query) @@ -344,6 +365,8 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l self.customProvidersData = data } + loadBookmarksCache() + loadSearchHistoryCache() self.objectWillChange.send() } } @@ -408,6 +431,9 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l NSUbiquitousKeyValueStore.default.set(Self.encode(mergedProviders), forKey: "customProviders") customProvidersData = Self.encode(mergedProviders) ?? Data() + + loadBookmarksCache() + loadSearchHistoryCache() } } |