diff options
author | Eric Springer <eric.springer@nokia.com> | 2010-01-29 12:52:07 +1000 |
---|---|---|
committer | Eric Springer <eric.springer@nokia.com> | 2010-01-29 12:52:07 +1000 |
commit | 40ec640c88908e52723800a157faa017353e390c (patch) | |
tree | 71143be39db4190e50a4f05d41b512e6da607f7f | |
parent | 78dfaa0890ff0aaf8be5ebb9e01a788351c297b0 (diff) |
Include Qt's libraryPaths when searching for plugins2010W04
-rw-r--r-- | src/libraries/qtopiamail/support/qmailpluginmanager.cpp | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/src/libraries/qtopiamail/support/qmailpluginmanager.cpp b/src/libraries/qtopiamail/support/qmailpluginmanager.cpp index bba260ae..0615f74c 100644 --- a/src/libraries/qtopiamail/support/qmailpluginmanager.cpp +++ b/src/libraries/qtopiamail/support/qmailpluginmanager.cpp @@ -44,6 +44,7 @@ #include <QPluginLoader> #include <QDir> #include <QtDebug> +#include <QCoreApplication> #include <qmailnamespace.h> @@ -125,25 +126,27 @@ public: public: QMap<QString,QPluginLoader*> pluginMap; - QString pluginPath; }; QMailPluginManagerPrivate::QMailPluginManagerPrivate(const QString& path) -: - pluginPath(QMail::pluginsPath() + path) { - //initialize the plugin map - QDir dir(pluginPath.toLatin1()); - QStringList libs = dir.entryList(pluginFilePatterns(), QDir::Files); - - if(libs.isEmpty()) - { - qWarning() << "Could not find any plugins in path " << pluginPath << "!"; - return; + QStringList libraryPaths; + libraryPaths << QMail::pluginsPath() << QCoreApplication::libraryPaths(); + + foreach(QString libraryPath, libraryPaths) { + QDir dir(libraryPath); + //Change into the sub directory, and make sure it's readable + if(!dir.cd(path) || !dir.isReadable()) + continue; + + foreach(const QString &libname, dir.entryList(pluginFilePatterns(), QDir::Files)) { + QString libfile = dir.absoluteFilePath(libname); + if(pluginMap.contains(libname)) + pluginMap[libname]->setFileName(libfile); + else + pluginMap[libname] = new QPluginLoader(libfile); + } } - - foreach(const QString& libname,libs) - pluginMap[libname] = 0; } QMailPluginManagerPrivate::~QMailPluginManagerPrivate() @@ -173,23 +176,15 @@ QStringList QMailPluginManager::list() const QObject* QMailPluginManager::instance(const QString& name) { - QString libfile = d->pluginPath + "/" + name; - if (!QFile::exists(libfile)) - return 0; - - QPluginLoader *lib = 0; - QMap<QString,QPluginLoader*>::const_iterator it = d->pluginMap.find(name); - if (it != d->pluginMap.end()) - lib = *it; - if ( !lib ) { - lib = new QPluginLoader(libfile); - lib->load(); - if ( !lib->isLoaded() ) { - qWarning() << "Could not load" << libfile << "errorString()" << lib->errorString(); - delete lib; + if (d->pluginMap.contains(name)) { + if(d->pluginMap[name]->load()) { + return d->pluginMap[name]->instance(); + } else { + qWarning() << "Error loading" << name << "with errorString()" << d->pluginMap[name]->errorString(); return 0; } + } else { + qWarning() << "Could not find" << name << "to load"; + return 0; } - d->pluginMap[name] = lib; - return lib->instance(); } |