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 |