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 } |