summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Settings')
-rw-r--r--Sora/Data/Settings/SettingsManager.swift41
1 files changed, 22 insertions, 19 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index 21317bb..432d6f4 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -303,30 +303,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 }
+ private func loadCache<T: Decodable>(
+ from data: Data,
+ sort: @escaping ([T]) -> [T],
+ assign: @escaping ([T]) -> Void
+ ) {
+ DispatchQueue.global(qos: .userInitiated).async {
+ let decoded = Self.decode([T].self, from: data) ?? []
+ let sorted = sort(decoded)
- DispatchQueue.main.async {
- self?.bookmarksCache = sorted
- }
+ DispatchQueue.main.async { assign(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 }
+ private func loadBookmarksCache() {
+ loadCache(
+ from: bookmarksData,
+ sort: { $0.sorted { $0.date > $1.date } },
+ assign: { [weak self] in self?.bookmarksCache = $0 }
+ )
+ }
- DispatchQueue.main.async {
- self?.searchHistoryCache = sorted
- }
- }
+ private func loadSearchHistoryCache() {
+ loadCache(
+ from: searchHistoryData,
+ sort: { $0.sorted { $0.date > $1.date } },
+ assign: { [weak self] in self?.searchHistoryCache = $0 }
+ )
}
// MARK: - Public Methods