diff options
Diffstat (limited to 'Sora/Data/Settings')
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 41 |
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 |