From f780f450ee8324b18a3827de2f1742ac6f3a05d1 Mon Sep 17 00:00:00 2001 From: WilsonLe Date: Tue, 15 Oct 2024 17:10:34 +1100 Subject: [PATCH] Student enter invalid code, shows class room not found error --- lib/pages/new_space/new_space.dart | 16 +++------------- lib/pangea/constants/class_code_constants.dart | 3 +++ lib/pangea/controllers/class_controller.dart | 11 ++++++----- .../pangea_room_extension.dart | 1 + .../space_settings_extension.dart | 2 +- lib/pangea/utils/chat_list_handle_space_tap.dart | 4 ++++ lib/pangea/utils/space_code.dart | 5 +++-- 7 files changed, 21 insertions(+), 21 deletions(-) create mode 100644 lib/pangea/constants/class_code_constants.dart diff --git a/lib/pages/new_space/new_space.dart b/lib/pages/new_space/new_space.dart index 9f4465c6e..029da0202 100644 --- a/lib/pages/new_space/new_space.dart +++ b/lib/pages/new_space/new_space.dart @@ -1,6 +1,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:fluffychat/pages/new_space/new_space_view.dart'; import 'package:fluffychat/pangea/constants/class_default_values.dart'; +import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/pages/class_settings/p_class_widgets/room_capacity_button.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; @@ -156,23 +157,12 @@ class NewSpaceController extends State { } final spaceId = await client.createRoom( // #Pangea - // preset: publicGroup - // ? sdk.CreateRoomPreset.publicChat - // : sdk.CreateRoomPreset.privateChat, preset: sdk.CreateRoomPreset.publicChat, - // Pangea# creationContent: {'type': RoomCreationTypes.mSpace}, visibility: publicGroup ? sdk.Visibility.public : null, - // #Pangea - // roomAliasName: publicGroup - // ? nameController.text.trim().toLowerCase().replaceAll(' ', '_') - // : null, - roomAliasName: classCode, - // Pangea# name: nameController.text.trim(), topic: topicController.text.isEmpty ? null : topicController.text, // #Pangea - // powerLevelContentOverride: {'events_default': 100}, powerLevelContentOverride: addToSpaceKey.currentState != null ? await ClassChatPowerLevels.powerLevelOverrideForClassChat( context, @@ -192,8 +182,8 @@ class NewSpaceController extends State { sdk.StateEvent( type: sdk.EventTypes.RoomJoinRules, content: { - 'join_rule': 'knock', - 'access_code': classCode, + ModelKey.joinRule: sdk.JoinRules.knock, + ModelKey.accessCode: classCode, }, ), ], diff --git a/lib/pangea/constants/class_code_constants.dart b/lib/pangea/constants/class_code_constants.dart new file mode 100644 index 000000000..491834a0f --- /dev/null +++ b/lib/pangea/constants/class_code_constants.dart @@ -0,0 +1,3 @@ +const String noClassCode = 'No class code!'; + +String? justInputtedCode; diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/controllers/class_controller.dart index 48623fe9d..5f290a8e8 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/controllers/class_controller.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; +import 'package:fluffychat/pangea/constants/class_code_constants.dart'; import 'package:fluffychat/pangea/constants/local.key.dart'; import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; @@ -85,8 +86,8 @@ class ClassController extends BaseController { return; } final knockResult = jsonDecode(knockResponse.body); - final foundClasses = knockResult['rooms']; - if (!(foundClasses is List && foundClasses.isNotEmpty)) { + final foundClasses = List.from(knockResult['rooms']); + if (foundClasses.isEmpty) { SpaceCodeUtil.messageSnack( context, L10n.of(context)!.unableToFindClass, @@ -94,16 +95,16 @@ class ClassController extends BaseController { return; } final chosenClassId = foundClasses.first; - await client.joinRoomById(chosenClassId); if (_pangeaController.matrixState.client.rooms .any((room) => room.id == chosenClassId)) { setActiveSpaceIdInChatListController(chosenClassId); SpaceCodeUtil.messageSnack(context, L10n.of(context)!.alreadyInClass); return; + } else { + justInputtedCode = classCode; + await client.joinRoomById(chosenClassId); } - await _pangeaController.matrixState.client.joinRoom(chosenClassId); - if (_pangeaController.matrixState.client.getRoomById(chosenClassId) == null) { await _pangeaController.matrixState.client.waitForRoomInSync( 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 813fb7f1c..162b4f238 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart @@ -5,6 +5,7 @@ import 'dart:developer'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/bot_mode.dart'; +import 'package:fluffychat/pangea/constants/class_code_constants.dart'; import 'package:fluffychat/pangea/constants/class_default_values.dart'; import 'package:fluffychat/pangea/constants/language_constants.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; diff --git a/lib/pangea/extensions/pangea_room_extension/space_settings_extension.dart b/lib/pangea/extensions/pangea_room_extension/space_settings_extension.dart index fce45f17a..60af461a2 100644 --- a/lib/pangea/extensions/pangea_room_extension/space_settings_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/space_settings_extension.dart @@ -22,7 +22,7 @@ extension SpaceRoomExtension on Room { return accessCode; } } - return "No class code!"; + return noClassCode; } void _checkClass() { diff --git a/lib/pangea/utils/chat_list_handle_space_tap.dart b/lib/pangea/utils/chat_list_handle_space_tap.dart index f6605d03f..02f0fab81 100644 --- a/lib/pangea/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/utils/chat_list_handle_space_tap.dart @@ -1,6 +1,7 @@ import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:fluffychat/pangea/constants/class_code_constants.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; @@ -107,6 +108,9 @@ void chatListHandleSpaceTap( ); if (rooms.any((s) => s.spaceChildren.any((c) => c.roomId == space.id))) { autoJoin(space); + } else if (justInputtedCode != null && + space.classCode == justInputtedCode) { + // do nothing } else { showAlertDialog(context); } diff --git a/lib/pangea/utils/space_code.dart b/lib/pangea/utils/space_code.dart index 376450101..946e4b1e3 100644 --- a/lib/pangea/utils/space_code.dart +++ b/lib/pangea/utils/space_code.dart @@ -7,10 +7,11 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; class SpaceCodeUtil { - static const codeLength = 6; + static const codeLength = 7; static bool isValidCode(String? spacecode) { - return spacecode == null || spacecode.length > 4; + if (spacecode == null) return false; + return spacecode.length == codeLength && spacecode.contains(r'[0-9]'); } static Future generateSpaceCode(Client client) async {