#ifndef SOWATCH_REGISTRY_H #define SOWATCH_REGISTRY_H #include #include #include #include #include #include "sowatch_global.h" namespace sowatch { class WatchPluginInterface; class NotificationPluginInterface; class WatchletPluginInterface; class SOWATCH_EXPORT Registry : public QObject { Q_OBJECT public: static Registry* registry(); inline QList getWatchPlugins() { return _drivers; } inline QList getNotificationPlugins() { return _providers; } inline QList getWatchletPlugins() { return _watchlets; } inline WatchPluginInterface* getWatchPlugin(const QString& id) { return _driverIds.value(id, 0); } inline NotificationPluginInterface* getNotificationPlugin(const QString& id) { return _providerIds.value(id, 0); } inline WatchletPluginInterface* getWatchletPlugin(const QString& id) { return _watchletIds.value(id, 0); } inline QStringList allWatchDrivers() const { return _driverIds.keys(); } inline QStringList allNotificationProviders() const { return _providerIds.keys(); } inline QStringList allWatchlets() const { return _watchletIds.keys(); } signals: void driverLoaded(const QString& id); void notificationProviderLoaded(const QString& id); void watchletLoaded(const QString& id); void driverUnloaded(const QString& id); void notificationProviderUnloaded(const QString& id); void watchletUnloaded(const QString& id); protected: Registry(); ~Registry(); private: static Registry* singleRegistry; QFileSystemWatcher* _watcher; QList _drivers; QList _providers; QList _watchlets; QMap _driverFiles; QMap _providerFiles; QMap _watchletFiles; QMap _driverIds; QMap _providerIds; QMap _watchletIds; void loadDrivers(); void loadNotificationProviders(); void loadWatchlets(); void loadDriver(const QString& file); void loadNotificationProvider(const QString& file); void loadWatchlet(const QString& file); void unloadDriver(QPluginLoader* loader); void unloadNotificationProvider(QPluginLoader* loader); void unloadWatchlet(QPluginLoader* loader); private slots: void handlePluginDirectoryChanged(const QString& path); void handlePluginFileChanged(const QString& file); }; } #endif // SOWATCH_REGISTRY_H