From be802a28c2120ce7ba9feae043cd98356a5a1d9a Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Mon, 28 Feb 2022 23:11:33 +0100 Subject: [PATCH] Make invitation notifications persistent --- imports/NeoChat/Page/RoomPage.qml | 4 ++++ src/neochatroom.cpp | 5 +++++ src/neochatroom.h | 1 + src/notificationsmanager.cpp | 20 +++++++++++++++++--- src/notificationsmanager.h | 3 +++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/imports/NeoChat/Page/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml index ea4463a13..5845ecf3a 100644 --- a/imports/NeoChat/Page/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -41,6 +41,10 @@ Kirigami.ScrollablePage { if(pageStack.lastItem == page) { pageStack.pop() } + } else { + if(page.currentRoom.isInvite) { + page.currentRoom.clearInvitationNotification(); + } } } } diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 83b3366d2..8fbfefecb 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -806,3 +806,8 @@ QCoro::Task NeoChatRoom::doDeleteMessagesByUser(const QString &user) } } } + +void NeoChatRoom::clearInvitationNotification() +{ + NotificationsManager::instance().clearInvitationNotification(id()); +} diff --git a/src/neochatroom.h b/src/neochatroom.h index 6bbc00696..1cd052615 100644 --- a/src/neochatroom.h +++ b/src/neochatroom.h @@ -121,6 +121,7 @@ public: Q_INVOKABLE QString htmlSafeName() const; Q_INVOKABLE QString htmlSafeDisplayName() const; + Q_INVOKABLE void clearInvitationNotification(); #ifndef QUOTIENT_07 Q_INVOKABLE QString htmlSafeMemberName(const QString &userId) const diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index e02f69828..382a80252 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -89,24 +89,38 @@ void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QStri notification->setText(i18n("%1 invited you to a room", sender)); notification->setTitle(title); notification->setPixmap(img); + notification->setFlags(KNotification::Persistent); notification->setDefaultAction(i18n("Open this invitation in NeoChat")); connect(notification, &KNotification::defaultActivated, this, [=]() { #if defined(HAVE_WINDOWSYSTEM) && KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 90, 0) KWindowSystem::setCurrentXdgActivationToken(notification->xdgActivationToken()); #endif + notification->close(); RoomManager::instance().enterRoom(room); Q_EMIT Controller::instance().showWindow(); }); notification->setActions({i18n("Accept Invitation"), i18n("Reject Invitation")}); - connect(notification, &KNotification::action1Activated, this, [room]() { + connect(notification, &KNotification::action1Activated, this, [this, room, notification]() { room->acceptInvitation(); + notification->close(); }); - connect(notification, &KNotification::action2Activated, this, [room]() { + connect(notification, &KNotification::action2Activated, this, [this, room, notification]() { RoomManager::instance().leaveRoom(room); + notification->close(); + }); + connect(notification, &KNotification::closed, this, [this, room]() { + m_invitations.remove(room->id()); }); notification->setHint(QStringLiteral("x-kde-origin-name"), room->localUser()->id()); notification->sendEvent(); - m_notifications.insert(room->id(), notification); + m_invitations.insert(room->id(), notification); +} + +void NotificationsManager::clearInvitationNotification(const QString &roomId) +{ + if (m_invitations.contains(roomId)) { + m_invitations[roomId]->close(); + } } diff --git a/src/notificationsmanager.h b/src/notificationsmanager.h index 17baa8d90..d3c861108 100644 --- a/src/notificationsmanager.h +++ b/src/notificationsmanager.h @@ -23,8 +23,11 @@ public: postNotification(NeoChatRoom *room, const QString &sender, const QString &text, const QImage &icon, const QString &replyEventId, bool canReply); void postInviteNotification(NeoChatRoom *room, const QString &title, const QString &sender, const QImage &icon); + void clearInvitationNotification(const QString &roomId); + private: NotificationsManager(QObject *parent = nullptr); QMultiMap m_notifications; + QHash> m_invitations; };