diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 97374d23..a89fdbc8 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1155,7 +1155,7 @@ class ChatController extends State true, false, ); - users.sort((a, b) => a.powerLevel.compareTo(b.powerLevel)); + users.sort((a, b) => a.powerLevel.level.compareTo(b.powerLevel.level)); final via = users .map((user) => user.id.domain) .whereType() diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index f85b8604..353eca0d 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -385,17 +385,20 @@ class Message extends StatelessWidget { ? const SizedBox(height: 12) : Row( children: [ - if (sender.powerLevel >= 50) + if (sender.powerLevel.role != + PowerLevelRole.user) Padding( padding: const EdgeInsets.only( right: 2.0, ), child: Icon( - sender.powerLevel >= 100 + sender.powerLevel.role == + PowerLevelRole + .moderator ? Icons - .admin_panel_settings + .add_moderator_outlined : Icons - .add_moderator_outlined, + .admin_panel_settings, size: 14, color: theme .colorScheme diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart index 4260ca5b..03748ab9 100644 --- a/lib/pages/chat_details/chat_details_view.dart +++ b/lib/pages/chat_details/chat_details_view.dart @@ -44,7 +44,7 @@ class ChatDetailsView extends StatelessWidget { ), builder: (context, snapshot) { var members = room.getParticipants().toList() - ..sort((b, a) => a.powerLevel.compareTo(b.powerLevel)); + ..sort((b, a) => a.powerLevel.level.compareTo(b.powerLevel.level)); members = members.take(10).toList(); final actualMembersCount = (room.summary.mInvitedMemberCount ?? 0) + diff --git a/lib/pages/chat_details/participant_list_item.dart b/lib/pages/chat_details/participant_list_item.dart index 2a6ffa89..b1d45d35 100644 --- a/lib/pages/chat_details/participant_list_item.dart +++ b/lib/pages/chat_details/participant_list_item.dart @@ -23,13 +23,16 @@ class ParticipantListItem extends StatelessWidget { Membership.leave => L10n.of(context).leftTheChat, }; - final permissionBatch = user.room.creatorUserIds.contains(user.id) - ? L10n.of(context).owner - : user.powerLevel >= 100 - ? L10n.of(context).admin - : user.powerLevel >= 50 - ? L10n.of(context).moderator - : ''; + final permissionBatch = switch (user.powerLevel.role) { + PowerLevelRole.user => '', + PowerLevelRole.moderator => L10n.of(context).moderator, + PowerLevelRole.admin => L10n.of(context).admin, + PowerLevelRole.owner => L10n.of(context).owner, + }; + + final isAdminOrOwner = + user.powerLevel.role == PowerLevelRole.admin || + user.powerLevel.role == PowerLevelRole.owner; return ListTile( onTap: () => showMemberActionsPopupMenu(context: context, user: user), @@ -45,7 +48,7 @@ class ParticipantListItem extends StatelessWidget { Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( - color: user.powerLevel >= 100 + color: isAdminOrOwner ? theme.colorScheme.tertiary : theme.colorScheme.tertiaryContainer, borderRadius: BorderRadius.circular(AppConfig.borderRadius), @@ -53,7 +56,7 @@ class ParticipantListItem extends StatelessWidget { child: Text( permissionBatch, style: theme.textTheme.labelSmall?.copyWith( - color: user.powerLevel >= 100 + color: isAdminOrOwner ? theme.colorScheme.onTertiary : theme.colorScheme.onTertiaryContainer, ), diff --git a/lib/pages/chat_members/chat_members.dart b/lib/pages/chat_members/chat_members.dart index a652eff0..d0ca0f1f 100644 --- a/lib/pages/chat_members/chat_members.dart +++ b/lib/pages/chat_members/chat_members.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; - import 'package:matrix/matrix.dart'; import '../../widgets/matrix.dart'; @@ -39,7 +38,7 @@ class ChatMembersController extends State { if (filter.isEmpty) { setState(() { filteredMembers = members - ?..sort((b, a) => a.powerLevel.compareTo(b.powerLevel)); + ?..sort((b, a) => a.powerLevel.level.compareTo(b.powerLevel.level)); }); return; } @@ -52,7 +51,7 @@ class ChatMembersController extends State { user.id.toLowerCase().contains(filter), ) .toList() - ?..sort((b, a) => a.powerLevel.compareTo(b.powerLevel)); + ?..sort((b, a) => a.powerLevel.level.compareTo(b.powerLevel.level)); }); } diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 1ae71387..a17cf6ff 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -81,7 +81,7 @@ Future showMemberActionsPopupMenu({ ), ), if (user.canChangeUserPowerLevel) ...[ - if (user.powerLevel < 100) + if (user.powerLevel.level < 100) PopupMenuItem( value: _MemberActions.makeAdmin, child: Row( @@ -92,7 +92,7 @@ Future showMemberActionsPopupMenu({ ], ), ), - if (user.powerLevel < 50) + if (user.powerLevel.level < 50) PopupMenuItem( value: _MemberActions.makeModerator, child: Row( @@ -103,7 +103,7 @@ Future showMemberActionsPopupMenu({ ], ), ), - if (user.powerLevel >= 100) + if (user.powerLevel.role == PowerLevelRole.admin) PopupMenuItem( value: _MemberActions.removeAdmin, child: Row( @@ -114,7 +114,7 @@ Future showMemberActionsPopupMenu({ ], ), ) - else if (user.powerLevel >= 50) + else if (user.powerLevel.role == PowerLevelRole.moderator) PopupMenuItem( value: _MemberActions.removeModerator, child: Row( @@ -127,7 +127,7 @@ Future showMemberActionsPopupMenu({ ), ], if (user.canChangeUserPowerLevel || - !defaultPowerLevels.contains(user.powerLevel)) + !defaultPowerLevels.contains(user.powerLevel.level)) PopupMenuItem( value: _MemberActions.setPowerLevel, enabled: user.canChangeUserPowerLevel, @@ -140,7 +140,7 @@ Future showMemberActionsPopupMenu({ ? L10n.of(context).setPowerLevel : L10n.of(context).powerLevel, ), - if (!defaultPowerLevels.contains(user.powerLevel)) + if (!defaultPowerLevels.contains(user.powerLevel.level)) Text(' (${user.powerLevel})'), ], ), @@ -219,8 +219,8 @@ Future showMemberActionsPopupMenu({ case _MemberActions.setPowerLevel: final power = await showPermissionChooser( context, - currentLevel: user.powerLevel, - maxLevel: user.room.ownPowerLevel, + currentLevel: user.powerLevel.level, + maxLevel: user.room.ownPowerLevel.level, ); if (power == null) return; if (!context.mounted) return; @@ -323,7 +323,7 @@ Future showMemberActionsPopupMenu({ ); } case _MemberActions.makeAdmin: - if (user.room.ownPowerLevel <= 100) { + if (user.room.ownPowerLevel.level <= 100) { final consent = await showOkCancelAlertDialog( context: context, title: L10n.of(context).areYouSure, diff --git a/pubspec.lock b/pubspec.lock index d0167bb3..8e6e7125 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1072,10 +1072,10 @@ packages: dependency: "direct main" description: name: matrix - sha256: "5bb38e98212bc4c3244c762a1af787f7239a38d2cfdf44488258283ff899f77c" + sha256: "0da5f65016c704bda81eae807cdadc18a046a444fa7e5cec83e60e5d04006d17" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "7.0.0" meta: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4b60a5ce..8f5aa735 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,7 +49,7 @@ dependencies: intl: any just_audio: ^0.10.5 latlong2: ^0.9.1 - matrix: ^6.2.0 + matrix: ^7.0.0 mime: ^2.0.0 native_imaging: ^0.4.0 opus_caf_converter_dart: ^1.0.1