From 80ebe3f29debb7f2020757252d1e2b4ae8a45869 Mon Sep 17 00:00:00 2001 From: Max Sandholm Date: Wed, 11 Jul 2018 17:33:02 +0300 Subject: Working D-Bus desktop notifications (#361) * Working D-Bus desktop notifications * Remove return type on constructor * Fix the Windows placeholder class * Fix wrong variable name * Fix windows and macOS versions of notificationsmanager --- include/ChatPage.h | 11 +++++++++ include/notifications/Manager.h | 51 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 4 deletions(-) (limited to 'include') diff --git a/include/ChatPage.h b/include/ChatPage.h index 3b1562b3..39fb7565 100644 --- a/include/ChatPage.h +++ b/include/ChatPage.h @@ -30,6 +30,7 @@ #include "CommunitiesList.h" #include "Community.h" #include "MatrixClient.h" +#include "notifications/Manager.h" class OverlayModal; class QuickSwitcher; @@ -42,6 +43,7 @@ class TopRoomBar; class TypingDisplay; class UserInfoWidget; class UserSettings; +class NotificationsManager; namespace dialogs { class ReadReceipts; @@ -140,6 +142,13 @@ signals: void syncTopBar(const std::map &updates); void dropToLoginPageCb(const QString &msg); + void notifyMessage(const QString &roomid, + const QString &eventid, + const QString &roomname, + const QString &sender, + const QString &message, + const QImage &icon); + private slots: void showUnreadMessageNotification(int count); void updateTopBarAvatar(const QString &roomid, const QPixmap &img); @@ -238,6 +247,8 @@ private: // Global user settings. QSharedPointer userSettings_; + + NotificationsManager notificationsManager; }; template diff --git a/include/notifications/Manager.h b/include/notifications/Manager.h index 4ee4cb98..4ac60097 100644 --- a/include/notifications/Manager.h +++ b/include/notifications/Manager.h @@ -1,12 +1,55 @@ #pragma once #include +#include #include -class NotificationsManager +#if defined(Q_OS_LINUX) +#include +#include +#endif + +struct roomEventId { + QString roomId; + QString eventId; +}; + +class NotificationsManager : public QObject +{ + Q_OBJECT public: - static void postNotification(const QString &room, - const QString &user, - const QString &message); + NotificationsManager(QObject *parent = nullptr); + + void postNotification(const QString &roomId, + const QString &eventId, + const QString &roomName, + const QString &senderName, + const QString &text, + const QImage &icon); + +signals: + void notificationClicked(const QString roomId, const QString eventId); + +#if defined(Q_OS_LINUX) +private: + QDBusInterface dbus; + uint showNotification(const QString summary, const QString text, const QImage image); + + // notification ID to (room ID, event ID) + QMap notificationIds; +#endif + + // these slots are platform specific (D-Bus only) + // but Qt slot declarations can not be inside an ifdef! +private slots: + void actionInvoked(uint id, QString action); + void notificationClosed(uint id, uint reason); }; + +#if defined(Q_OS_LINUX) +QDBusArgument & +operator<<(QDBusArgument &arg, const QImage &image); +const QDBusArgument & +operator>>(const QDBusArgument &arg, QImage &); +#endif -- cgit 1.5.1