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
|
room: roomDrawer.room
|
||||||
}
|
}
|
||||||
|
|
||||||
sortRole: "perm"
|
sortRole: "powerLevel"
|
||||||
|
sortOrder: Qt.DescendingOrder
|
||||||
filterRole: "name"
|
filterRole: "name"
|
||||||
filterCaseSensitivity: Qt.CaseInsensitive
|
filterCaseSensitivity: Qt.CaseInsensitive
|
||||||
}
|
}
|
||||||
@@ -325,22 +326,9 @@ Kirigami.OverlayDrawer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
trailing: QQC2.Label {
|
trailing: QQC2.Label {
|
||||||
visible: perm != UserType.Member
|
visible: powerLevel > 0
|
||||||
|
|
||||||
text: {
|
text: powerLevelString
|
||||||
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 "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
color: Kirigami.Theme.disabledTextColor
|
color: Kirigami.Theme.disabledTextColor
|
||||||
textFormat: Text.PlainText
|
textFormat: Text.PlainText
|
||||||
wrapMode: Text.NoWrap
|
wrapMode: Text.NoWrap
|
||||||
|
|||||||
@@ -44,10 +44,11 @@ Kirigami.ScrollablePage {
|
|||||||
Repeater {
|
Repeater {
|
||||||
model: KSortFilterProxyModel {
|
model: KSortFilterProxyModel {
|
||||||
sourceModel: userListModel
|
sourceModel: userListModel
|
||||||
sortRole: "perm"
|
sortRole: "powerLevel"
|
||||||
|
sortOrder: Qt.DescendingOrder
|
||||||
filterRowCallback: function(source_row, source_parent) {
|
filterRowCallback: function(source_row, source_parent) {
|
||||||
let permRole = sourceModel.data(sourceModel.index(source_row, 0, source_parent), Qt.UserRole + 5)
|
let powerLevelRole = sourceModel.data(sourceModel.index(source_row, 0, source_parent), Qt.UserRole + 5)
|
||||||
return permRole != UserType.Muted && permRole != UserType.Member;
|
return powerLevelRole > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delegate: MobileForm.FormTextDelegate {
|
delegate: MobileForm.FormTextDelegate {
|
||||||
@@ -57,22 +58,7 @@ Kirigami.ScrollablePage {
|
|||||||
spacing: Kirigami.Units.largeSpacing
|
spacing: Kirigami.Units.largeSpacing
|
||||||
QQC2.Label {
|
QQC2.Label {
|
||||||
visible: !room.canSendState("m.room.power_levels")
|
visible: !room.canSendState("m.room.power_levels")
|
||||||
text: {
|
text: powerLevelString
|
||||||
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 ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
color: Kirigami.Theme.disabledTextColor
|
color: Kirigami.Theme.disabledTextColor
|
||||||
}
|
}
|
||||||
QQC2.ComboBox {
|
QQC2.ComboBox {
|
||||||
@@ -191,22 +177,9 @@ Kirigami.ScrollablePage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
trailing: QQC2.Label {
|
trailing: QQC2.Label {
|
||||||
visible: perm != UserType.Member
|
visible: powerLevel > 0
|
||||||
|
|
||||||
text: {
|
text: powerLevelString
|
||||||
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 "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
color: Kirigami.Theme.disabledTextColor
|
color: Kirigami.Theme.disabledTextColor
|
||||||
textFormat: Text.PlainText
|
textFormat: Text.PlainText
|
||||||
wrapMode: Text.NoWrap
|
wrapMode: Text.NoWrap
|
||||||
|
|||||||
@@ -95,48 +95,29 @@ QVariant UserListModel::data(const QModelIndex &index, int role) const
|
|||||||
if (role == ObjectRole) {
|
if (role == ObjectRole) {
|
||||||
return QVariant::fromValue(user);
|
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) {
|
if (role == PowerLevelRole) {
|
||||||
auto pl = m_currentRoom->getCurrentState<RoomPowerLevelsEvent>();
|
auto pl = m_currentRoom->getCurrentState<RoomPowerLevelsEvent>();
|
||||||
return pl->powerLevelForUser(user->id());
|
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 {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -241,8 +222,8 @@ QHash<int, QByteArray> UserListModel::roleNames() const
|
|||||||
roles[UserIdRole] = "userId";
|
roles[UserIdRole] = "userId";
|
||||||
roles[AvatarRole] = "avatar";
|
roles[AvatarRole] = "avatar";
|
||||||
roles[ObjectRole] = "user";
|
roles[ObjectRole] = "user";
|
||||||
roles[PermRole] = "perm";
|
|
||||||
roles[PowerLevelRole] = "powerLevel";
|
roles[PowerLevelRole] = "powerLevel";
|
||||||
|
roles[PowerLevelStringRole] = "powerLevelString";
|
||||||
|
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public:
|
|||||||
Moderator,
|
Moderator,
|
||||||
Member,
|
Member,
|
||||||
Muted,
|
Muted,
|
||||||
|
Custom,
|
||||||
};
|
};
|
||||||
Q_ENUM(Types)
|
Q_ENUM(Types)
|
||||||
};
|
};
|
||||||
@@ -41,8 +42,8 @@ public:
|
|||||||
UserIdRole,
|
UserIdRole,
|
||||||
AvatarRole,
|
AvatarRole,
|
||||||
ObjectRole,
|
ObjectRole,
|
||||||
PermRole,
|
|
||||||
PowerLevelRole,
|
PowerLevelRole,
|
||||||
|
PowerLevelStringRole,
|
||||||
};
|
};
|
||||||
|
|
||||||
UserListModel(QObject *parent = nullptr);
|
UserListModel(QObject *parent = nullptr);
|
||||||
@@ -57,8 +58,6 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;
|
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
// Q_INVOKABLE
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void roomChanged();
|
void roomChanged();
|
||||||
void usersRefreshed();
|
void usersRefreshed();
|
||||||
|
|||||||
Reference in New Issue
Block a user