diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9256c4..60f16d9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d + GIT_TAG 7155cbb8ed3289f2cc7269da7607b0dd012f471b ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 7f3aefc3..f41f71b4 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d + - commit: 7155cbb8ed3289f2cc7269da7607b0dd012f471b #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 5e0a7b73..1910ce0b 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -261,6 +261,10 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) cache::getEventIndex(room_id, cache::client()->getFullyReadEventId(room_id)); auto ctx = roomModel->pushrulesRoomContext(); + std::vector< + std::pair> + relatedEvents; + for (const auto &event : room.timeline.events) { mtx::events::collections::TimelineEvent te{event}; std::visit([room_id = room_id](auto &event_) { event_.room_id = room_id; }, @@ -277,7 +281,25 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) te.data = result.event.value(); } - auto actions = pushrules->evaluate(te, ctx); + relatedEvents.clear(); + for (const auto &r : mtx::accessors::relations(te.data).relations) { + auto related = cache::client()->getEvent(room_id, r.event_id); + if (related) { + relatedEvents.emplace_back(r, *related); + if (auto encryptedEvent = std::get_if< + mtx::events::EncryptedEvent>( + &related->data); + encryptedEvent && userSettings_->decryptNotifications()) { + MegolmSessionIndex index(room_id, encryptedEvent->content); + + auto result = olm::decryptEvent(index, *encryptedEvent); + if (result.event) + relatedEvents.back().second.data = result.event.value(); + } + } + } + + auto actions = pushrules->evaluate(te, ctx, relatedEvents); if (std::find(actions.begin(), actions.end(), mtx::pushrules::actions::Action{ diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index dedfa197..f61214fd 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -742,7 +742,18 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r case Notificationlevel: { const auto &push = ChatPage::instance()->pushruleEvaluator(); if (push) { - auto actions = push->evaluate({event}, pushrulesRoomContext()); + const auto &id = event_id(event); + std::vector> + relatedEvents; + for (const auto &r : mtx::accessors::relations(event).relations) { + auto related = events.get(r.event_id, id); + if (related) { + relatedEvents.emplace_back(r, + mtx::events::collections::TimelineEvent{*related}); + } + } + + auto actions = push->evaluate({event}, pushrulesRoomContext(), relatedEvents); if (std::find(actions.begin(), actions.end(), mtx::pushrules::actions::Action{