emailuis/nmailui/src/nmuiextensionmanager.cpp
changeset 20 ecc8def7944a
parent 18 578830873419
child 23 2dc6caa42ec3
equal deleted inserted replaced
18:578830873419 20:ecc8def7944a
    60 {
    60 {
    61 
    61 
    62 #ifdef Q_OS_SYMBIAN
    62 #ifdef Q_OS_SYMBIAN
    63     // Note: In Symbian the plugin stub files (.qtplugin) must be used whenever
    63     // Note: In Symbian the plugin stub files (.qtplugin) must be used whenever
    64     // a path to plugin is needed - Symbian platform security.
    64     // a path to plugin is needed - Symbian platform security.
    65     const QString KTestPluginExtensionName = "nmtestpluginextension.qtplugin";
       
    66     const QString KImapPluginExtensionName = "nmimapclientplugin.qtplugin";
    65     const QString KImapPluginExtensionName = "nmimapclientplugin.qtplugin";
    67     const QString KPopPluginExtensionName  = "nmpopclientplugin.qtplugin";
    66     const QString KPopPluginExtensionName  = "nmpopclientplugin.qtplugin";
    68     const QString KEasPluginExtensionName = "nmeasclientplugin.qtplugin";
    67     const QString KEasPluginExtensionName = "nmeasclientplugin.qtplugin";
    69     const QString KPluginDirectory = "c:\\resource\\plugins";
    68     const QString KPluginDirectory = "c:\\resource\\plugins";
    70     QDir pluginDir = QDir(KPluginDirectory);
    69     QDir pluginDir = QDir(KPluginDirectory);
    71 #else
    70 #else
    72     #define NM_WINS_ENV
    71     #define NM_WINS_ENV
    73     const QString KTestPluginExtensionName = "nmtestpluginextension.dll";
       
    74     const QString KImapPluginExtensionName = "nmimapclientplugin.dll";
    72     const QString KImapPluginExtensionName = "nmimapclientplugin.dll";
    75     const QString KPopPluginExtensionName  = "nmpopclientplugin.dll";
    73     const QString KPopPluginExtensionName  = "nmpopclientplugin.dll";
    76     QDir pluginDir = QDir(QApplication::applicationDirPath());
    74     QDir pluginDir = QDir(QApplication::applicationDirPath());
    77 #endif
    75 #endif
    78 
       
    79     
       
    80     // Each plugin should be mapped to separate QPluginLoader   
       
    81     QPluginLoader *testPluginLoader = new QPluginLoader(
       
    82             pluginDir.absoluteFilePath(KTestPluginExtensionName));
       
    83     testPluginLoader->load();
       
    84     QObject *testPluginInstance(NULL); 
       
    85     if (testPluginLoader && testPluginLoader->isLoaded()){
       
    86         testPluginInstance = testPluginLoader->instance();    
       
    87     }
       
    88 
    76 
    89     QPluginLoader *imapPluginLoader = new QPluginLoader(
    77     QPluginLoader *imapPluginLoader = new QPluginLoader(
    90             pluginDir.absoluteFilePath(KImapPluginExtensionName));
    78             pluginDir.absoluteFilePath(KImapPluginExtensionName));
    91     QObject *imapPluginInstance = imapPluginLoader->instance();
    79     QObject *imapPluginInstance = imapPluginLoader->instance();
    92 
    80 
    98     QPluginLoader *easPluginLoader = new QPluginLoader(
    86     QPluginLoader *easPluginLoader = new QPluginLoader(
    99             pluginDir.absoluteFilePath(KEasPluginExtensionName));
    87             pluginDir.absoluteFilePath(KEasPluginExtensionName));
   100     QObject *easPluginInstance = easPluginLoader->instance();
    88     QObject *easPluginInstance = easPluginLoader->instance();
   101 #endif
    89 #endif
   102 
    90 
   103     if(testPluginInstance) {
       
   104         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(testPluginInstance);
       
   105         if (interface) {
       
   106             mExtensions.append(interface);
       
   107         }
       
   108 
       
   109         // Store QPluginLoader instances to keep plugins alive.
       
   110         // If QPluginLoader instance for a plugin is deleted, then there
       
   111         // is a risk that some component outside will load and unload
       
   112         // plugin, which will lead into situation where plugin is deleted.
       
   113         // This means that instance in mPluginArray will be invalid.
       
   114         mPluginLoaders.append(testPluginLoader);
       
   115     } else {
       
   116         // We don't have proper plugin instance, so we don't need it's loader.
       
   117         delete testPluginLoader;
       
   118         testPluginLoader = NULL;
       
   119     }
       
   120     
       
   121     if(imapPluginInstance) {
    91     if(imapPluginInstance) {
   122         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(imapPluginInstance);
    92         NmUiExtensionInterface *interface = qobject_cast<NmUiExtensionInterface*>(imapPluginInstance);
   123         if (interface) {
    93         if (interface) {
   124             mExtensions.append(interface);
    94             mExtensions.append(interface);
   125         }
    95         }