From f2d809ea104db2b8a5a0ca60a30f86329716e074 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 18 Apr 2025 10:38:42 -0400 Subject: [PATCH] chore: don't dismiss too many request dialog when joining space from public room sheet (#2509) --- lib/pages/chat/event_info_dialog.dart | 10 ++++--- .../pangea_public_room_bottom_sheet.dart | 7 +++-- .../spaces/controllers/space_controller.dart | 26 ++++++++++++++----- .../widgets/message_selection_positioner.dart | 3 ++- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/lib/pages/chat/event_info_dialog.dart b/lib/pages/chat/event_info_dialog.dart index aecab945c..2c58c84f1 100644 --- a/lib/pages/chat/event_info_dialog.dart +++ b/lib/pages/chat/event_info_dialog.dart @@ -1,13 +1,15 @@ import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; extension EventInfoDialogExtension on Event { void showInfoDialog(BuildContext context) => showAdaptiveBottomSheet( diff --git a/lib/pangea/public_spaces/pangea_public_room_bottom_sheet.dart b/lib/pangea/public_spaces/pangea_public_room_bottom_sheet.dart index 51493bf56..9087eb171 100644 --- a/lib/pangea/public_spaces/pangea_public_room_bottom_sheet.dart +++ b/lib/pangea/public_spaces/pangea_public_room_bottom_sheet.dart @@ -58,12 +58,15 @@ class PangeaPublicRoomBottomSheetState bool get _isKnockRoom => widget.chunk?.joinRule == 'knock'; Future _joinWithCode() async { - await MatrixState.pangeaController.classController.joinClasswithCode( + final resp = + await MatrixState.pangeaController.classController.joinClasswithCode( context, _codeController.text, notFoundError: L10n.of(context).notTheCodeError, ); - Navigator.of(context).pop(); + if (!resp.isError) { + Navigator.of(context).pop(); + } } void _goToRoom(String roomID) { diff --git a/lib/pangea/spaces/controllers/space_controller.dart b/lib/pangea/spaces/controllers/space_controller.dart index b57b9cc2c..e1ac7bf76 100644 --- a/lib/pangea/spaces/controllers/space_controller.dart +++ b/lib/pangea/spaces/controllers/space_controller.dart @@ -1,8 +1,11 @@ +// ignore_for_file: implementation_imports + import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:async/src/result/result.dart' as result; import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:get_storage/get_storage.dart'; @@ -101,7 +104,7 @@ class ClassController extends BaseController { : context.go("/rooms/${room.id}"); } - Future joinClasswithCode( + Future> joinClasswithCode( BuildContext context, String classCode, { String? notFoundError, @@ -122,8 +125,7 @@ class ClassController extends BaseController { ); if (knockResponse.statusCode == 429) { - await _showTooManyRequestsPopup(context); - return null; + return "429"; } if (knockResponse.statusCode != 200) { throw notFoundError ?? L10n.of(context).unableToFindClass; @@ -156,7 +158,17 @@ class ClassController extends BaseController { }, ); - if (spaceID.isError || spaceID.result == null) return; + if (spaceID.isError || spaceID.result == null) { + return spaceID; + } + + if (spaceID.result == "429") { + await _showTooManyRequestsPopup(context); + return result.Result.error( + Exception(L10n.of(context).tooManyRequestsWarning), + StackTrace.current, + ); + } try { await client.joinRoomById(spaceID.result!); @@ -168,7 +180,7 @@ class ClassController extends BaseController { join: true, ); room = client.getRoomById(spaceID.result!); - if (room == null) return; + if (room == null) return spaceID; } GoogleAnalytics.joinClass(classCode); @@ -190,6 +202,7 @@ class ClassController extends BaseController { } setActiveSpaceIdInChatListController(spaceID.result!); + return spaceID; } catch (e, s) { ErrorHandler.logError( e: e, @@ -198,11 +211,12 @@ class ClassController extends BaseController { "classCode": classCode, }, ); + return result.Result.error(e, s); } } Future _showTooManyRequestsPopup(BuildContext context) async { - showDialog( + await showDialog( context: context, builder: (BuildContext context) { return Dialog( diff --git a/lib/pangea/toolbar/widgets/message_selection_positioner.dart b/lib/pangea/toolbar/widgets/message_selection_positioner.dart index 0749eb774..9a9a39ae4 100644 --- a/lib/pangea/toolbar/widgets/message_selection_positioner.dart +++ b/lib/pangea/toolbar/widgets/message_selection_positioner.dart @@ -238,8 +238,9 @@ class MessageSelectionPositionerState extends State } await _animationController.forward(from: 0); - if (mounted) + if (mounted) { setState(() => widget.overlayController.readingAssistanceMode = mode); + } } T _runWithLogging(