diff options
| author | Fuwn <[email protected]> | 2025-06-16 09:37:27 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-16 09:37:27 -0700 |
| commit | d292e582910c990cae8481c966366b34dc7041b3 (patch) | |
| tree | fe11aa49917d793e363094644d6c1662886ece88 /Sora/Data/Settings | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-d292e582910c990cae8481c966366b34dc7041b3.tar.xz sora-testing-d292e582910c990cae8481c966366b34dc7041b3.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Data/Settings')
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index 98ea00c..c824cff 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -60,6 +60,9 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l @AppStorage("folders") private var foldersData = Data() + @AppStorage("providerCredentials") + private var providerCredentialsData = Data() + // MARK: - Computed Properties var bookmarks: [SettingsBookmark] { get { @@ -167,6 +170,45 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l } } + // MARK: Provider Credentials + var providerCredentials: [BooruProviderCredentials] { + get { + syncableData( + key: "providerAPIKeys", + localData: providerCredentialsData, + sort: { $0 }, + identifier: { $0.id } + ) + } + + set { + let existingCredentials: [BooruProviderCredentials] = + Self.decode([BooruProviderCredentials].self, from: providerCredentialsData) ?? [] + let rawCredentials = newValue.map { credentials in + (provider: credentials.provider, apiKey: credentials.apiKey, userID: credentials.userID) + } + let mergedCredentials = BooruProviderCredentials.from( + rawCredentials, existingCredentials: existingCredentials + ) + + syncableData( + key: "providerAPIKeys", + localData: $providerCredentialsData, + newValue: mergedCredentials, + sort: { $0 }, + identifier: { $0.id } + ) + } + } + + var providerAPIKeys: [BooruProvider: String] { + Dictionary(uniqueKeysWithValues: providerCredentials.map { ($0.provider, $0.apiKey) }) + } + + var providerUserIDs: [BooruProvider: Int] { + Dictionary(uniqueKeysWithValues: providerCredentials.map { ($0.provider, $0.userID) }) + } + // MARK: - Initialisation init() { syncObservation = NotificationCenter.default.addObserver( |