diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 19006d83b..091c6e8b0 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -46,6 +46,7 @@ import '../../widgets/matrix.dart'; import 'package:fluffychat/utils/tor_stub.dart' if (dart.library.html) 'package:tor_detector_web/tor_detector_web.dart'; + enum PopupMenuAction { settings, invite, @@ -668,6 +669,10 @@ class ChatListController extends State _activeSpaceId = widget.activeSpaceId == 'clear' ? null : widget.activeSpaceId; + + WidgetsBinding.instance.addPostFrameCallback((_) { + _joinInvitedSpaces(); + }); // Pangea# super.initState(); @@ -684,6 +689,16 @@ class ChatListController extends State : setActiveSpace(widget.activeSpaceId!); } } + + Future _joinInvitedSpaces() async { + final invitedSpaces = Matrix.of(context).client.rooms.where( + (r) => r.isSpace && r.membership == Membership.invite, + ); + + for (final space in invitedSpaces) { + await showInviteDialog(space, context); + } + } // Pangea# @override diff --git a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart index 549d39440..428567a27 100644 --- a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart @@ -10,7 +10,8 @@ import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../common/utils/error_handler.dart'; -Future _showInviteDialog(Room room, BuildContext context) async { +Future showInviteDialog(Room room, BuildContext context) async { + if (room.membership != Membership.invite) return; final acceptInvite = await showOkCancelAlertDialog( context: context, title: L10n.of(context).youreInvited, @@ -79,7 +80,7 @@ void chatListHandleSpaceTap( justInputtedCode == space.classCode) { // do nothing } else { - _showInviteDialog(space, context); + showInviteDialog(space, context); } break; case Membership.leave: