File indexing completed on 2024-05-12 05:37:09
0001 /* 0002 SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org> 0003 SPDX-FileCopyrightText: 2020 Konrad Materka <materka@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <QDBusError> 0011 #include <QHash> 0012 #include <QObject> 0013 #include <QPointer> 0014 #include <QRegularExpression> 0015 0016 class KPluginMetaData; 0017 class SystemTraySettings; 0018 class QDBusServiceWatcher; 0019 0020 /** 0021 * @brief Loading and unloading Plasmoids when DBus services come and go. 0022 */ 0023 class DBusServiceObserver : public QObject 0024 { 0025 Q_OBJECT 0026 public: 0027 explicit DBusServiceObserver(const QPointer<SystemTraySettings> &settings, QObject *parent = nullptr); 0028 0029 void registerPlugin(const KPluginMetaData &pluginMetaData); 0030 void unregisterPlugin(const QString &pluginId); 0031 bool isDBusActivable(const QString &pluginId); 0032 0033 Q_SIGNALS: 0034 void serviceStarted(const QString &pluginId); 0035 void serviceStopped(const QString &pluginId); 0036 0037 public Q_SLOTS: 0038 void initDBusActivatables(); 0039 0040 private Q_SLOTS: 0041 void sessionBusNameFetchFinished(const QStringList &list); 0042 void systemBusNameFetchFinished(const QStringList &list); 0043 void sessionBusNameFetchError(const QDBusError &error); 0044 void systemBusNameFetchError(const QDBusError &error); 0045 0046 private: 0047 void serviceRegistered(const QString &service); 0048 void serviceUnregistered(const QString &service); 0049 0050 QPointer<SystemTraySettings> m_settings; 0051 0052 QDBusServiceWatcher *m_sessionServiceWatcher; 0053 QDBusServiceWatcher *m_systemServiceWatcher; 0054 0055 QHash<QString /*plugin id*/, QRegularExpression /*DBus Service*/> m_dbusActivatableTasks; 0056 QHash<QString, int> m_dbusServiceCounts; 0057 bool m_dbusSessionServiceNamesFetched = false; 0058 bool m_dbusSystemServiceNamesFetched = false; 0059 };