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; using Memberships = std::map; 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();