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 };