diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 74bea0910..8ee62ae30 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -177,6 +177,18 @@ class _SpaceViewState extends State { // Wait for room actually appears in sync await client.waitForRoomInSync(spaceChild.roomId, join: true); } + // #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; + } + // Pangea# }, ); if (result.error != null) return; diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/controllers/class_controller.dart index d2e711cc3..5977e7cb3 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/controllers/class_controller.dart @@ -145,7 +145,13 @@ class ClassController extends BaseController { final room = _pangeaController.matrixState.client.getRoomById(classChunk.roomId); - if (room != null && (await room.leaveIfFull(context))) { + if (room != null && (await room.leaveIfFull())) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: Text(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 3391fc13d..513fb3586 100644 --- a/lib/pangea/extensions/pangea_room_extension/events_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/events_extension.dart @@ -1,11 +1,10 @@ part of "pangea_room_extension.dart"; extension EventsRoomExtension on Room { - Future _leaveIfFull(BuildContext context) async { + Future _leaveIfFull() async { if (!isRoomAdmin && (_capacity != null) && (await _numNonAdmins) >= (int.parse(_capacity!))) { - ClassCodeUtil.messageSnack(context, L10n.of(context)!.roomFull); if (!isSpace) { markUnread(false); } diff --git a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart index 46ad76975..c87157733 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart @@ -10,11 +10,9 @@ import 'package:fluffychat/pangea/models/bot_options_model.dart'; import 'package:fluffychat/pangea/models/class_model.dart'; import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; -import 'package:fluffychat/pangea/utils/class_code.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; // import markdown.dart import 'package:html_unescape/html_unescape.dart'; import 'package:matrix/matrix.dart'; @@ -140,8 +138,7 @@ extension PangeaRoom on Room { // events - Future leaveIfFull(BuildContext context) async => - await _leaveIfFull(context); + Future leaveIfFull() async => await _leaveIfFull(); Future sendPangeaEvent({ required Map content, diff --git a/lib/pangea/pages/analytics/base_analytics.dart b/lib/pangea/pages/analytics/base_analytics.dart index 17fa4013a..a85e76484 100644 --- a/lib/pangea/pages/analytics/base_analytics.dart +++ b/lib/pangea/pages/analytics/base_analytics.dart @@ -2,9 +2,11 @@ import 'dart:async'; import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/pages/analytics/base_analytics_view.dart'; import 'package:fluffychat/pangea/pages/analytics/student_analytics/student_analytics.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:matrix/matrix.dart'; @@ -119,6 +121,16 @@ class BaseAnalyticsController extends State { ); await Matrix.of(context).client.joinRoom(selectedParam.id); await waitForRoom; + final room = Matrix.of(context).client.getRoomById(selectedParam.id); + if (room != null && (await room.leaveIfFull())) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: Text(L10n.of(context)!.roomFull), + ), + ); + return; + } }, ); } diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 53de9b138..2f45e4796 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -1,7 +1,12 @@ -import 'package:flutter/material.dart'; - import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart' show IterableExtension; +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/widgets/public_room_bottom_sheet.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'; @@ -9,11 +14,6 @@ import 'package:matrix/matrix.dart'; import 'package:punycode/punycode.dart'; import 'package:url_launcher/url_launcher_string.dart'; -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart'; -import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import 'package:fluffychat/widgets/public_room_bottom_sheet.dart'; import 'platform_infos.dart'; class UrlLauncher { @@ -202,7 +202,19 @@ class UrlLauncher { serverName: servers.isNotEmpty ? servers.toList() : null, ), ); - if (response.error != null) return; + // #Pangea + // if (response.error != null) return; + if (response.error != null || + (room != null && (await room.leaveIfFull()))) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: Text(L10n.of(context)!.roomFull), + ), + ); + return; + } + // Pangea# // wait for two seconds so that it probably came down /sync await showFutureLoadingDialog( context: context, diff --git a/lib/widgets/public_room_bottom_sheet.dart b/lib/widgets/public_room_bottom_sheet.dart index 19932f5b9..e395d5ffa 100644 --- a/lib/widgets/public_room_bottom_sheet.dart +++ b/lib/widgets/public_room_bottom_sheet.dart @@ -1,15 +1,15 @@ +import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; +import 'package:fluffychat/utils/fluffy_share.dart'; +import 'package:fluffychat/utils/url_launcher.dart'; +import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/utils/fluffy_share.dart'; -import 'package:fluffychat/utils/url_launcher.dart'; -import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/matrix.dart'; import '../utils/localized_exception_extension.dart'; class PublicRoomBottomSheet extends StatelessWidget { @@ -44,6 +44,18 @@ class PublicRoomBottomSheet extends StatelessWidget { if (client.getRoomById(roomId) == null) { await client.waitForRoomInSync(roomId); } + // #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# return roomId; }, );