summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-20 08:41:35 -0700
committerFuwn <[email protected]>2025-06-20 08:41:35 -0700
commit7d6ac38b6283b08eb8d21d87949bdaa65c856cc0 (patch)
tree7fbd40a3b17ad53e44946895c8d8dc7d54deb551
parentfeat: Development commit (diff)
downloadsora-testing-7d6ac38b6283b08eb8d21d87949bdaa65c856cc0.tar.xz
sora-testing-7d6ac38b6283b08eb8d21d87949bdaa65c856cc0.zip
feat: Development commit
-rw-r--r--Sora/Data/Settings/SettingsManager.swift58
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()
}
}