From 375d5b504634915bb17c932ee49aee99036275d0 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 16 Jun 2025 10:02:44 -0700 Subject: feat: Development commit --- Sora/Data/Booru/BooruManager.swift | 3 +++ Sora/Data/Settings/SettingsManager.swift | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) (limited to 'Sora/Data') diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift index ce61644..f0cad76 100644 --- a/Sora/Data/Booru/BooruManager.swift +++ b/Sora/Data/Booru/BooruManager.swift @@ -19,6 +19,7 @@ class BooruManager: ObservableObject { @Published var historyIndex: Int = -1 @Published var searchHistory: [BooruSearchQuery] = [] @Published var isNavigatingHistory = false + @Published var error: Error? // MARK: - Private Properties private var currentTask: Task? @@ -98,6 +99,8 @@ class BooruManager: ObservableObject { pageCache.setObject(cacheEntry, forKey: cacheKey) updatePosts(newPosts, replace: replace) } catch { + self.error = error + debugPrint("BooruManager.fetchPosts: \(error)") } diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index c824cff..39dbfee 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -201,12 +201,34 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l } } + private func mergedCredentialValues( + extract: (BooruProviderCredentials) -> Value, + isDefault: (Value) -> Bool + ) -> [BooruProvider: Value] { + providerCredentials.reduce(into: [BooruProvider: Value]()) { dictionary, credentials in + let key = credentials.provider + let value = extract(credentials) + + if dictionary[key] == nil { + dictionary[key] = value + } else if isDefault(dictionary[key]!) && !isDefault(value) { + dictionary[key] = value + } + } + } + var providerAPIKeys: [BooruProvider: String] { - Dictionary(uniqueKeysWithValues: providerCredentials.map { ($0.provider, $0.apiKey) }) + mergedCredentialValues( + extract: { $0.apiKey }, + isDefault: { $0.isEmpty } + ) } var providerUserIDs: [BooruProvider: Int] { - Dictionary(uniqueKeysWithValues: providerCredentials.map { ($0.provider, $0.userID) }) + mergedCredentialValues( + extract: { $0.userID }, + isDefault: { $0 == 0 } + ) } // MARK: - Initialisation -- cgit v1.2.3