diff -r ecc8def7944a -r 2dc6caa42ec3 emailservices/nmclientapi/src/nmapidatapluginfactory.cpp --- a/emailservices/nmclientapi/src/nmapidatapluginfactory.cpp Mon May 03 12:23:15 2010 +0300 +++ b/emailservices/nmclientapi/src/nmapidatapluginfactory.cpp Fri May 14 15:41:10 2010 +0300 @@ -15,38 +15,38 @@ * */ -#include "nmapidataplugininterface.h" +#include "nmdataplugininterface.h" #include "nmapidatapluginfactory.h" + // Qt -#include #include #include #include #include +#include // nmailbase #include "nmcommon.h" #include "nmmailbox.h" -#include "../../../inc/nmmessageenvelope.h" +#include "nmmessageenvelope.h" #include "nmmessage.h" #include "nmmessagepart.h" #include "nmfolder.h" /*! - \class NmDataPluginFactory - \brief The NmDataPluginFactory class creates NmDataPlugin instance. + \class NmApiDataPluginFactory + \brief The NmApiDataPluginFactory class creates NmDataPlugin instance. */ -NmDataPluginFactory *NmDataPluginFactory::mInstance = NULL; -int NmDataPluginFactory::mReferenceCount = 0; -QList *NmDataPluginFactory::mPluginArray = NULL; -QList NmDataPluginFactory::mPluginLoaderArray = QList (); -const int INTERFACEPLUGININDEX = 0; +NmApiDataPluginFactory *NmApiDataPluginFactory::mInstance = NULL; +int NmApiDataPluginFactory::mReferenceCount = 0; +QObject *NmApiDataPluginFactory::mPlugin = NULL; +QPluginLoader *NmApiDataPluginFactory::mPluginLoader = NULL; /*! */ -NmDataPluginFactory::NmDataPluginFactory() +NmApiDataPluginFactory::NmApiDataPluginFactory() { } @@ -54,26 +54,26 @@ /*! */ -NmDataPluginFactory::~NmDataPluginFactory() +NmApiDataPluginFactory::~NmApiDataPluginFactory() { - if (mPluginArray) { - qDeleteAll(mPluginArray->begin(), mPluginArray->end()); - mPluginArray->clear(); - delete mPluginArray; - mPluginArray = NULL; + if (mPlugin) { + delete mPlugin; + mPlugin = NULL; } - - qDeleteAll(mPluginLoaderArray.constBegin(), mPluginLoaderArray.constEnd()); - mPluginLoaderArray.clear(); + + if(mPluginLoader){ + delete mPluginLoader; + mPluginLoader = NULL; + } } /*! */ -NmDataPluginFactory *NmDataPluginFactory::instance() +NmApiDataPluginFactory *NmApiDataPluginFactory::instance() { if (!mInstance) { - mInstance = new NmDataPluginFactory(); + mInstance = new NmApiDataPluginFactory(); } mReferenceCount++; return mInstance; @@ -82,7 +82,7 @@ /*! */ -void NmDataPluginFactory::releaseInstance(NmDataPluginFactory *&instance) +void NmApiDataPluginFactory::releaseInstance(NmApiDataPluginFactory *&instance) { //can't have passed out instances if we don't have any if (mInstance) { @@ -97,83 +97,46 @@ } } -/*! - - */ -NmDataPluginInterface *NmDataPluginFactory::interfaceInstance(QObject *plugin) -{ - NmDataPluginInterface *pluginInterface = NULL; - if (plugin) { - pluginInterface = qobject_cast (plugin); - } - return pluginInterface; -} /*! */ -NmDataPluginInterface *NmDataPluginFactory::interfaceInstance(NmId mailboxId) +NmDataPluginInterface *NmApiDataPluginFactory::interfaceInstance() { - return interfaceInstance(pluginInstance(mailboxId)); -} - -/*! - - */ -QObject *NmDataPluginFactory::pluginInstance(NmId mailboxId) -{ - Q_UNUSED(mailboxId); - return pluginInstances()->at(INTERFACEPLUGININDEX); + if (!mPlugin) { + mPlugin = loadPlugin(); + } + return qobject_cast (mPlugin); } /*! */ -QList *NmDataPluginFactory::pluginInstances() +QObject *NmApiDataPluginFactory::loadPlugin() { - //if plugins have not been already created, do it now. - if (!mPluginArray) { - mPluginArray = new QList (); - } - if (mPluginArray->count() == 0) { -#ifdef Q_OS_SYMBIAN - + if (!mPluginLoader) { const QString KPluginDirectory = "c:\\resource\\plugins"; QDir pluginDir = QDir(KPluginDirectory); const QString KFrameworkPluginName = "nmframeworkadapter.qtplugin"; - QObject *frameworkPlugin = loadPlugin(pluginDir, KFrameworkPluginName); - mPluginArray->append(frameworkPlugin); + /*! + This creates plugin entity. + */ + mPluginLoader = new QPluginLoader(pluginDir.absoluteFilePath(KFrameworkPluginName)); -#endif + mPlugin = mPluginLoader->instance(); + if(!mPlugin){ + // We don't have proper plugin instance, so we don't need it's loader. + delete mPluginLoader; + mPluginLoader = NULL; + } } - - return mPluginArray; + return mPlugin; } -/*! - - */ -QObject *NmDataPluginFactory::loadPlugin(const QDir& pluginDir, const QString& pluginName) +QObject *NmApiDataPluginFactory::plugin() { - /*! - This creates plugin entity. - */ - QPluginLoader *loader = new QPluginLoader(pluginDir.absoluteFilePath(pluginName)); - - QObject *pluginInstance = loader->instance(); - - if (pluginInstance) { - // Store QPluginLoader instances to keep plugins alive. - // If QPluginLoader instance for a plugin is deleted, then there - // is a risk that some component outside will load and unload - // plugin, which will lead into situation where plugin is deleted. - // This means that instance in mPluginArray will be invalid. - mPluginLoaderArray.append(loader); + if (!mPlugin) { + mPlugin = loadPlugin(); } - else { - // We don't have proper plugin instance, so we don't need it's loader. - delete loader; - loader = NULL; - } - return pluginInstance; + return mPlugin; }