emailuis/nmailui/src/nmuiextensionmanager.cpp
changeset 23 2dc6caa42ec3
parent 20 ecc8def7944a
child 30 759dc5235cdb
equal deleted inserted replaced
20:ecc8def7944a 23:2dc6caa42ec3
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include "nmuiheaders.h"
    18 #include "nmuiheaders.h"
    19 
    19 
       
    20 const QString NmsPluginExtensionName = "nmsclientplugin.qtplugin"; 
    20 /*!
    21 /*!
    21     \class NmUiExtensionManager
    22     \class NmUiExtensionManager
    22     \brief Handles ui extension plugins
    23     \brief Handles ui extension plugins
    23  */
    24  */
       
    25 
       
    26 // ======== HELPER FUNCTIONS ========
       
    27 
       
    28 /*!
       
    29   Creates list of folder paths where plug-ins can be loaded from.
       
    30   \return folder path list.
       
    31 */
       
    32 QStringList NmUiExtensionManager::pluginFolders()
       
    33 {
       
    34     NMLOG(QString("NmUiExtensionManager - HELPER FUNCTIONS - pluginFolders"));
       
    35 
       
    36     const QString NmSettingsPluginFolderPath("/resource/qt/plugins/nmail/uiext");
       
    37     QStringList pluginDirectories;
       
    38     QFileInfoList driveList = QDir::drives();
       
    39 
       
    40     foreach(const QFileInfo &driveInfo, driveList) {
       
    41         QString pluginDirectory =
       
    42             driveInfo.absolutePath() + NmSettingsPluginFolderPath;
       
    43         NMLOG(QString("fileInfo.absoluteFilePath() : %1").arg(pluginDirectory)); 
       
    44         if (QFileInfo(pluginDirectory).exists()) {
       
    45             pluginDirectories.append(pluginDirectory);
       
    46         }
       
    47     }
       
    48 
       
    49     NMLOG(QString("NmUiExtensionManager - HELPER FUNCTIONS - pluginFolders - OK"));
       
    50     return pluginDirectories;
       
    51 }
       
    52 
    24 NmUiExtensionManager::NmUiExtensionManager()
    53 NmUiExtensionManager::NmUiExtensionManager()
    25 {
    54 {
    26     // load the protocol extension plugins
    55     // load the protocol extension plugins
    27     loadExtensionPlugins();
    56     loadExtensionPlugins();
    28 }
    57 }
    50     for (int i = 0; i < mExtensions.count(); i++) {
    79     for (int i = 0; i < mExtensions.count(); i++) {
    51     	NmUiExtensionInterface* interface = mExtensions[i];
    80     	NmUiExtensionInterface* interface = mExtensions[i];
    52         interface->getActions(menuRequest, actionList);
    81         interface->getActions(menuRequest, actionList);
    53     }
    82     }
    54 }
    83 }
    55 
       
    56 /*!
    84 /*!
    57     Loads predifened plugins implementing the NmUiExtensionInterface interface
    85     Loads plug-ins which implements NmUiExtensionInterface and are registered
       
    86     to <code>/resource/qt/plugins/nmail/uiext</code> folder.
    58  */
    87  */
    59 void NmUiExtensionManager::loadExtensionPlugins()
    88 void NmUiExtensionManager::loadExtensionPlugins()
    60 {
    89 {
       
    90     NMLOG(QString("NmUiExtensionManager::loadExtensionPlugins -->"));
       
    91     
       
    92     QStringList directories(pluginFolders());
       
    93     foreach (const QString &directoryPath, directories) {
       
    94         QDir directory(directoryPath);
       
    95         QFileInfoList fileList(directory.entryInfoList());
    61 
    96 
    62 #ifdef Q_OS_SYMBIAN
    97         foreach (const QFileInfo &fileInfo, fileList) {
    63     // Note: In Symbian the plugin stub files (.qtplugin) must be used whenever
    98             NMLOG(QString("Plugin absolute FilePath : %1").arg(fileInfo.absoluteFilePath()));  
    64     // a path to plugin is needed - Symbian platform security.
    99             QScopedPointer<QPluginLoader> loader(
    65     const QString KImapPluginExtensionName = "nmimapclientplugin.qtplugin";
   100                 new QPluginLoader(fileInfo.absoluteFilePath()));
    66     const QString KPopPluginExtensionName  = "nmpopclientplugin.qtplugin";
   101             mPluginLoaders.append(loader.data());
    67     const QString KEasPluginExtensionName = "nmeasclientplugin.qtplugin";
   102             loader.take();
    68     const QString KPluginDirectory = "c:\\resource\\plugins";
       
    69     QDir pluginDir = QDir(KPluginDirectory);
       
    70 #else
       
    71     #define NM_WINS_ENV
       
    72     const QString KImapPluginExtensionName = "nmimapclientplugin.dll";
       
    73     const QString KPopPluginExtensionName  = "nmpopclientplugin.dll";
       
    74     QDir pluginDir = QDir(QApplication::applicationDirPath());
       
    75 #endif
       
    76 
       
    77     QPluginLoader *imapPluginLoader = new QPluginLoader(
       
    78             pluginDir.absoluteFilePath(KImapPluginExtensionName));
       
    79     QObject *imapPluginInstance = imapPluginLoader->instance();
       
    80 
       
    81     QPluginLoader *popPluginLoader = new QPluginLoader(
       
    82             pluginDir.absoluteFilePath(KPopPluginExtensionName));
       
    83     QObject *popPluginInstance = popPluginLoader->instance();
       
    84 
       
    85 #ifndef NM_WINS_ENV
       
    86     QPluginLoader *easPluginLoader = new QPluginLoader(
       
    87             pluginDir.absoluteFilePath(KEasPluginExtensionName));
       
    88     QObject *easPluginInstance = easPluginLoader->instance();
       
    89 #endif
       
    90 
       
    91     if(imapPluginInstance) {
       
    92         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(imapPluginInstance);
       
    93         if (interface) {
       
    94             mExtensions.append(interface);
       
    95         }
   103         }
    96         mPluginLoaders.append(imapPluginLoader);
       
    97     } else {
       
    98         // We don't have proper plugin instance, so we don't need it's loader.
       
    99         delete imapPluginLoader;
       
   100         imapPluginLoader = NULL;
       
   101     }
   104     }
   102     
   105     
   103     if(popPluginInstance) {
   106     NmUiExtensionInterface *interface = NULL;    
   104         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(popPluginInstance);
   107     foreach (QPluginLoader *loader, mPluginLoaders) {      
   105         if (interface) {
   108         NMLOG(QString("Plugin fileName() : %1").arg(loader->fileName()));
   106             mExtensions.append(interface);
   109         QString fileName = loader->fileName();
       
   110         if (fileName.contains(NmsPluginExtensionName, Qt::CaseInsensitive) == false) {
       
   111             QObject *pluginInstance = loader->instance();
       
   112             interface = qobject_cast<NmUiExtensionInterface*>(pluginInstance);
       
   113             if (interface) {
       
   114                 mExtensions.append(interface);
       
   115             }
   107         }
   116         }
   108         mPluginLoaders.append(popPluginLoader);
   117     }            
   109     } else {
   118     NMLOG(QString("<-- NmUiExtensionManager::loadExtensionPlugins"));
   110         // We don't have proper plugin instance, so we don't need it's loader.
       
   111         delete popPluginLoader;
       
   112         popPluginLoader = NULL;
       
   113     }
       
   114 
       
   115 #ifndef NM_WINS_ENV
       
   116     if(easPluginInstance) {
       
   117         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(easPluginInstance);
       
   118         if (interface) {
       
   119             mExtensions.append(interface);
       
   120         }
       
   121         mPluginLoaders.append(easPluginLoader);
       
   122     } else {
       
   123         // We don't have proper plugin instance, so we don't need it's loader.
       
   124         delete easPluginLoader;
       
   125         easPluginLoader = NULL;
       
   126     }
       
   127 #endif    
       
   128 
       
   129 }
   119 }
   130 
   120 
   131 
   121