diff --git a/src/qml/Panel/RoomDrawer.qml b/src/qml/Panel/RoomDrawer.qml index 8b4016cbb..d563b5c61 100644 --- a/src/qml/Panel/RoomDrawer.qml +++ b/src/qml/Panel/RoomDrawer.qml @@ -291,7 +291,8 @@ Kirigami.OverlayDrawer { room: roomDrawer.room } - sortRole: "perm" + sortRole: "powerLevel" + sortOrder: Qt.DescendingOrder filterRole: "name" filterCaseSensitivity: Qt.CaseInsensitive } @@ -325,22 +326,9 @@ Kirigami.OverlayDrawer { } trailing: QQC2.Label { - visible: perm != UserType.Member + visible: powerLevel > 0 - text: { - switch (perm) { - case UserType.Owner: - return i18n("Owner"); - case UserType.Admin: - return i18n("Admin"); - case UserType.Moderator: - return i18n("Mod"); - case UserType.Muted: - return i18n("Muted"); - default: - return ""; - } - } + text: powerLevelString color: Kirigami.Theme.disabledTextColor textFormat: Text.PlainText wrapMode: Text.NoWrap diff --git a/src/qml/RoomSettings/Permissions.qml b/src/qml/RoomSettings/Permissions.qml index 05b9eb9ac..4e0d60cb8 100644 --- a/src/qml/RoomSettings/Permissions.qml +++ b/src/qml/RoomSettings/Permissions.qml @@ -44,10 +44,11 @@ Kirigami.ScrollablePage { Repeater { model: KSortFilterProxyModel { sourceModel: userListModel - sortRole: "perm" + sortRole: "powerLevel" + sortOrder: Qt.DescendingOrder filterRowCallback: function(source_row, source_parent) { - let permRole = sourceModel.data(sourceModel.index(source_row, 0, source_parent), Qt.UserRole + 5) - return permRole != UserType.Muted && permRole != UserType.Member; + let powerLevelRole = sourceModel.data(sourceModel.index(source_row, 0, source_parent), Qt.UserRole + 5) + return powerLevelRole > 0; } } delegate: MobileForm.FormTextDelegate { @@ -57,22 +58,7 @@ Kirigami.ScrollablePage { spacing: Kirigami.Units.largeSpacing QQC2.Label { visible: !room.canSendState("m.room.power_levels") - text: { - switch (perm) { - case UserType.Owner: - return i18n("Owner"); - case UserType.Admin: - return i18n("Admin"); - case UserType.Moderator: - return i18n("Mod"); - case UserType.Muted: - return i18n("Muted"); - case UserType.Member: - return i18n("Member"); - default: - return "" - } - } + text: powerLevelString color: Kirigami.Theme.disabledTextColor } QQC2.ComboBox { @@ -191,22 +177,9 @@ Kirigami.ScrollablePage { } trailing: QQC2.Label { - visible: perm != UserType.Member + visible: powerLevel > 0 - text: { - switch (perm) { - case UserType.Owner: - return i18n("Owner"); - case UserType.Admin: - return i18n("Admin"); - case UserType.Moderator: - return i18n("Mod"); - case UserType.Muted: - return i18n("Muted"); - default: - return ""; - } - } + text: powerLevelString color: Kirigami.Theme.disabledTextColor textFormat: Text.PlainText wrapMode: Text.NoWrap diff --git a/src/userlistmodel.cpp b/src/userlistmodel.cpp index fa436d50f..3b9217e96 100644 --- a/src/userlistmodel.cpp +++ b/src/userlistmodel.cpp @@ -95,48 +95,29 @@ QVariant UserListModel::data(const QModelIndex &index, int role) const if (role == ObjectRole) { return QVariant::fromValue(user); } - if (role == PermRole) { - auto pl = m_currentRoom->getCurrentState(); - auto userPl = pl->powerLevelForUser(user->id()); - - if (userPl == pl->content().usersDefault) { // Shortcut - return UserType::Member; - } - - if (userPl < pl->powerLevelForEvent("m.room.message")) { - return UserType::Muted; - } - - auto userPls = pl->users(); - - int highestPl = pl->usersDefault(); - QHash::const_iterator i = userPls.constBegin(); - while (i != userPls.constEnd()) { - if (i.value() > highestPl) { - highestPl = i.value(); - } - - ++i; - } - - if (userPl == highestPl) { - return UserType::Owner; - } - - if (userPl >= pl->powerLevelForState("m.room.power_levels")) { - return UserType::Admin; - } - - if (userPl >= pl->ban() || userPl >= pl->kick() || userPl >= pl->redact()) { - return UserType::Moderator; - } - - return UserType::Member; - } if (role == PowerLevelRole) { auto pl = m_currentRoom->getCurrentState(); return pl->powerLevelForUser(user->id()); } + if (role == PowerLevelStringRole) { +#ifdef QUOTIENT_07 + auto pl = m_currentRoom->currentState().get(); +#else + auto pl = m_currentRoom->getCurrentState(); +#endif + auto userPl = pl->powerLevelForUser(user->id()); + + switch (userPl) { + case 0: + return QStringLiteral("Member"); + case 50: + return QStringLiteral("Moderator"); + case 100: + return QStringLiteral("Admin"); + default: + return QStringLiteral("Custom"); + } + } return {}; } @@ -241,8 +222,8 @@ QHash UserListModel::roleNames() const roles[UserIdRole] = "userId"; roles[AvatarRole] = "avatar"; roles[ObjectRole] = "user"; - roles[PermRole] = "perm"; roles[PowerLevelRole] = "powerLevel"; + roles[PowerLevelStringRole] = "powerLevelString"; return roles; } diff --git a/src/userlistmodel.h b/src/userlistmodel.h index baead6960..644f7a424 100644 --- a/src/userlistmodel.h +++ b/src/userlistmodel.h @@ -27,6 +27,7 @@ public: Moderator, Member, Muted, + Custom, }; Q_ENUM(Types) }; @@ -41,8 +42,8 @@ public: UserIdRole, AvatarRole, ObjectRole, - PermRole, PowerLevelRole, + PowerLevelStringRole, }; UserListModel(QObject *parent = nullptr); @@ -57,8 +58,6 @@ public: [[nodiscard]] QHash roleNames() const override; - // Q_INVOKABLE - Q_SIGNALS: void roomChanged(); void usersRefreshed();