summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-16 09:37:27 -0700
committerFuwn <[email protected]>2025-06-16 09:37:27 -0700
commitd292e582910c990cae8481c966366b34dc7041b3 (patch)
treefe11aa49917d793e363094644d6c1662886ece88 /Sora/Data/Settings
parentfeat: Development commit (diff)
downloadsora-testing-d292e582910c990cae8481c966366b34dc7041b3.tar.xz
sora-testing-d292e582910c990cae8481c966366b34dc7041b3.zip
feat: Development commit
Diffstat (limited to 'Sora/Data/Settings')
-rw-r--r--Sora/Data/Settings/SettingsManager.swift42
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(