Highlight higlight tweaks in the timeline

fixes #400
fixes #1136
pull/1222/head
Nicolas Werner 2 years ago
parent 231bebba44
commit 40ac55ddd9
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
  1. 2
      resources/qml/MessageView.qml
  2. 3
      resources/qml/TimelineRow.qml
  3. 5
      src/ChatPage.h
  4. 21
      src/timeline/TimelineModel.cpp
  5. 9
      src/timeline/TimelineModel.h

@ -415,6 +415,7 @@ Item {
required property string callType
required property var reactions
required property int trustlevel
required property int notificationlevel
required property int encryptionError
required property var timestamp
required property int status
@ -482,6 +483,7 @@ Item {
callType: wrapper.callType
reactions: wrapper.reactions
trustlevel: wrapper.trustlevel
notificationlevel: wrapper.notificationlevel
encryptionError: wrapper.encryptionError
timestamp: wrapper.timestamp
status: wrapper.status

@ -41,6 +41,7 @@ AbstractButton {
required property string callType
required property var reactions
required property int trustlevel
required property int notificationlevel
required property int encryptionError
required property int duration
required property var timestamp
@ -117,6 +118,8 @@ AbstractButton {
property color bgColor: Nheko.colors.base
color: (Settings.bubbles && !isStateEvent) ? Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.2)) : "#00000000"
radius: 4
border.width: r.notificationlevel == MtxEvent.Highlight ? 2 : 0
border.color: Nheko.theme.red
GridLayout {
anchors {

@ -78,6 +78,11 @@ public:
//! Check if the given room is currently open.
bool isRoomActive(const QString &room_id);
const std::unique_ptr<mtx::pushrules::PushRuleEvaluator> &pushruleEvaluator() const
{
return pushrules;
}
public slots:
bool handleMatrixUri(QString uri);
bool handleMatrixUri(const QUrl &uri);

@ -526,6 +526,7 @@ TimelineModel::roleNames() const
{IsEncrypted, "isEncrypted"},
{IsStateEvent, "isStateEvent"},
{Trustlevel, "trustlevel"},
{Notificationlevel, "notificationlevel"},
{EncryptionError, "encryptionError"},
{ReplyTo, "replyTo"},
{ThreadId, "threadId"},
@ -737,6 +738,26 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
return crypto::Trust::Unverified;
}
case Notificationlevel: {
const auto &push = ChatPage::instance()->pushruleEvaluator();
if (push) {
auto actions = push->evaluate({event}, pushrulesRoomContext());
if (std::find(actions.begin(),
actions.end(),
mtx::pushrules::actions::Action{
mtx::pushrules::actions::set_tweak_highlight{}}) != actions.end()) {
return qml_mtx_events::NotificationLevel::Highlight;
}
if (std::find(actions.begin(),
actions.end(),
mtx::pushrules::actions::Action{mtx::pushrules::actions::notify{}}) !=
actions.end()) {
return qml_mtx_events::NotificationLevel::Notify;
}
}
return qml_mtx_events::NotificationLevel::Nothing;
}
case EncryptionError:
return events.decryptionError(event_id(event));

@ -151,6 +151,14 @@ enum EventState
Empty,
};
Q_ENUM_NS(EventState)
enum NotificationLevel
{
Nothing,
Notify,
Highlight,
};
Q_ENUM_NS(NotificationLevel)
}
class StateKeeper
@ -242,6 +250,7 @@ public:
IsEncrypted,
IsStateEvent,
Trustlevel,
Notificationlevel,
EncryptionError,
ReplyTo,
ThreadId,

Loading…
Cancel
Save