Server protocol update (unfinished)

This commit is contained in:
Vincent Meilinger
2024-01-06 21:28:52 +01:00
parent bb68b29bdf
commit 5c7ff578c7
6 changed files with 127 additions and 8 deletions

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>Nextcloud Cookbook iOS Client.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View File

@@ -2828,6 +2828,9 @@
} }
} }
} }
},
"Use a non-standard port" : {
}, },
"Validate" : { "Validate" : {
"localizations" : { "localizations" : {

View File

@@ -137,6 +137,28 @@ struct LoginLabel: View {
} }
} }
struct BorderedLoginTextField: View {
var example: String
@Binding var text: String
@State var color: Color = .white
var body: some View {
TextField(example, text: $text)
.textFieldStyle(.plain)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
.foregroundColor(color)
.accentColor(color)
.padding()
.background(
RoundedRectangle(cornerRadius: 10)
.stroke(.white, lineWidth: 2)
.foregroundColor(.clear)
)
}
}
struct LoginTextField: View { struct LoginTextField: View {
var example: String var example: String
@Binding var text: String @Binding var text: String
@@ -152,8 +174,84 @@ struct LoginTextField: View {
.padding() .padding()
.background( .background(
RoundedRectangle(cornerRadius: 10) RoundedRectangle(cornerRadius: 10)
.stroke(color, lineWidth: 2) .foregroundColor(Color.white.opacity(0.2))
.foregroundColor(.clear)
) )
} }
} }
struct ServerAddressField: View {
@Binding var addressString: String
@State var serverAddress: String = ""
@State var serverProtocol: ServerProtocol = .https
@State var serverPort: String = ""
@State var useNonStandardPort: Bool = false
enum ServerProtocol: String {
case https="https://", http="http://"
static let all = [https, http]
}
var body: some View {
VStack(alignment: .leading) {
LoginLabel(text: "Server address")
VStack(alignment: .leading) {
HStack {
Picker(ServerProtocol.https.rawValue, selection: $serverProtocol) {
ForEach(ServerProtocol.all, id: \.self) {
Text($0.rawValue)
}
}.pickerStyle(.menu)
.tint(.white)
.font(.headline)
LoginTextField(example: "e.g.: example.com", text: $serverAddress)
}
Toggle("Use a non-standard port", isOn: $useNonStandardPort)
.tint(.white.opacity(0.2))
.foregroundStyle(.white)
.font(.headline)
.padding(.top)
if useNonStandardPort {
LoginTextField(example: "e.g.: 80", text: $serverPort)
}
LoginLabel(text: "Full server address")
.padding(.top)
Text(createServerAddressString())
.foregroundColor(.white)
.padding(.vertical, 5)
}
.padding()
.background(
RoundedRectangle(cornerRadius: 10)
.stroke(.white, lineWidth: 2)
.foregroundColor(.clear)
)
}.animation(.easeInOut, value: useNonStandardPort)
}
func createServerAddressString() -> String {
if useNonStandardPort && serverPort != "" {
addressString = serverProtocol.rawValue + serverAddress + ":" + serverPort
} else {
addressString = serverProtocol.rawValue + serverAddress
}
return addressString
}
}
struct ServerAddressField_Preview: PreviewProvider {
static var previews: some View {
ServerAddressField(addressString: .constant(""),
serverAddress: "example.com",
serverProtocol: .https,
serverPort: "80",
useNonStandardPort: true)
.previewLayout(.sizeThatFits)
.padding()
.background(Color.nextcloudBlue)
}
}

View File

@@ -8,6 +8,8 @@
import Foundation import Foundation
import SwiftUI import SwiftUI
struct TokenLoginView: View { struct TokenLoginView: View {
@Binding var showAlert: Bool @Binding var showAlert: Bool
@Binding var alertMessage: String @Binding var alertMessage: String
@@ -24,15 +26,16 @@ struct TokenLoginView: View {
var body: some View { var body: some View {
VStack(alignment: .leading) { VStack(alignment: .leading) {
LoginLabel(text: "Server address") /*LoginLabel(text: "Server address")
LoginTextField(example: "e.g.: example.com", text: $userSettings.serverAddress) LoginTextField(example: "e.g.: example.com", text: $userSettings.serverAddress)
.focused($focusedField, equals: .server) .focused($focusedField, equals: .server)
.textContentType(.URL) .textContentType(.URL)
.submitLabel(.next) .submitLabel(.next)
.padding(.bottom) .padding(.bottom)
*/
ServerAddressField(addressString: $userSettings.serverAddress)
LoginLabel(text: "User name") LoginLabel(text: "User name")
LoginTextField(example: "username", text: $userSettings.username) BorderedLoginTextField(example: "username", text: $userSettings.username)
.focused($focusedField, equals: .username) .focused($focusedField, equals: .username)
.textContentType(.username) .textContentType(.username)
.submitLabel(.next) .submitLabel(.next)
@@ -40,7 +43,7 @@ struct TokenLoginView: View {
LoginLabel(text: "App Token") LoginLabel(text: "App Token")
LoginTextField(example: "can be generated in security settings of your nextcloud", text: $userSettings.token) BorderedLoginTextField(example: "can be generated in security settings of your nextcloud", text: $userSettings.token)
.focused($focusedField, equals: .token) .focused($focusedField, equals: .token)
.textContentType(.password) .textContentType(.password)
.submitLabel(.join) .submitLabel(.join)

View File

@@ -50,7 +50,7 @@ struct V2LoginView: View {
var body: some View { var body: some View {
ScrollView { ScrollView {
VStack(alignment: .leading) { VStack(alignment: .leading) {
LoginLabel(text: "Server address") /*LoginLabel(text: "Server address")
.padding() .padding()
LoginTextField(example: "e.g.: example.com", text: $userSettings.serverAddress, color: loginStage == .serverAddress ? .white : .secondary) LoginTextField(example: "e.g.: example.com", text: $userSettings.serverAddress, color: loginStage == .serverAddress ? .white : .secondary)
.focused($focusedField, equals: .server) .focused($focusedField, equals: .server)
@@ -62,7 +62,8 @@ struct V2LoginView: View {
loginStage = loginStage.next() loginStage = loginStage.next()
} }
} }
*/
ServerAddressField(addressString: $userSettings.serverAddress)
CollapsibleView { CollapsibleView {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text("Make sure to enter the server address in the form 'example.com'. Currently, only servers using the 'https' protocol are supported.") Text("Make sure to enter the server address in the form 'example.com'. Currently, only servers using the 'https' protocol are supported.")