2 files changed, 11 insertions, 2 deletions
diff --git a/include/ChatPage.h b/include/ChatPage.h
index f659163c..6e0cf2d9 100644
--- a/include/ChatPage.h
+++ b/include/ChatPage.h
@@ -117,6 +117,12 @@ private slots:
private:
static ChatPage *instance_;
+ //! Check if the given room is currently open.
+ bool isRoomActive(const QString &room_id)
+ {
+ return isActiveWindow() && currentRoom() == room_id;
+ }
+
using UserID = QString;
using Membership = mtx::events::StateEvent<mtx::events::state::Member>;
using Memberships = std::map<std::string, Membership>;
diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index b4691fdd..1f5fa995 100644
--- a/src/ChatPage.cc
+++ b/src/ChatPage.cc
@@ -868,15 +868,18 @@ ChatPage::sendDesktopNotifications(const mtx::responses::Notifications &res)
if (!cache_->isNotificationSent(event_id)) {
const auto room_id = QString::fromStdString(item.room_id);
const auto user_id = utils::event_sender(item.event);
- const auto body = utils::event_body(item.event);
// We should only sent one notification per event.
cache_->markSentNotification(event_id);
+ // Don't send a notification when the current room is opened.
+ if (isRoomActive(room_id))
+ continue;
+
NotificationsManager::postNotification(
QString::fromStdString(cache_->singleRoomInfo(item.room_id).name),
Cache::displayName(room_id, user_id),
- body);
+ utils::event_body(item.event));
}
} catch (const lmdb::error &e) {
qWarning() << e.what();
|