From eabb548215818fe61bb563b2bc0b62b7ccf45f5b Mon Sep 17 00:00:00 2001 From: Sorunome Date: Sun, 8 Aug 2021 08:46:19 +0200 Subject: [PATCH] fix: Allow fallback to previous url if there is no homeserver on the mxid domain --- assets/l10n/intl_en.arb | 8 ++++++++ lib/pages/login.dart | 25 ++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 91d2bd5b..eb7f6209 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -1351,6 +1351,14 @@ "type": "text", "placeholders": {} }, + "noMatrixServer": "{server1} is no matrix server, use {server2} instead?", + "@noMatrixServer": { + "type": "text", + "placeholders": { + "server1": {}, + "server2": {} + } + }, "noMegolmBootstrap": "Please turn on online key backup from within Element instead.", "@noMegolmBootstrap": { "type": "text", diff --git a/lib/pages/login.dart b/lib/pages/login.dart index 216c14e4..c0c4d782 100644 --- a/lib/pages/login.dart +++ b/lib/pages/login.dart @@ -117,10 +117,33 @@ class LoginController extends State { .setItem(SettingKeys.jitsiInstance, jitsi); AppConfig.jitsiInstance = jitsi; } + final oldHomeserver = Matrix.of(context).client.homeserver; await showFutureLoadingDialog( context: context, - future: () => Matrix.of(context).client.checkHomeserver(newDomain), + // do nothing if we error, we'll handle it below + future: () => Matrix.of(context) + .client + .checkHomeserver(newDomain) + .catchError((e) => null), ); + if (Matrix.of(context).client.homeserver == null) { + Matrix.of(context).client.homeserver = oldHomeserver; + // okay, the server we checked does not appear to be a matrix server + Logs().v( + '$newDomain is not running a homeserver, asking to use $oldHomeserver'); + final dialogResult = await showOkCancelAlertDialog( + context: context, + useRootNavigator: false, + message: L10n.of(context).noMatrixServer(newDomain, oldHomeserver), + okLabel: L10n.of(context).ok, + cancelLabel: L10n.of(context).cancel, + ); + if (dialogResult == OkCancelResult.ok) { + setState(() => usernameError = null); + } else { + Navigator.of(context, rootNavigator: false).pop(); + } + } setState(() => usernameError = null); } } catch (e) {