Check capacity when joining room

This commit is contained in:
Kelrap 2024-06-04 16:43:59 -04:00
parent 215686f4a4
commit ff198f64bc
7 changed files with 70 additions and 20 deletions

View file

@ -177,6 +177,18 @@ class _SpaceViewState extends State<SpaceView> {
// 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;

View file

@ -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;
}

View file

@ -1,11 +1,10 @@
part of "pangea_room_extension.dart";
extension EventsRoomExtension on Room {
Future<bool> _leaveIfFull(BuildContext context) async {
Future<bool> _leaveIfFull() async {
if (!isRoomAdmin &&
(_capacity != null) &&
(await _numNonAdmins) >= (int.parse(_capacity!))) {
ClassCodeUtil.messageSnack(context, L10n.of(context)!.roomFull);
if (!isSpace) {
markUnread(false);
}

View file

@ -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<bool> leaveIfFull(BuildContext context) async =>
await _leaveIfFull(context);
Future<bool> leaveIfFull() async => await _leaveIfFull();
Future<Event?> sendPangeaEvent({
required Map<String, dynamic> content,

View file

@ -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<BaseAnalyticsPage> {
);
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;
}
},
);
}

View file

@ -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,

View file

@ -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;
},
);