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<QString, RoomInfo> &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> userSettings_;
+
+ NotificationsManager notificationsManager;
};
template<class Collection>
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 <QImage>
+#include <QObject>
#include <QString>
-class NotificationsManager
+#if defined(Q_OS_LINUX)
+#include <QtDBus/QDBusArgument>
+#include <QtDBus/QDBusInterface>
+#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<uint, roomEventId> 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
|