diff options
Diffstat (limited to 'Sora/Views')
| -rw-r--r-- | Sora/Views/MainView.swift | 7 | ||||
| -rw-r--r-- | Sora/Views/Settings/Section/SettingsProviderView.swift | 52 |
2 files changed, 58 insertions, 1 deletions
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift index c3a8c66..81cede8 100644 --- a/Sora/Views/MainView.swift +++ b/Sora/Views/MainView.swift @@ -21,6 +21,7 @@ struct MainView: View { manager.selectedPost = nil } .onAppear(perform: initializeManager) + .onChange(of: settings.providerCredentials) { initializeManager() } } @ViewBuilder private var tabViewContent: some View { @@ -90,7 +91,11 @@ struct MainView: View { } private func initializeManager() { - manager = BooruManager(settings.preferredBooru) + manager = BooruManager( + settings.preferredBooru, + credentials: settings.providerCredentials + .first { $0.provider == settings.preferredBooru } + ) refreshTags() diff --git a/Sora/Views/Settings/Section/SettingsProviderView.swift b/Sora/Views/Settings/Section/SettingsProviderView.swift index 606fe64..82834b9 100644 --- a/Sora/Views/Settings/Section/SettingsProviderView.swift +++ b/Sora/Views/Settings/Section/SettingsProviderView.swift @@ -20,6 +20,33 @@ struct SettingsProviderView: View { } } + SecureField( + "API Key", + text: Binding( + get: { settings.providerAPIKeys[settings.preferredBooru] ?? "" }, + set: { updateCredentials(apiKey: $0) } + ) + ) + .autocorrectionDisabled(true) + + TextField( + "User ID", + text: Binding( + get: { + String(settings.providerUserIDs[settings.preferredBooru] ?? 0) + }, + set: { newValue in + let userID = Int(newValue) ?? 0 + + updateCredentials(userID: userID) + } + ) + ) + .autocorrectionDisabled(true) + #if os(iOS) + .keyboardType(.numberPad) + #endif + Button("Add Custom Provider") { showingCustomBooruSheet = true } @@ -145,6 +172,31 @@ struct SettingsProviderView: View { return true } + private func updateCredentials(apiKey: String? = nil, userID: Int? = nil) { + var allCredentials = settings.providerCredentials + + if let index = allCredentials.firstIndex(where: { $0.provider == settings.preferredBooru }) { + let credentials = allCredentials[index] + + allCredentials[index] = BooruProviderCredentials( + provider: credentials.provider, + apiKey: apiKey ?? credentials.apiKey, + userID: userID ?? credentials.userID, + id: credentials.id + ) + } else { + allCredentials.append( + BooruProviderCredentials( + provider: settings.preferredBooru, + apiKey: apiKey ?? "", + userID: userID ?? 0 + ) + ) + } + + settings.providerCredentials = allCredentials + } + private func removeCustomProviderButtonContent(_ provider: BooruProviderCustom) -> some View { Button("Remove Custom Provider") { settings.customProviders.removeAll { $0.id == provider.id } |