Add AuthenticationHomeserverViewData to easily map AuthenticationState.Homeserver to a type in the SwiftUI target.

This commit is contained in:
Doug
2022-05-24 13:41:47 +01:00
parent a74134fdba
commit ac4572ae6a
22 changed files with 147 additions and 197 deletions

View File

@@ -188,8 +188,7 @@ class AuthenticationService: NSObject {
let state = AuthenticationState(flow: .login, homeserver: .init(address: loginFlow.homeserverAddress,
addressFromUser: homeserverAddress,
preferredLoginMode: loginFlow.loginMode,
loginModeSupportedTypes: loginFlow.supportedLoginTypes))
preferredLoginMode: loginFlow.loginMode))
return (client, state)
}
@@ -205,8 +204,7 @@ class AuthenticationService: NSObject {
let loginFlow = try await getLoginFlowResult(client: session.matrixRestClient)
let state = AuthenticationState(flow: .login, homeserver: .init(address: loginFlow.homeserverAddress,
preferredLoginMode: loginFlow.loginMode,
loginModeSupportedTypes: loginFlow.supportedLoginTypes))
preferredLoginMode: loginFlow.loginMode))
return (client, state)
}

View File

@@ -40,11 +40,14 @@ struct AuthenticationState {
var address: String
/// The homeserver address as input by the user (it can differ to the well-known request).
var addressFromUser: String?
/// The homeserver's address formatted to be displayed to the user in labels, text fields etc.
var displayableAddress: String {
let address = addressFromUser ?? address
return address.replacingOccurrences(of: "https://", with: "") // Only remove https. Leave http to indicate the server doesn't use SSL.
}
/// The preferred login mode for the server
var preferredLoginMode: LoginMode = .unknown
/// Supported types for the login.
var loginModeSupportedTypes = [MXLoginFlow]()
/// The response returned when querying the homeserver for registration flows.
var registrationFlow: RegistrationResult?
@@ -54,5 +57,13 @@ struct AuthenticationState {
guard let url = URL(string: address) else { return false }
return url.host == "matrix.org" || url.host == "matrix-client.matrix.org"
}
var viewData: AuthenticationHomeserverViewData {
AuthenticationHomeserverViewData(address: displayableAddress,
isMatrixDotOrg: isMatrixDotOrg,
showLoginForm: preferredLoginMode.supportsPasswordFlow,
showRegistrationForm: registrationFlow != nil,
ssoIdentityProviders: preferredLoginMode.ssoIdentityProviders ?? [])
}
}
}