summaryrefslogtreecommitdiff
path: root/libsowatch
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2012-08-10 23:52:30 +0200
committerJavier S. Pedro <maemo@javispedro.com>2012-08-10 23:52:30 +0200
commit1b8f2a0e2e63b1f881b6ba7b18982353b9c27b19 (patch)
tree72a3b00cee7068e03d1d5182d70622903fda58c0 /libsowatch
parentd3ed26704ad29f58f28f7ef84de5bbf6b5f0eaf6 (diff)
downloadsowatch-1b8f2a0e2e63b1f881b6ba7b18982353b9c27b19.tar.gz
sowatch-1b8f2a0e2e63b1f881b6ba7b18982353b9c27b19.zip
fix package upgrade issues
Diffstat (limited to 'libsowatch')
-rw-r--r--libsowatch/registry.cpp32
-rw-r--r--libsowatch/registry.h9
2 files changed, 36 insertions, 5 deletions
diff --git a/libsowatch/registry.cpp b/libsowatch/registry.cpp
index 5cbc464..4836aca 100644
--- a/libsowatch/registry.cpp
+++ b/libsowatch/registry.cpp
@@ -87,6 +87,7 @@ void Registry::loadDriver(const QString &file)
QStringList drivers = plugin->drivers();
foreach (const QString& driver, drivers) {
_driverIds[driver] = plugin;
+ emit driverLoaded(driver);
}
_watcher->addPath(file);
} else {
@@ -113,6 +114,7 @@ void Registry::loadNotificationProvider(const QString &file)
QStringList providers = plugin->providers();
foreach (const QString& provider, providers) {
_providerIds[provider] = plugin;
+ emit notificationProviderLoaded(provider);
}
_watcher->addPath(file);
} else {
@@ -139,6 +141,7 @@ void Registry::loadWatchlet(const QString &file)
QStringList watchlets = plugin->watchlets();
foreach (const QString& watchlet, watchlets) {
_watchletIds[watchlet] = plugin;
+ emit watchletLoaded(watchlet);
}
_watcher->addPath(file);
} else {
@@ -161,6 +164,7 @@ void Registry::unloadDriver(QPluginLoader *loader)
QStringList drivers = plugin->drivers();
foreach (const QString& driver, drivers) {
+ emit driverUnloaded(driver);
_driverIds.remove(driver);
}
@@ -168,9 +172,12 @@ void Registry::unloadDriver(QPluginLoader *loader)
_driverFiles.remove(file);
_watcher->removePath(file);
- // loader->unload();
- // TODO : Signal loss of a plugin so that servers can remove it before
- // we unload it.
+ qDebug() << "Now unloading" << file;
+ if (!loader->unload()) {
+ qWarning() << "Could not unload plugin" << file;
+ }
+
+ delete loader;
}
void Registry::unloadNotificationProvider(QPluginLoader *loader)
@@ -180,12 +187,20 @@ void Registry::unloadNotificationProvider(QPluginLoader *loader)
QStringList providers = plugin->providers();
foreach (const QString& provider, providers) {
+ emit notificationProviderUnloaded(provider);
_providerIds.remove(provider);
}
_providers.removeAll(plugin);
_providerFiles.remove(file);
_watcher->removePath(file);
+
+ qDebug() << "Now unloading" << file;
+ if (!loader->unload()) {
+ qWarning() << "Could not unload plugin" << file;
+ }
+
+ delete loader;
}
void Registry::unloadWatchlet(QPluginLoader *loader)
@@ -195,17 +210,25 @@ void Registry::unloadWatchlet(QPluginLoader *loader)
QStringList watchlets = plugin->watchlets();
foreach (const QString& watchlet, watchlets) {
+ emit watchletUnloaded(watchlet);
_watchletIds.remove(watchlet);
}
_watchlets.removeAll(plugin);
_watchletFiles.remove(file);
_watcher->removePath(file);
+
+ qDebug() << "Now unloading" << file;
+ if (!loader->unload()) {
+ qWarning() << "Could not unload plugin" << file;
+ }
+
+ delete loader;
}
void Registry::handlePluginDirectoryChanged(const QString &path)
{
- // If the directory changed, rescan it to load new discover new plugins.
+ // If the directory changed, rescan it to discover new plugins.
if (path == SOWATCH_DRIVERS_DIR) {
QDir dir(path);
foreach (QString entry, dir.entryList(QDir::Files)) {
@@ -235,7 +258,6 @@ void Registry::handlePluginDirectoryChanged(const QString &path)
void Registry::handlePluginFileChanged(const QString &file)
{
- QFile f(file);
if (_driverFiles.contains(file)) {
unloadDriver(_driverFiles[file]);
}
diff --git a/libsowatch/registry.h b/libsowatch/registry.h
index b2e2b0e..dab5009 100644
--- a/libsowatch/registry.h
+++ b/libsowatch/registry.h
@@ -58,6 +58,15 @@ public:
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();