diff --git a/src/app/qml/UserDetailDialog.qml b/src/app/qml/UserDetailDialog.qml index 7ab139c0d..e01557e86 100644 --- a/src/app/qml/UserDetailDialog.qml +++ b/src/app/qml/UserDetailDialog.qml @@ -300,7 +300,7 @@ Kirigami.Dialog { } QQC2.Button { - visible: root.room.canSendState("m.room.power_levels") + visible: root.room.canSendState("m.room.power_levels") && !(root.room.roomCreatorHasUltimatePowerLevel() && root.room.isCreator(root.user.id)) text: i18nc("@action:button Set the power level (such as 'Admin') for this user", "Set Power Level") icon.name: "document-edit-symbolic" display: QQC2.AbstractButton.IconOnly diff --git a/src/libneochat/enums/powerlevel.cpp b/src/libneochat/enums/powerlevel.cpp index e80addcf4..534f951b6 100644 --- a/src/libneochat/enums/powerlevel.cpp +++ b/src/libneochat/enums/powerlevel.cpp @@ -12,6 +12,10 @@ QString PowerLevel::nameForLevel(Level level) return i18n("Moderator"); case PowerLevel::Admin: return i18n("Admin"); + case PowerLevel::Owner: + return i18nc("The person that owns a room", "Owner"); + case PowerLevel::Creator: + return i18nc("The person that created a room", "Creator"); case PowerLevel::Mute: return i18n("Mute"); case PowerLevel::Custom: @@ -30,6 +34,8 @@ int PowerLevel::valueForLevel(Level level) return 50; case PowerLevel::Admin: return 100; + case PowerLevel::Owner: + return 150; case PowerLevel::Mute: return -1; default: @@ -46,8 +52,12 @@ PowerLevel::Level PowerLevel::levelForValue(int value) return PowerLevel::Moderator; case 100: return PowerLevel::Admin; + case 150: + return PowerLevel::Owner; case -1: return PowerLevel::Mute; + case std::numeric_limits::max(): + return PowerLevel::Creator; default: return PowerLevel::Custom; } diff --git a/src/libneochat/enums/powerlevel.h b/src/libneochat/enums/powerlevel.h index 173c969f6..87cc23d1d 100644 --- a/src/libneochat/enums/powerlevel.h +++ b/src/libneochat/enums/powerlevel.h @@ -31,10 +31,12 @@ public: enum Level { Member, /**< A basic member. */ Moderator, /**< A moderator with enhanced powers. */ - Admin, /**< The highest power level in the room. */ + Admin, /**< Power level 100. */ + Owner, /**< Power level 150. */ Mute, /**< The level to remove posting privileges. */ NUMLevels, Custom, /**< A non-standard value. Intentionally after NUMLevels so it doesn't appear in the model. */ + Creator, /**< The user creating the (co-)creating the room. */ }; Q_ENUM(Level); diff --git a/src/libneochat/neochatroom.h b/src/libneochat/neochatroom.h index 0c9c29c08..7646c2393 100644 --- a/src/libneochat/neochatroom.h +++ b/src/libneochat/neochatroom.h @@ -615,7 +615,7 @@ public: /** * @brief Whether this user is considered a creator of this room. Only applies to post-v12 rooms. */ - bool isCreator(const QString &userId) const; + Q_INVOKABLE bool isCreator(const QString &userId) const; /** * @return The most recent pinned message in the room.