diff --git a/resources/icons/ui/person.svg b/resources/icons/ui/person.svg
new file mode 100644
index 00000000..a9eb62ad
--- /dev/null
+++ b/resources/icons/ui/person.svg
@@ -0,0 +1 @@
+
diff --git a/resources/icons/ui/ribbon.svg b/resources/icons/ui/ribbon.svg
new file mode 100644
index 00000000..5026f571
--- /dev/null
+++ b/resources/icons/ui/ribbon.svg
@@ -0,0 +1 @@
+
diff --git a/resources/icons/ui/ribbon_star.svg b/resources/icons/ui/ribbon_star.svg
new file mode 100644
index 00000000..3b6603bc
--- /dev/null
+++ b/resources/icons/ui/ribbon_star.svg
@@ -0,0 +1 @@
+
diff --git a/resources/qml/dialogs/RoomMembers.qml b/resources/qml/dialogs/RoomMembers.qml
index 8a12e5bc..608a5acf 100644
--- a/resources/qml/dialogs/RoomMembers.qml
+++ b/resources/qml/dialogs/RoomMembers.qml
@@ -168,6 +168,41 @@ ApplicationWindow {
Layout.fillWidth: true
}
+ Image {
+ property bool isAdmin: room.permissions.changeLevel(MtxEvent.PowerLevels) <= model.powerlevel
+ property bool isModerator: room.permissions.redactLevel() <= model.powerlevel
+ //property bool isDefault: room.permissions.defaultLevel() <= model.powerlevel
+
+ property string sourceUrl: {
+ if (isAdmin)
+ return "image://colorimage/:/icons/icons/ui/ribbon_star.svg?";
+ else if (isModerator)
+ return "image://colorimage/:/icons/icons/ui/ribbon.svg?";
+ else
+ return "image://colorimage/:/icons/icons/ui/person.svg?";
+ }
+
+ width: 16
+ height: 16
+ sourceSize.height: height * Screen.devicePixelRatio
+ sourceSize.width: width * Screen.devicePixelRatio
+ source: sourceUrl + (ma.hovered ? Nheko.colors.highlight : Nheko.colors.buttonText)
+ ToolTip.visible: ma.hovered
+ ToolTip.text: {
+ if (isAdmin)
+ return qsTr("Administrator: %1").arg(model.powerlevel);
+ else if (isModerator)
+ return qsTr("Moderator: %1").arg(model.powerlevel);
+ else
+ return qsTr("User: %1").arg(model.powerlevel);
+ }
+
+ HoverHandler {
+ id: ma
+ }
+
+ }
+
EncryptionIndicator {
id: encryptInd
diff --git a/resources/res.qrc b/resources/res.qrc
index 3ce63f42..35b06704 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -17,12 +17,15 @@
icons/ui/end-call.svg
icons/ui/expanded.svg
icons/ui/image-failed.svg
+ icons/ui/image.svg
icons/ui/lowprio.svg
icons/ui/microphone-mute.svg
icons/ui/microphone-unmute.svg
+ icons/ui/music.svg
icons/ui/options.svg
icons/ui/pause-symbol.svg
icons/ui/people.svg
+ icons/ui/person.svg
icons/ui/picture-in-picture.svg
icons/ui/pin-off.svg
icons/ui/pin.svg
@@ -31,6 +34,8 @@
icons/ui/power-off.svg
icons/ui/refresh.svg
icons/ui/reply.svg
+ icons/ui/ribbon.svg
+ icons/ui/ribbon_star.svg
icons/ui/round-remove-button.svg
icons/ui/screen-share.svg
icons/ui/search.svg
@@ -42,14 +47,12 @@
icons/ui/sticky-note-solid.svg
icons/ui/tag.svg
icons/ui/user-friends-solid.svg
+ icons/ui/video-file.svg
icons/ui/video.svg
icons/ui/volume-off-indicator.svg
icons/ui/volume-up.svg
icons/ui/world.svg
- icons/ui/music.svg
- icons/ui/image.svg
icons/ui/zip.svg
- icons/ui/video-file.svg
icons/emoji-categories/activity.svg
icons/emoji-categories/flags.svg
icons/emoji-categories/foods.svg
diff --git a/src/MemberList.cpp b/src/MemberList.cpp
index fcd9d624..ff1b1a79 100644
--- a/src/MemberList.cpp
+++ b/src/MemberList.cpp
@@ -59,6 +59,7 @@ MemberListBackend::roleNames() const
{DisplayName, "displayName"},
{AvatarUrl, "avatarUrl"},
{Trustlevel, "trustlevel"},
+ {Powerlevel, "powerlevel"},
};
}
diff --git a/src/timeline/Permissions.cpp b/src/timeline/Permissions.cpp
index 917495a2..01d38599 100644
--- a/src/timeline/Permissions.cpp
+++ b/src/timeline/Permissions.cpp
@@ -63,6 +63,31 @@ Permissions::canSend(int eventType)
qml_mtx_events::fromRoomEventType(static_cast(eventType))));
}
+int
+Permissions::defaultLevel()
+{
+ return pl.users_default;
+}
+int
+Permissions::redactLevel()
+{
+ return pl.redact;
+}
+int
+Permissions::changeLevel(int eventType)
+{
+ return
+ pl.state_level(to_string(
+ qml_mtx_events::fromRoomEventType(static_cast(eventType))));
+}
+int
+Permissions::sendLevel(int eventType)
+{
+ return
+ pl.event_level(to_string(
+ qml_mtx_events::fromRoomEventType(static_cast(eventType))));
+}
+
bool
Permissions::canPingRoom()
{
diff --git a/src/timeline/Permissions.h b/src/timeline/Permissions.h
index c0b47b37..1285f01d 100644
--- a/src/timeline/Permissions.h
+++ b/src/timeline/Permissions.h
@@ -25,6 +25,10 @@ public:
Q_INVOKABLE bool canRedact();
Q_INVOKABLE bool canChange(int eventType);
Q_INVOKABLE bool canSend(int eventType);
+ Q_INVOKABLE int defaultLevel();
+ Q_INVOKABLE int redactLevel();
+ Q_INVOKABLE int changeLevel(int eventType);
+ Q_INVOKABLE int sendLevel(int eventType);
Q_INVOKABLE bool canPingRoom();