mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-21 18:50:47 +03:00
Merge pull request #1535 from Nheko-Reborn/powerlevelsInTimeline
Show an indicator in the timeline for mods and admins
This commit is contained in:
commit
70ede75aa5
6 changed files with 71 additions and 34 deletions
|
@ -729,6 +729,7 @@ set(QML_SOURCES
|
|||
resources/qml/components/MainWindowDialog.qml
|
||||
resources/qml/components/NhekoTabButton.qml
|
||||
resources/qml/components/NotificationBubble.qml
|
||||
resources/qml/components/PowerlevelIndicator.qml
|
||||
resources/qml/components/ReorderableListview.qml
|
||||
resources/qml/components/SpaceMenuLevel.qml
|
||||
resources/qml/components/TextButton.qml
|
||||
|
|
|
@ -100,6 +100,7 @@ Item {
|
|||
required property string url
|
||||
required property string userId
|
||||
required property string userName
|
||||
required property int userPowerlevel
|
||||
|
||||
ListView.delayRemove: true
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
|
||||
|
@ -119,6 +120,7 @@ Item {
|
|||
property date timestamp: wrapper.timestamp
|
||||
property string userId: wrapper.userId
|
||||
property string userName: wrapper.userName
|
||||
property int userPowerlevel: wrapper.userPowerlevel
|
||||
|
||||
active: previousMessageUserId !== userId || previousMessageDay !== day || previousMessageIsStateEvent !== isStateEvent
|
||||
//asynchronous: true
|
||||
|
@ -562,14 +564,25 @@ Item {
|
|||
|
||||
target: room
|
||||
}
|
||||
|
||||
AbstractButton {
|
||||
id: userNameButton
|
||||
|
||||
PowerlevelIndicator {
|
||||
id: powerlevelIndicator
|
||||
anchors.left: parent.left
|
||||
//anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
powerlevel: userPowerlevel
|
||||
permissions: room ? room.permissions : null
|
||||
visible: isAdmin || isModerator
|
||||
}
|
||||
|
||||
ToolTip.delay: Nheko.tooltipDelay
|
||||
ToolTip.text: userId
|
||||
ToolTip.visible: hovered
|
||||
leftPadding: powerlevelIndicator.visible ? 16 : 0
|
||||
leftInset: 0
|
||||
leftPadding: 0
|
||||
rightInset: 0
|
||||
rightPadding: 0
|
||||
|
||||
|
|
42
resources/qml/components/PowerlevelIndicator.qml
Normal file
42
resources/qml/components/PowerlevelIndicator.qml
Normal file
|
@ -0,0 +1,42 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import im.nheko
|
||||
|
||||
Image {
|
||||
required property int powerlevel
|
||||
required property var permissions
|
||||
|
||||
readonly property bool isAdmin: permissions ? permissions.changeLevel(MtxEvent.PowerLevels) <= powerlevel : false
|
||||
readonly property bool isModerator: permissions ? permissions.redactLevel() <= powerlevel : false
|
||||
readonly property bool isDefault: permissions ? permissions.defaultLevel() <= powerlevel : false
|
||||
|
||||
readonly 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?";
|
||||
}
|
||||
|
||||
sourceSize.width: 16
|
||||
sourceSize.height: 16
|
||||
source: sourceUrl + (ma.hovered ? palette.highlight : palette.buttonText)
|
||||
ToolTip.visible: ma.hovered
|
||||
ToolTip.text: {
|
||||
if (isAdmin)
|
||||
return qsTr("Administrator: %1").arg(powerlevel);
|
||||
else if (isModerator)
|
||||
return qsTr("Moderator: %1").arg(powerlevel);
|
||||
else
|
||||
return qsTr("User: %1").arg(powerlevel);
|
||||
}
|
||||
|
||||
HoverHandler {
|
||||
id: ma
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
import ".."
|
||||
import "../ui"
|
||||
import "../components"
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
|
@ -159,39 +160,9 @@ ApplicationWindow {
|
|||
|
||||
}
|
||||
|
||||
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?";
|
||||
}
|
||||
|
||||
Layout.preferredWidth: 16
|
||||
Layout.preferredHeight: 16
|
||||
sourceSize.width: width
|
||||
sourceSize.height: height
|
||||
source: sourceUrl + (ma.hovered ? palette.highlight : palette.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
|
||||
}
|
||||
|
||||
PowerlevelIndicator {
|
||||
powerlevel: model.powerlevel
|
||||
permissions: room.permissions
|
||||
}
|
||||
|
||||
EncryptionIndicator {
|
||||
|
|
|
@ -535,6 +535,7 @@ TimelineModel::roleNames() const
|
|||
{IsSender, "isSender"},
|
||||
{UserId, "userId"},
|
||||
{UserName, "userName"},
|
||||
{UserPowerlevel, "userPowerlevel"},
|
||||
{Day, "day"},
|
||||
{Timestamp, "timestamp"},
|
||||
{Url, "url"},
|
||||
|
@ -597,6 +598,14 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
|
|||
return QVariant(QString::fromStdString(acc::sender(event)));
|
||||
case UserName:
|
||||
return QVariant(displayName(QString::fromStdString(acc::sender(event))));
|
||||
case UserPowerlevel: {
|
||||
return static_cast<qlonglong>(mtx::events::state::PowerLevels{
|
||||
cache::client()
|
||||
->getStateEvent<mtx::events::state::PowerLevels>(room_id_.toStdString())
|
||||
.value_or(mtx::events::StateEvent<mtx::events::state::PowerLevels>{})
|
||||
.content}
|
||||
.user_level(acc::sender(event)));
|
||||
}
|
||||
|
||||
case Day: {
|
||||
QDateTime prevDate = origin_server_ts(event);
|
||||
|
|
|
@ -241,6 +241,7 @@ public:
|
|||
IsSender,
|
||||
UserId,
|
||||
UserName,
|
||||
UserPowerlevel,
|
||||
Day,
|
||||
Timestamp,
|
||||
Url,
|
||||
|
|
Loading…
Reference in a new issue