From 879009a6f733a486fcae71b20a1e5c494d9c1ea1 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sun, 14 Mar 2021 17:03:13 +0000 Subject: [PATCH] Support inline reply needs https://invent.kde.org/frameworks/knotifications/-/merge_requests/28 --- src/neochatroom.cpp | 3 ++- src/notificationsmanager.cpp | 17 ++++++++++++++++- src/notificationsmanager.h | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index b2149d9bb..dd8992184 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -69,7 +69,8 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS avatar_image = this->avatar(128); } - NotificationsManager::instance().postNotification(this, displayName(), sender->displayname(this), eventToString(*lastEvent), avatar_image); + NotificationsManager::instance().postNotification(this, displayName(), sender->displayname(this), + eventToString(*lastEvent), avatar_image, !lastEvent->id().isEmpty() ? lastEvent->id() : lastEvent->transactionId()); }); connect(this, &Room::aboutToAddHistoricalMessages, this, &NeoChatRoom::readMarkerLoadedChanged); diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index cb40ee05f..c389743be 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -5,11 +5,17 @@ */ #include "notificationsmanager.h" +#include + #include #include #include #include +#include "knotifications_version.h" +#if KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 81, 0) +#include +#endif #include "controller.h" #include "neochatconfig.h" @@ -25,7 +31,7 @@ NotificationsManager::NotificationsManager(QObject *parent) { } -void NotificationsManager::postNotification(NeoChatRoom *room, const QString &roomName, const QString &sender, const QString &text, const QImage &icon) +void NotificationsManager::postNotification(NeoChatRoom *room, const QString &roomName, const QString &sender, const QString &text, const QImage &icon, const QString &replyEventId) { if (!NeoChatConfig::self()->showNotifications()) { return; @@ -50,6 +56,15 @@ void NotificationsManager::postNotification(NeoChatRoom *room, const QString &ro Q_EMIT Controller::instance().showWindow(); }); +#if KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 81, 0) + std::unique_ptr replyAction(new KNotificationReplyAction(i18n("Reply"))); + replyAction->setPlaceholderText(i18n("Reply...")); + QObject::connect(replyAction.get(), &KNotificationReplyAction::replied, [room, replyEventId](const QString &text) { + room->postMessage(text, text, RoomMessageEvent::MsgType::Text, replyEventId, QString()); + }); + notification->setReplyAction(std::move(replyAction)); +#endif + notification->sendEvent(); m_notifications.insert(room->id(), notification); diff --git a/src/notificationsmanager.h b/src/notificationsmanager.h index 3aba6ebe9..a1b5b7a2d 100644 --- a/src/notificationsmanager.h +++ b/src/notificationsmanager.h @@ -22,7 +22,7 @@ class NotificationsManager : public QObject public: static NotificationsManager &instance(); - Q_INVOKABLE void postNotification(NeoChatRoom *room, const QString &roomName, const QString &sender, const QString &text, const QImage &icon); + Q_INVOKABLE void postNotification(NeoChatRoom *room, const QString &roomName, const QString &sender, const QString &text, const QImage &icon, const QString &replyEventId); private: NotificationsManager(QObject *parent = nullptr);