Add Quick Connect input in settings

This commit is contained in:
David Ullmer 2022-07-12 14:02:28 +02:00
parent be66d1008e
commit 95aabd22d0
2 changed files with 50 additions and 1 deletions

View File

@ -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)
}
}

View File

@ -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) {