From 95aabd22d06f4df0bb1d8aac9285d072570a8452 Mon Sep 17 00:00:00 2001 From: David Ullmer Date: Tue, 12 Jul 2022 14:02:28 +0200 Subject: [PATCH] Add Quick Connect input in settings --- Shared/ViewModels/SettingsViewModel.swift | 35 ++++++++++++++++++- .../Views/SettingsView/SettingsView.swift | 16 +++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Shared/ViewModels/SettingsViewModel.swift b/Shared/ViewModels/SettingsViewModel.swift index a88a23ca..64d7099b 100644 --- a/Shared/ViewModels/SettingsViewModel.swift +++ b/Shared/ViewModels/SettingsViewModel.swift @@ -8,9 +8,14 @@ import Defaults import Foundation +import JellyfinAPI +import Stinsen import SwiftUI -final class SettingsViewModel: ObservableObject { +final class SettingsViewModel: ViewModel { + + @RouterObject + var router: SettingsCoordinator.Router? var bitrates: [Bitrates] = [] var langs: [TrackLanguage] = [] @@ -18,6 +23,12 @@ final class SettingsViewModel: ObservableObject { let server: SwiftfinStore.State.Server let user: SwiftfinStore.State.User + @Published + var quickConnectCode = "" + + @Published + var validQuickConnect = true + init(server: SwiftfinStore.State.Server, user: SwiftfinStore.State.User) { self.server = server @@ -44,4 +55,26 @@ final class SettingsViewModel: ObservableObject { }.sorted(by: { $0.name < $1.name }) self.langs.insert(.auto, at: 0) } + + func sendQuickConnect() { + QuickConnectAPI.authorize(code: self.quickConnectCode) + .sink(receiveCompletion: { completion in + switch completion { + case .failure: + LogManager.log.debug("Invalid Quick Connect code entered") + self.validQuickConnect = false + default: + self.handleAPIRequestError(displayMessage: "Error", completion: completion) + } + }, receiveValue: { value in + if !value { + LogManager.log.debug("Invalid Quick Connect code entered") + self.validQuickConnect = false + } else { + LogManager.log.debug("Valid Quick connect code entered") + self.router?.dismissCoordinator() + } + }) + .store(in: &cancellables) + } } diff --git a/Swiftfin/Views/SettingsView/SettingsView.swift b/Swiftfin/Views/SettingsView/SettingsView.swift index b7395be5..d0e65e4a 100644 --- a/Swiftfin/Views/SettingsView/SettingsView.swift +++ b/Swiftfin/Views/SettingsView/SettingsView.swift @@ -83,6 +83,22 @@ struct SettingsView: View { } } + Section(header: Text("Quick Connect")) { + TextField("Quick Connect code", text: $viewModel.quickConnectCode) + .keyboardType(.numberPad) + .onChange(of: viewModel.quickConnectCode, perform: { _ in + viewModel.validQuickConnect = true + }) + .foregroundColor(viewModel.validQuickConnect ? .none : Color.red) + + Button { + viewModel.sendQuickConnect() + } label: { + Text("Submit Quick Connect code") + .font(.callout) + } + } + // TODO: Implement these for playback // Section(header: Text("Networking")) { // Picker("Default local quality", selection: $inNetworkStreamBitrate) {