diff -r ecc8def7944a -r 2dc6caa42ec3 emailuis/nmailui/src/nmuiextensionmanager.cpp --- a/emailuis/nmailui/src/nmuiextensionmanager.cpp Mon May 03 12:23:15 2010 +0300 +++ b/emailuis/nmailui/src/nmuiextensionmanager.cpp Fri May 14 15:41:10 2010 +0300 @@ -17,10 +17,39 @@ #include "nmuiheaders.h" +const QString NmsPluginExtensionName = "nmsclientplugin.qtplugin"; /*! \class NmUiExtensionManager \brief Handles ui extension plugins */ + +// ======== HELPER FUNCTIONS ======== + +/*! + Creates list of folder paths where plug-ins can be loaded from. + \return folder path list. +*/ +QStringList NmUiExtensionManager::pluginFolders() +{ + NMLOG(QString("NmUiExtensionManager - HELPER FUNCTIONS - pluginFolders")); + + const QString NmSettingsPluginFolderPath("/resource/qt/plugins/nmail/uiext"); + QStringList pluginDirectories; + QFileInfoList driveList = QDir::drives(); + + foreach(const QFileInfo &driveInfo, driveList) { + QString pluginDirectory = + driveInfo.absolutePath() + NmSettingsPluginFolderPath; + NMLOG(QString("fileInfo.absoluteFilePath() : %1").arg(pluginDirectory)); + if (QFileInfo(pluginDirectory).exists()) { + pluginDirectories.append(pluginDirectory); + } + } + + NMLOG(QString("NmUiExtensionManager - HELPER FUNCTIONS - pluginFolders - OK")); + return pluginDirectories; +} + NmUiExtensionManager::NmUiExtensionManager() { // load the protocol extension plugins @@ -52,80 +81,41 @@ interface->getActions(menuRequest, actionList); } } - /*! - Loads predifened plugins implementing the NmUiExtensionInterface interface + Loads plug-ins which implements NmUiExtensionInterface and are registered + to /resource/qt/plugins/nmail/uiext folder. */ void NmUiExtensionManager::loadExtensionPlugins() { - -#ifdef Q_OS_SYMBIAN - // Note: In Symbian the plugin stub files (.qtplugin) must be used whenever - // a path to plugin is needed - Symbian platform security. - const QString KImapPluginExtensionName = "nmimapclientplugin.qtplugin"; - const QString KPopPluginExtensionName = "nmpopclientplugin.qtplugin"; - const QString KEasPluginExtensionName = "nmeasclientplugin.qtplugin"; - const QString KPluginDirectory = "c:\\resource\\plugins"; - QDir pluginDir = QDir(KPluginDirectory); -#else - #define NM_WINS_ENV - const QString KImapPluginExtensionName = "nmimapclientplugin.dll"; - const QString KPopPluginExtensionName = "nmpopclientplugin.dll"; - QDir pluginDir = QDir(QApplication::applicationDirPath()); -#endif - - QPluginLoader *imapPluginLoader = new QPluginLoader( - pluginDir.absoluteFilePath(KImapPluginExtensionName)); - QObject *imapPluginInstance = imapPluginLoader->instance(); + NMLOG(QString("NmUiExtensionManager::loadExtensionPlugins -->")); + + QStringList directories(pluginFolders()); + foreach (const QString &directoryPath, directories) { + QDir directory(directoryPath); + QFileInfoList fileList(directory.entryInfoList()); - QPluginLoader *popPluginLoader = new QPluginLoader( - pluginDir.absoluteFilePath(KPopPluginExtensionName)); - QObject *popPluginInstance = popPluginLoader->instance(); - -#ifndef NM_WINS_ENV - QPluginLoader *easPluginLoader = new QPluginLoader( - pluginDir.absoluteFilePath(KEasPluginExtensionName)); - QObject *easPluginInstance = easPluginLoader->instance(); -#endif - - if(imapPluginInstance) { - NmUiExtensionInterface *interface = qobject_cast(imapPluginInstance); - if (interface) { - mExtensions.append(interface); + foreach (const QFileInfo &fileInfo, fileList) { + NMLOG(QString("Plugin absolute FilePath : %1").arg(fileInfo.absoluteFilePath())); + QScopedPointer loader( + new QPluginLoader(fileInfo.absoluteFilePath())); + mPluginLoaders.append(loader.data()); + loader.take(); } - mPluginLoaders.append(imapPluginLoader); - } else { - // We don't have proper plugin instance, so we don't need it's loader. - delete imapPluginLoader; - imapPluginLoader = NULL; } - if(popPluginInstance) { - NmUiExtensionInterface *interface = qobject_cast(popPluginInstance); - if (interface) { - mExtensions.append(interface); + NmUiExtensionInterface *interface = NULL; + foreach (QPluginLoader *loader, mPluginLoaders) { + NMLOG(QString("Plugin fileName() : %1").arg(loader->fileName())); + QString fileName = loader->fileName(); + if (fileName.contains(NmsPluginExtensionName, Qt::CaseInsensitive) == false) { + QObject *pluginInstance = loader->instance(); + interface = qobject_cast(pluginInstance); + if (interface) { + mExtensions.append(interface); + } } - mPluginLoaders.append(popPluginLoader); - } else { - // We don't have proper plugin instance, so we don't need it's loader. - delete popPluginLoader; - popPluginLoader = NULL; - } - -#ifndef NM_WINS_ENV - if(easPluginInstance) { - NmUiExtensionInterface *interface = qobject_cast(easPluginInstance); - if (interface) { - mExtensions.append(interface); - } - mPluginLoaders.append(easPluginLoader); - } else { - // We don't have proper plugin instance, so we don't need it's loader. - delete easPluginLoader; - easPluginLoader = NULL; - } -#endif - + } + NMLOG(QString("<-- NmUiExtensionManager::loadExtensionPlugins")); }