Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion commet/lib/client/matrix/matrix_role.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ class MatrixRole implements Role {
late int rank;

MatrixRole(this.powerLevel, {String? nameOverride, IconData? iconOverride}) {
if (powerLevel >= 100) {
if (powerLevel >= 150) {
name = "Owner";
rank = 150;
icon = Icons.local_police;
} else if (powerLevel >= 100) {
name = "Admin";
rank = 100;
icon = Icons.security;
Expand Down
27 changes: 24 additions & 3 deletions commet/lib/client/matrix/matrix_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -701,10 +701,31 @@ class MatrixRoom extends Room {

var ids = roles.keys;

var result =
ids.map((e) => (getMemberOrFallback(e), MatrixRole(roles[e]))).toList();
List<(Member, MatrixRole)> result = List.empty(growable: true);

var creationEvent = _matrixRoom.states[matrix.EventTypes.RoomCreate]?[""];
var creator = creationEvent?.senderId;
var roomVersion = int.tryParse(_matrixRoom.roomVersion ?? "1");

if (roomVersion != null && roomVersion >= 12) {
if (_matrixRoom.roomVersion != null && creator != null) {
var additionalCreators =
creationEvent?.content.tryGetList<String>("additional_creators");

for (var id in [
creator,
if (additionalCreators != null) ...additionalCreators
]) {
result.add((getMemberOrFallback(id), MatrixRole(150)));
}
}
}

result.addAll(ids
.map((e) => (getMemberOrFallback(e), MatrixRole(roles[e])))
.where((element) => element.$2.rank != 0));

result.removeWhere((element) => element.$2.rank == 0);
result;

result.sort((a, b) => b.$2.rank.compareTo(a.$2.rank));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ class _MatrixRoomPermissionsPageState extends State<MatrixRoomPermissionsPage> {
late List<MatrixRoomPermissionEntry> permissions;
bool loading = false;

String get labelMatrixPermissionsRoleOwner => Intl.message(
"Owner",
name: "labelMatrixPermissionsRoleOwner",
desc: "Label for the room owner role",
);

String get labelMatrixPermissionsRoleAdmin => Intl.message(
"Admin",
name: "labelMatrixPermissionsRoleAdmin",
Expand Down Expand Up @@ -236,10 +242,14 @@ class _MatrixRoomPermissionsPageState extends State<MatrixRoomPermissionsPage> {

void initPermissions() {
bool isCalendarRoom = widget.showCalendarPermissions;
var version = int.tryParse(widget.room.roomVersion ?? "1");

roles = [
// MatrixRoomRoleEntry(
// name: "Founder", powerlevel: 101, icon: Icons.star_rounded),
if (version != null && version >= 12)
MatrixRoomRoleEntry(
name: labelMatrixPermissionsRoleOwner,
powerlevel: 150,
icon: Icons.local_police),
MatrixRoomRoleEntry(
name: labelMatrixPermissionsRoleAdmin,
powerlevel: 100,
Expand All @@ -250,14 +260,12 @@ class _MatrixRoomPermissionsPageState extends State<MatrixRoomPermissionsPage> {
powerlevel: 50,
icon: Icons.shield_rounded,
),

if (isCalendarRoom)
MatrixRoomRoleEntry(
name: "Calendar Moderator",
powerlevel: 25,
icon: Icons.edit_calendar,
),

MatrixRoomRoleEntry(
name: labelMatrixPermissionsRoleMember,
powerlevel: 0,
Expand Down
Loading