summary refs log tree commit diff
path: root/src/notifications/Manager.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2022-10-13 17:19:54 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2022-10-13 17:55:07 +0200
commit37009906bb3521db3ae77a0bb39a6943b7ccdec0 (patch)
tree612c6360194266ebb83f96016ff37e6626d57ad6 /src/notifications/Manager.cpp
parentBump mtxclient (diff)
downloadnheko-37009906bb3521db3ae77a0bb39a6943b7ccdec0.tar.xz
Evaluate push rules locally
Diffstat (limited to 'src/notifications/Manager.cpp')
-rw-r--r--src/notifications/Manager.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/notifications/Manager.cpp b/src/notifications/Manager.cpp

index 501bfb3f..6033cc6d 100644 --- a/src/notifications/Manager.cpp +++ b/src/notifications/Manager.cpp
@@ -7,6 +7,7 @@ #include "Cache.h" #include "EventAccessors.h" +#include "Logging.h" #include "Utils.h" QString @@ -33,3 +34,24 @@ NotificationsManager::getMessageTemplate(const mtx::responses::Notification &not return QStringLiteral("%1: %2").arg(sender); } } + +void +NotificationsManager::removeNotifications(const QString &roomId, + const std::vector<QString> &eventIds) +{ + std::string room_id = roomId.toStdString(); + + std::uint64_t markerPos = 0; + for (const auto &e : eventIds) { + markerPos = std::max(markerPos, cache::getEventIndex(room_id, e.toStdString()).value_or(0)); + } + + for (const auto &[roomId, eventId] : this->notificationIds) { + if (roomId != roomId) + continue; + auto idx = cache::getEventIndex(room_id, eventId.toStdString()); + if (!idx || markerPos >= idx) { + removeNotification(roomId, eventId); + } + } +}