Student enter invalid code, shows class room not found error

This commit is contained in:
WilsonLe 2024-10-15 17:10:34 +11:00
parent 550c3ab699
commit f780f450ee
7 changed files with 21 additions and 21 deletions

View file

@ -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<NewSpace> {
}
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<NewSpace> {
sdk.StateEvent(
type: sdk.EventTypes.RoomJoinRules,
content: {
'join_rule': 'knock',
'access_code': classCode,
ModelKey.joinRule: sdk.JoinRules.knock,
ModelKey.accessCode: classCode,
},
),
],

View file

@ -0,0 +1,3 @@
const String noClassCode = 'No class code!';
String? justInputtedCode;

View file

@ -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<String> && foundClasses.isNotEmpty)) {
final foundClasses = List<String>.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(

View file

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

View file

@ -22,7 +22,7 @@ extension SpaceRoomExtension on Room {
return accessCode;
}
}
return "No class code!";
return noClassCode;
}
void _checkClass() {

View file

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

View file

@ -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<String?> generateSpaceCode(Client client) async {