Check capacity when joining room
This commit is contained in:
parent
215686f4a4
commit
ff198f64bc
7 changed files with 70 additions and 20 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
},
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue