From 8f568fdb7204b83ed66b6fd214c1f0f260ebb7ea Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Tue, 5 Mar 2024 11:13:23 -0500 Subject: [PATCH] use mode to control invited user's power level --- lib/pages/chat_list/chat_list_item.dart | 10 +- .../invitation_selection.dart | 107 +++++++++++------- .../invitation_selection_view.dart | 6 + 3 files changed, 80 insertions(+), 43 deletions(-) diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index 949b18112..dea77a6eb 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -111,7 +111,15 @@ class ChatListItem extends StatelessWidget { if (room.membership == Membership.join) { // Share content into this room - final shareContent = Matrix.of(context).shareContent; + // #Pangea + // final shareContent = Matrix.of(context).shareContent; + Map? shareContent; + try { + shareContent = Matrix.of(context).shareContent; + } catch (e) { + shareContent = null; + } + // Pangea# if (shareContent != null) { final shareFile = shareContent.tryGet('file'); if (shareContent.tryGet('msgtype') == diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart index 4811934eb..a762d398c 100644 --- a/lib/pages/invitation_selection/invitation_selection.dart +++ b/lib/pages/invitation_selection/invitation_selection.dart @@ -75,7 +75,9 @@ class InvitationSelectionController extends State { } final eligibleStudents = []; - final spaceParents = room.pangeaSpaceParents; + final spaceParents = room?.pangeaSpaceParents; + if (spaceParents == null) return eligibleStudents; + final userId = Matrix.of(context).client.userID; for (final Room space in spaceParents) { eligibleStudents.addAll( @@ -115,15 +117,25 @@ class InvitationSelectionController extends State { ); } - List studentsInRoom(BuildContext context) => room - .getParticipants() - .where( - (u) => [Membership.join, Membership.invite].contains(u.membership), - ) - .toList(); + List studentsInRoom(BuildContext context) => + room + ?.getParticipants() + .where( + (u) => [Membership.join, Membership.invite].contains(u.membership), + ) + .toList() ?? + []; //Pangea# - void inviteAction(BuildContext context, String id, String displayname) async { + // #Pangea + // void inviteAction(BuildContext context, String id, String displayname) async { + void inviteAction( + BuildContext context, + String id, + String displayname, { + InvitationSelectionMode? mode, + }) async { + // Pangea# final room = Matrix.of(context).client.getRoomById(roomId!)!; if (OkCancelResult.ok != await showOkCancelAlertDialog( @@ -144,25 +156,12 @@ class InvitationSelectionController extends State { context: context, //#Pangea // future: () => room.invite(id), - future: () => Future.wait([ - room.invite(id), - room.setPower(id, ClassDefaultValues.powerLevelOfAdmin), - if (room.isSpace) - ...room.spaceChildren - .map( - (e) => roomId != null - ? Matrix.of(context).client.getRoomById(e.roomId!) - : null, - ) - .where((element) => element != null) - .cast() - .map( - (e) => Future.wait([ - e.invite(id), - e.setPower(id, ClassDefaultValues.powerLevelOfAdmin), - ]), - ), - ]), + future: () async { + await room.invite(id); + if (mode == InvitationSelectionMode.admin) { + await inviteTeacherAction(room, id); + } + }, // Pangea# ); if (success.error == null) { @@ -174,6 +173,26 @@ class InvitationSelectionController extends State { } } + // #Pangea + Future inviteTeacherAction(Room room, String id) async { + room.setPower(id, ClassDefaultValues.powerLevelOfAdmin); + if (room.isSpace) { + for (final spaceChild in room.spaceChildren) { + if (spaceChild.roomId == null) continue; + final spaceChildRoom = + Matrix.of(context).client.getRoomById(spaceChild.roomId!); + if (spaceChildRoom != null) { + await spaceChildRoom.invite(id); + await spaceChildRoom.setPower( + id, + ClassDefaultValues.powerLevelOfAdmin, + ); + } + } + } + } + // Pangea# + void searchUserWithCoolDown(String text) async { coolDown?.cancel(); coolDown = Timer( @@ -224,8 +243,8 @@ class InvitationSelectionController extends State { //#Pangea final participants = Matrix.of(context) .client - .getRoomById(roomId!)! - .getParticipants() + .getRoomById(roomId!) + ?.getParticipants() .where( (user) => [Membership.join, Membership.invite].contains(user.membership), @@ -233,7 +252,7 @@ class InvitationSelectionController extends State { .toList(); foundProfiles.removeWhere( (profile) => - participants.indexWhere((u) => u.id == profile.userId) != -1 && + participants?.indexWhere((u) => u.id == profile.userId) != -1 && BotName.byEnvironment != profile.userId, ); //Pangea# @@ -242,17 +261,19 @@ class InvitationSelectionController extends State { //#Pangea Room? _room; - Room get room => _room ??= Matrix.of(context).client.getRoomById(roomId!)!; + Room? get room => _room ??= Matrix.of(context).client.getRoomById(roomId!); // request participants for all parent spaces Future requestParentSpaceParticipants() async { - final spaceParents = room.pangeaSpaceParents; - await Future.wait([ - ...spaceParents.map((r) async { - await r.requestParticipants(); - }), - room.requestParticipants(), - ]); + final spaceParents = room?.pangeaSpaceParents; + if (spaceParents != null) { + await Future.wait([ + ...spaceParents.map((r) async { + await r.requestParticipants(); + }), + room!.requestParticipants(), + ]); + } } InvitationSelectionMode mode = InvitationSelectionMode.member; @@ -263,7 +284,7 @@ class InvitationSelectionController extends State { Future.delayed( Duration.zero, () => setState( - () => mode = room.isSpace + () => mode = room?.isSpace ?? false ? InvitationSelectionMode.admin : InvitationSelectionMode.member, ), @@ -275,9 +296,11 @@ class InvitationSelectionController extends State { .where( (event) => event.rooms?.join?.keys.any( - (ithRoomId) => room.pangeaSpaceParents - .map((e) => e.id) - .contains(ithRoomId), + (ithRoomId) => + room?.pangeaSpaceParents + .map((e) => e.id) + .contains(ithRoomId) ?? + false, ) ?? false, ) diff --git a/lib/pages/invitation_selection/invitation_selection_view.dart b/lib/pages/invitation_selection/invitation_selection_view.dart index 5a2621046..cafa5fec7 100644 --- a/lib/pages/invitation_selection/invitation_selection_view.dart +++ b/lib/pages/invitation_selection/invitation_selection_view.dart @@ -106,6 +106,9 @@ class InvitationSelectionView extends StatelessWidget { controller.foundProfiles[i].displayName ?? controller.foundProfiles[i].userId.localpart ?? L10n.of(context)!.user, + // #Pangea + mode: controller.mode, + // Pangea# ), ), ) @@ -143,6 +146,9 @@ class InvitationSelectionView extends StatelessWidget { contacts[i].displayName ?? contacts[i].id.localpart ?? L10n.of(context)!.user, + // #Pangea + mode: controller.mode, + // Pangea# ), ), );