diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index a53f00536..500aa5f1e 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -68,7 +68,10 @@ class ChatPage extends StatelessWidget { @override Widget build(BuildContext context) { final room = Matrix.of(context).client.getRoomById(roomId); - if (room == null) { + // #Pangea + if (room == null || room.membership == Membership.leave) { + // if (room == null) { + // Pangea# return Scaffold( appBar: AppBar(title: Text(L10n.of(context)!.oopsSomethingWentWrong)), body: Center( diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 0f2d1860d..2f9610ec9 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -20,6 +20,7 @@ import 'package:fluffychat/widgets/unread_rooms_badge.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; +import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import '../../utils/stream_extension.dart'; @@ -151,6 +152,11 @@ class ChatView extends StatelessWidget { context: context, future: () => controller.room.join(), ); + // #Pangea + controller.room.leaveIfFull().then( + (full) => full ? context.go('/rooms') : null, + ); + // Pangea# } final bottomSheetPadding = FluffyThemes.isColumnMode(context) ? 16.0 : 8.0; final scrollUpBannerEventId = controller.scrollUpBannerEventId; diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index f76a470a4..e4fb40013 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -36,7 +36,10 @@ class ChatDetailsView extends StatelessWidget { @override Widget build(BuildContext context) { final room = Matrix.of(context).client.getRoomById(controller.roomId!); - if (room == null) { + // #Pangea + if (room == null || room.membership == Membership.leave) { + // if (room == null) { + // Pangea# return Scaffold( appBar: AppBar( title: Text(L10n.of(context)!.oopsSomethingWentWrong), diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 306cbecee..ff6582e94 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -180,13 +180,7 @@ class _SpaceViewState extends State { // #Pangea final room = client.getRoomById(spaceChild.roomId); if (room != null && (await room.leaveIfFull())) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: Text(L10n.of(context)!.roomFull), - ), - ); - return; + throw L10n.of(context)!.roomFull; } // Pangea# }, @@ -207,17 +201,11 @@ class _SpaceViewState extends State { ); await room.join(); await waitForRoom; + if (await room.leaveIfFull()) { + throw L10n.of(context)!.roomFull; + } }, ); - if (await room.leaveIfFull()) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: Text(L10n.of(context)!.roomFull), - ), - ); - return; - } if (joinResult.error != null) return; } // Pangea# diff --git a/lib/pages/chat_list/utils/on_chat_tap.dart b/lib/pages/chat_list/utils/on_chat_tap.dart index d9f1c8191..a54da9c89 100644 --- a/lib/pages/chat_list/utils/on_chat_tap.dart +++ b/lib/pages/chat_list/utils/on_chat_tap.dart @@ -1,5 +1,6 @@ import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:fluffychat/pages/chat/send_file_dialog.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; @@ -63,6 +64,9 @@ void onChatTap(Room room, BuildContext context) async { room.id, join: true, ); + if (await room.leaveIfFull()) { + throw L10n.of(context)!.roomFull; + } await room.join(); await waitForRoom; }, diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/controllers/class_controller.dart index 5977e7cb3..0f371c54d 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/controllers/class_controller.dart @@ -143,14 +143,16 @@ class ClassController extends BaseController { ); } + // If the room is full, leave final room = _pangeaController.matrixState.client.getRoomById(classChunk.roomId); - if (room != null && (await room.leaveIfFull())) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: Text(L10n.of(context)!.roomFull), - ), + if (room == null) { + return; + } + if ((await room.leaveIfFull())) { + ClassCodeUtil.messageSnack( + context, + L10n.of(context)!.roomFull, ); return; } diff --git a/lib/pangea/extensions/pangea_room_extension/events_extension.dart b/lib/pangea/extensions/pangea_room_extension/events_extension.dart index 513fb3586..8ba3cc169 100644 --- a/lib/pangea/extensions/pangea_room_extension/events_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/events_extension.dart @@ -2,6 +2,7 @@ part of "pangea_room_extension.dart"; extension EventsRoomExtension on Room { Future _leaveIfFull() async { + await postLoad(); if (!isRoomAdmin && (_capacity != null) && (await _numNonAdmins) >= (int.parse(_capacity!))) { diff --git a/lib/pangea/utils/chat_list_handle_space_tap.dart b/lib/pangea/utils/chat_list_handle_space_tap.dart index cb58a3ea4..4930f7ecc 100644 --- a/lib/pangea/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/utils/chat_list_handle_space_tap.dart @@ -33,6 +33,9 @@ void chatListHandleSpaceTap( context: context, future: () async { await space.join(); + if (await space.leaveIfFull()) { + throw L10n.of(context)!.roomFull; + } await space.postLoad(); setActiveSpaceAndCloseChat(); }, @@ -65,6 +68,9 @@ void chatListHandleSpaceTap( context: context, future: () async { await space.join(); + if (await space.leaveIfFull()) { + throw L10n.of(context)!.roomFull; + } if (space.isSpace) { await space.joinAnalyticsRoomsInSpace(); } diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index cf8904d18..58c0330b8 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -117,6 +117,7 @@ abstract class ClientManager { PangeaEventTypes.botOptions, EventTypes.RoomTopic, EventTypes.RoomAvatar, + PangeaEventTypes.capacity, // Pangea# }, logLevel: kReleaseMode ? Level.warning : Level.verbose, diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 2f45e4796..bcdda51ea 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -159,7 +159,10 @@ class UrlLauncher { room = matrix.client.getRoomById(roomId!); } servers.addAll(identityParts.via); - if (room != null) { + // #Pangea + if (room != null && room.membership != Membership.leave) { + // if (room != null) { + // Pangea# if (room.isSpace) { // TODO: Implement navigate to space context.go('/rooms/${room.id}'); diff --git a/lib/widgets/public_room_bottom_sheet.dart b/lib/widgets/public_room_bottom_sheet.dart index e395d5ffa..086162b3f 100644 --- a/lib/widgets/public_room_bottom_sheet.dart +++ b/lib/widgets/public_room_bottom_sheet.dart @@ -47,12 +47,6 @@ class PublicRoomBottomSheet extends StatelessWidget { // #Pangea final room = client.getRoomById(roomId); if (room != null && (await room.leaveIfFull())) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: Text(L10n.of(context)!.roomFull), - ), - ); throw L10n.of(context)!.roomFull; } // Pangea#