using wider range network error when deciding to forward to the edit server instead of just unknown host

- will also capture timeouts
This commit is contained in:
Adam Brown 2022-08-19 12:44:01 +01:00
parent 4cc0b81c86
commit b50b6daca1
2 changed files with 16 additions and 2 deletions

View File

@ -89,6 +89,8 @@ fun Throwable.isInvalidUIAAuth() = this is Failure.ServerError &&
fun Throwable.isHomeserverUnavailable() = this is Failure.NetworkConnection &&
this.ioException is UnknownHostException
fun Throwable.isHomeserverConnectionError() = this is Failure.NetworkConnection
fun Throwable.isMissingEmailVerification() = this is Failure.ServerError &&
error.code == MatrixError.M_UNAUTHORIZED &&
error.message == "Unable to get validated threepid"

View File

@ -61,6 +61,7 @@ import org.matrix.android.sdk.api.auth.login.LoginWizard
import org.matrix.android.sdk.api.auth.registration.RegistrationAvailability
import org.matrix.android.sdk.api.auth.registration.RegistrationWizard
import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.failure.isHomeserverConnectionError
import org.matrix.android.sdk.api.failure.isHomeserverUnavailable
import org.matrix.android.sdk.api.failure.isUnrecognisedCertificate
import org.matrix.android.sdk.api.network.ssl.Fingerprint
@ -702,7 +703,14 @@ class OnboardingViewModel @AssistedInject constructor(
private fun onAuthenticationStartError(error: Throwable, trigger: OnboardingAction.HomeServerChange) {
when {
error.isHomeserverUnavailable() && applicationContext.inferNoConnectivity(sdkIntProvider) -> _viewEvents.post(OnboardingViewEvents.Failure(error))
isUnableToSelectServer(error, trigger) -> handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection))
isUnableToSelectServer(error, trigger) -> {
withState { state ->
when {
canEditServerSelectionError(state) -> handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.EditServerSelection))
else -> _viewEvents.post(OnboardingViewEvents.Failure(error))
}
}
}
error.isUnrecognisedCertificate() -> {
_viewEvents.post(OnboardingViewEvents.UnrecognisedCertificateFailure(trigger, error as Failure.UnrecognizedCertificateFailure))
}
@ -710,8 +718,12 @@ class OnboardingViewModel @AssistedInject constructor(
}
}
private fun canEditServerSelectionError(state: OnboardingViewState) =
(state.onboardingFlow == OnboardingFlow.SignIn && vectorFeatures.isOnboardingCombinedLoginEnabled()) ||
(state.onboardingFlow == OnboardingFlow.SignUp && vectorFeatures.isOnboardingCombinedRegisterEnabled())
private fun isUnableToSelectServer(error: Throwable, trigger: OnboardingAction.HomeServerChange) =
trigger is OnboardingAction.HomeServerChange.SelectHomeServer && error.isHomeserverUnavailable()
trigger is OnboardingAction.HomeServerChange.SelectHomeServer && error.isHomeserverConnectionError()
private suspend fun onAuthenticationStartedSuccess(
trigger: OnboardingAction.HomeServerChange,