diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 6ce72f7b90..892e27a26e 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3048,5 +3048,6 @@ "tokenNotFound": "The login token not found", "dangerZone": "Danger zone", "leaveGroupSubtitle": "This group will still remain after you left", - "leaveChatFailed": "Failed to leave the chat" + "leaveChatFailed": "Failed to leave the chat", + "invalidLoginToken": "Invalid login token" } diff --git a/lib/pages/auto_homeserver_picker/auto_homeserver_picker.dart b/lib/pages/auto_homeserver_picker/auto_homeserver_picker.dart index 0a14650b4f..05bd9c9843 100644 --- a/lib/pages/auto_homeserver_picker/auto_homeserver_picker.dart +++ b/lib/pages/auto_homeserver_picker/auto_homeserver_picker.dart @@ -10,7 +10,7 @@ import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:flutter_gen/gen_l10n/l10n.dart'; class AutoHomeserverPicker extends StatefulWidget { final bool? loggedOut; @@ -162,30 +162,34 @@ class AutoHomeserverPickerController extends State } } Logs().d( - "AutoHomeserverPickerController: _initializeAutoHomeserverPicker: PlatForm ${AppConfig.platform}", + "AutoHomeserverPickerController::_setupAutoHomeserverPicker: PlatForm ${AppConfig.platform}", ); final loginToken = getQueryParameter('loginToken'); if (loginToken != null || loginToken?.isNotEmpty == true) { - try { - Matrix.of(context).loginType = LoginType.mLoginToken; - Matrix.of(context).loginHomeserverSummary = - await Matrix.of(context).getLoginClient().checkHomeserver( - Uri.parse( - AppConfig.homeserver, - ), - ); - await TwakeDialog.showFutureLoadingDialogFullScreen( - future: () => Matrix.of(context).getLoginClient().login( - LoginType.mLoginToken, - token: loginToken, - initialDeviceDisplayName: PlatformInfos.clientName, - ), + Matrix.of(context).loginType = LoginType.mLoginToken; + Matrix.of(context).loginHomeserverSummary = + await Matrix.of(context).getLoginClient().checkHomeserver( + Uri.parse( + AppConfig.homeserver, + ), + ); + final result = await TwakeDialog.showFutureLoadingDialogFullScreen( + future: () => Matrix.of(context).getLoginClient().login( + LoginType.mLoginToken, + token: loginToken, + initialDeviceDisplayName: PlatformInfos.clientName, + ), + ); + if (result.error != null) { + autoHomeserverPickerUIState.value = AutoHomeServerPickerFailureState( + error: L10n.of(context)!.invalidLoginToken, ); - } catch (e) { - autoHomeserverPickerUIState.value = - AutoHomeServerPickerFailureState(); + resetLocationPathWithLoginToken( + route: 'home', + ); + } else { + resetLocationPathWithLoginToken(); } - _resetLocationPath(); return; } if (_isSaasPlatform) { @@ -200,10 +204,6 @@ class AutoHomeserverPickerController extends State } } - void _resetLocationPath() { - html.window.history.replaceState({}, '', '/#/rooms'); - } - @override void initState() { _setupAutoHomeserverPicker(); diff --git a/lib/presentation/mixins/connect_page_mixin.dart b/lib/presentation/mixins/connect_page_mixin.dart index a2d030c169..9f5ec79a41 100644 --- a/lib/presentation/mixins/connect_page_mixin.dart +++ b/lib/presentation/mixins/connect_page_mixin.dart @@ -263,4 +263,12 @@ mixin ConnectPageMixin { ), ); } + + void resetLocationPathWithLoginToken({ + String? route, + }) { + final loginTokenExisted = getQueryParameter('loginToken') != null; + if (!loginTokenExisted) return; + html.window.history.replaceState({}, '', '/#/${route ?? 'rooms'}'); + } } diff --git a/lib/widgets/layouts/adaptive_layout/app_adaptive_scaffold_body.dart b/lib/widgets/layouts/adaptive_layout/app_adaptive_scaffold_body.dart index 57d154fd6b..fb2cb4e065 100644 --- a/lib/widgets/layouts/adaptive_layout/app_adaptive_scaffold_body.dart +++ b/lib/widgets/layouts/adaptive_layout/app_adaptive_scaffold_body.dart @@ -1,5 +1,6 @@ import 'package:fluffychat/config/first_column_inner_routes.dart'; import 'package:fluffychat/presentation/enum/settings/settings_action_enum.dart'; +import 'package:fluffychat/presentation/mixins/connect_page_mixin.dart'; import 'package:fluffychat/utils/extension/build_context_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/responsive/responsive_utils.dart'; @@ -34,7 +35,8 @@ class AppAdaptiveScaffoldBody extends StatefulWidget { AppAdaptiveScaffoldBodyController(); } -class AppAdaptiveScaffoldBodyController extends State { +class AppAdaptiveScaffoldBodyController extends State + with ConnectPageMixin { final ValueNotifier activeNavigationBarNotifier = ValueNotifier(AdaptiveDestinationEnum.rooms); @@ -129,6 +131,7 @@ class AppAdaptiveScaffoldBodyController extends State { @override void initState() { activeRoomIdNotifier.value = widget.activeRoomId; + resetLocationPathWithLoginToken(); super.initState(); }