File indexing completed on 2024-04-28 04:57:10

0001 /**
0002  * SPDX-FileCopyrightText: 2015 Holger Kaelberer <holger.k@elberer.de>
0003  * SPDX-FileCopyrightText: 2018 Richard Liebscher <richard.liebscher@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #pragma once
0009 
0010 #include "notificationslistener.h"
0011 
0012 #include <atomic>
0013 
0014 #include <QThread>
0015 
0016 #include <dbus/dbus.h>
0017 
0018 class DBusNotificationsListenerThread : public QThread
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     void run() override;
0024     void stop();
0025     void handleNotifyCall(DBusMessage *message);
0026 
0027 Q_SIGNALS:
0028     void notificationReceived(const QString &, uint, const QString &, const QString &, const QString &, const QStringList &, const QVariantMap &, int);
0029 
0030 private:
0031     std::atomic<DBusConnection *> m_connection = nullptr;
0032 };
0033 
0034 class DBusNotificationsListener : public NotificationsListener
0035 {
0036     Q_OBJECT
0037 
0038 public:
0039     explicit DBusNotificationsListener(KdeConnectPlugin *aPlugin);
0040     ~DBusNotificationsListener() override;
0041 
0042 private:
0043     void onNotify(const QString &, uint, const QString &, const QString &, const QString &, const QStringList &, const QVariantMap &, int);
0044 
0045     bool parseImageDataArgument(const QVariant &argument,
0046                                 int &width,
0047                                 int &height,
0048                                 int &rowStride,
0049                                 int &bitsPerSample,
0050                                 int &channels,
0051                                 bool &hasAlpha,
0052                                 QByteArray &imageData) const;
0053     QSharedPointer<QIODevice> iconForImageData(const QVariant &argument) const;
0054     QSharedPointer<QIODevice> iconForIconName(const QString &iconName) const;
0055     QSharedPointer<QIODevice> pngFromImage() const;
0056 
0057     DBusNotificationsListenerThread *m_thread = nullptr;
0058 };