Update userlistmodel permission roles
Change the userlist model so that permission names are based upon the following power level convention: - 0: member - 50: moderator - 100: admin - other: custom This is inline with the new permission room page. Follow on from network/neochat!712
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<RoomPowerLevelsEvent>();
|
||||
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<QString, int>::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<RoomPowerLevelsEvent>();
|
||||
return pl->powerLevelForUser(user->id());
|
||||
}
|
||||
if (role == PowerLevelStringRole) {
|
||||
#ifdef QUOTIENT_07
|
||||
auto pl = m_currentRoom->currentState().get<RoomPowerLevelsEvent>();
|
||||
#else
|
||||
auto pl = m_currentRoom->getCurrentState<RoomPowerLevelsEvent>();
|
||||
#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<int, QByteArray> UserListModel::roleNames() const
|
||||
roles[UserIdRole] = "userId";
|
||||
roles[AvatarRole] = "avatar";
|
||||
roles[ObjectRole] = "user";
|
||||
roles[PermRole] = "perm";
|
||||
roles[PowerLevelRole] = "powerLevel";
|
||||
roles[PowerLevelStringRole] = "powerLevelString";
|
||||
|
||||
return roles;
|
||||
}
|
||||
|
||||
@@ -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<int, QByteArray> roleNames() const override;
|
||||
|
||||
// Q_INVOKABLE
|
||||
|
||||
Q_SIGNALS:
|
||||
void roomChanged();
|
||||
void usersRefreshed();
|
||||
|
||||
Reference in New Issue
Block a user