File indexing completed on 2024-05-12 17:08:50

0001 /*
0002     SPDX-FileCopyrightText: 2020 Konrad Materka <materka@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QMap>
0010 #include <QObject>
0011 #include <QPointer>
0012 
0013 class DBusServiceObserver;
0014 class KPluginMetaData;
0015 class SystemTraySettings;
0016 
0017 class PlasmoidRegistry : public QObject
0018 {
0019     Q_OBJECT
0020 public:
0021     explicit PlasmoidRegistry(QPointer<SystemTraySettings> settings, QObject *parent = nullptr);
0022 
0023     void init();
0024 
0025     virtual QMap<QString, KPluginMetaData> systemTrayApplets();
0026     bool isSystemTrayApplet(const QString &pluginId);
0027 
0028 Q_SIGNALS:
0029     /**
0030      * @brief Emitted when new plasmoid configuration is registered.
0031      * Emitted on initial run or when new plasmoid is installed in the system.
0032      *
0033      * @param pluginMetaData @see KPluginMetaData
0034      */
0035     void pluginRegistered(const KPluginMetaData &pluginMetaData);
0036     /**
0037      * @brief Emitten when new plasmoid configuration is unregistered.
0038      * As of now, the only case is when plasmoid is uninstalled for the system.
0039      *
0040      * @param pluginId also known as applet Id
0041      */
0042     void pluginUnregistered(const QString &pluginId);
0043 
0044     /**
0045      * @brief Emittend when plasmoid id enabled.
0046      * Note: this signal can be emitted for already enabled plasmoid.
0047      *
0048      * @param pluginId also known as applet Id
0049      */
0050     void plasmoidEnabled(const QString &pluginId);
0051     /**
0052      * @brief Emitted when plasmoid should be stopped, for example when DBus service is no longer available.
0053      * Note: this signal can be emitted for already stopped plasmoid.
0054      *
0055      * @param pluginId also known as applet Id
0056      */
0057     void plasmoidStopped(const QString &pluginId);
0058     /**
0059      * @brief Emitted when plasmoid is disabled entirely by user.
0060      *
0061      * @param pluginId also known as applet Id
0062      */
0063     void plasmoidDisabled(const QString &pluginId);
0064 
0065 private Q_SLOTS:
0066     void onEnabledPluginsChanged(const QStringList &enabledPlugins, const QStringList &disabledPlugins);
0067     void packageInstalled(const QString &pluginId);
0068     void packageUninstalled(const QString &pluginId);
0069 
0070 private:
0071     void registerPlugin(const KPluginMetaData &pluginMetaData);
0072     void unregisterPlugin(const QString &pluginId);
0073     void sanitizeSettings();
0074 
0075     QPointer<SystemTraySettings> m_settings;
0076     QPointer<DBusServiceObserver> m_dbusObserver;
0077 
0078     QMap<QString /*plugin id*/, KPluginMetaData> m_systrayApplets;
0079 };