diff --git a/JellyfinPlayer/Views/BasicAppSettingsView.swift b/JellyfinPlayer/Views/BasicAppSettingsView.swift index 286f2163..ed73b75f 100644 --- a/JellyfinPlayer/Views/BasicAppSettingsView.swift +++ b/JellyfinPlayer/Views/BasicAppSettingsView.swift @@ -18,6 +18,7 @@ struct BasicAppSettingsView: View { @State var resetTapped: Bool = false @Default(.appAppearance) var appAppearance + @Default(.defaultHTTPScheme) var defaultHTTPScheme var body: some View { Form { @@ -33,6 +34,16 @@ struct BasicAppSettingsView: View { Text("Accessibility") } + Section { + Picker("Default Scheme", selection: $defaultHTTPScheme) { + ForEach(HTTPScheme.allCases, id: \.self) { scheme in + Text("\(scheme.rawValue)") + } + } + } header: { + Text("Networking") + } + Button { resetTapped = true } label: { diff --git a/JellyfinPlayer/Views/ConnectToServerView.swift b/JellyfinPlayer/Views/ConnectToServerView.swift index eb546920..f44975d6 100644 --- a/JellyfinPlayer/Views/ConnectToServerView.swift +++ b/JellyfinPlayer/Views/ConnectToServerView.swift @@ -6,14 +6,17 @@ * Copyright 2021 Aiden Vigue & Jellyfin Contributors */ -import SwiftUI +import Defaults import Stinsen +import SwiftUI struct ConnectToServerView: View { @StateObject var viewModel: ConnectToServerViewModel @State var uri = "" + @Default(.defaultHTTPScheme) var defaultHTTPScheme + var body: some View { List { Section { @@ -21,6 +24,11 @@ struct ConnectToServerView: View { .disableAutocorrection(true) .autocapitalization(.none) .keyboardType(.URL) + .onAppear { + if uri == "" { + uri = "\(defaultHTTPScheme.rawValue)://" + } + } if viewModel.isLoading { Button(role: .destructive) { diff --git a/Shared/Objects/HTTPScheme.swift b/Shared/Objects/HTTPScheme.swift new file mode 100644 index 00000000..28152234 --- /dev/null +++ b/Shared/Objects/HTTPScheme.swift @@ -0,0 +1,16 @@ +// + /* + * SwiftFin is subject to the terms of the Mozilla Public + * License, v2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * Copyright 2021 Aiden Vigue & Jellyfin Contributors + */ + +import Defaults +import Foundation + +enum HTTPScheme: String, Defaults.Serializable, CaseIterable { + case http + case https +} diff --git a/Shared/Singleton/SessionManager.swift b/Shared/Singleton/SessionManager.swift index d803e8ac..d5fdd1c0 100644 --- a/Shared/Singleton/SessionManager.swift +++ b/Shared/Singleton/SessionManager.swift @@ -58,10 +58,14 @@ final class SessionManager { // Connects to a server at the given uri, storing if successful func connectToServer(with uri: String) -> AnyPublisher { - var uri = uri - if !uri.contains("http") { - uri = "https://" + uri + var uriComponents = URLComponents(string: uri) ?? URLComponents() + + if uriComponents.scheme == nil { + uriComponents.scheme = SwiftfinStore.Defaults.suite[.defaultHTTPScheme].rawValue } + + var uri = uriComponents.string ?? "" + if uri.last == "/" { uri = String(uri.dropLast()) } diff --git a/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift b/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift index 53ce5f84..ab6a28d0 100644 --- a/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift +++ b/Shared/SwiftfinStore/SwiftfinStoreDefaults.swift @@ -23,6 +23,7 @@ extension SwiftfinStore { extension Defaults.Keys { static let lastServerUserID = Defaults.Key("lastServerUserID", suite: SwiftfinStore.Defaults.suite) + static let defaultHTTPScheme = Key("defaultHTTPScheme", default: .http, suite: SwiftfinStore.Defaults.suite) static let inNetworkBandwidth = Key("InNetworkBandwidth", default: 40_000_000, suite: SwiftfinStore.Defaults.suite) static let outOfNetworkBandwidth = Key("OutOfNetworkBandwidth", default: 40_000_000, suite: SwiftfinStore.Defaults.suite) static let isAutoSelectSubtitles = Key("isAutoSelectSubtitles", default: false, suite: SwiftfinStore.Defaults.suite)