contentstorage/caclient/src/cahandlerproxy.cpp
changeset 127 7b66bc3c6dc9
parent 116 305818acdca4
--- a/contentstorage/caclient/src/cahandlerproxy.cpp	Wed Oct 13 12:59:22 2010 +0300
+++ b/contentstorage/caclient/src/cahandlerproxy.cpp	Mon Oct 18 10:44:15 2010 +0300
@@ -21,6 +21,8 @@
 #include "cahandlerproxy.h"
 #include "cahandlerloader.h"
 #include "caobjectadapter.h"
+#include "cahandlerspreloader.h"
+#include "caclient_defines.h"
 
 /*!
     \class CaHandlerProxy
@@ -35,6 +37,7 @@
 */
 CaHandlerProxy::~CaHandlerProxy()
 {
+    delete mHandlersPreloader;
 }
 
 
@@ -43,7 +46,8 @@
   \param loader Provides handler implementations. It has to be pointer to a valid object.
 */
 CaHandlerProxy::CaHandlerProxy(const QSharedPointer<CaHandlerLoader> &loader):
-    mLoader(loader)
+    mLoader(loader),
+    mHandlersPreloader(NULL)
 {
     Q_ASSERT(!mLoader.isNull());
 }
@@ -58,40 +62,51 @@
   \sa e32err.h for KErrNone definition.
 */
 int CaHandlerProxy::execute(const CaEntry &entry, const QString &commandName,
-        QObject* receiver, const char* member)
+    QObject* receiver, const char* member)
 {
-    CaHandler *const handler = getHandler(entry, commandName);
     int result = -1;
+    CaHandler *const handler = getHandler(entry.entryTypeName());
 
     if (handler) {
-            result = handler->execute(entry, commandName, receiver, member);
+        result = handler->execute(entry, commandName, receiver, member);
     }
     return result;
 }
 
 /*!
-  Looks for handler implementation in local cache or if not found, request it from
-  handler loader.
+  Looks for handler implementation in local cache or if not found,
+  request it from handler loader.
   \param entry The entry being a subject for the requested command.
   \param commandName Name of the command to be executed.
   \return Pointer to a handler instance if available, NULL otherwise.
 */
-CaHandler *CaHandlerProxy::getHandler(const CaEntry &entry,
-                                      const QString &commandName)
+CaHandler *CaHandlerProxy::getHandler(const QString &entryTypeName)
 {
     CaHandler *implementation(0);
-
-    const QString entryTypeName(entry.entryTypeName());
+    QString typeName(entryTypeName);
+    if (entryTypeName == WIDGET_ENTRY_TYPE_NAME
+        || entryTypeName == PACKAGE_ENTRY_TYPE_NAME) {
+        typeName = QString(APPLICATION_ENTRY_TYPE_NAME);
+    }
 
     const ImplementationMapIterator it(
-        mImplementationMap.find(entryTypeName));
+        mImplementationMap.find(typeName));
 
     if (it != mImplementationMap.end()) {
         implementation = it->data();
     } else {
-        implementation = mLoader->loadHandler(entryTypeName, commandName);
-        mImplementationMap[entryTypeName] = QSharedPointer<CaHandler>(implementation);
+        implementation = mLoader->loadHandler(typeName);
+        mImplementationMap[typeName] =
+            QSharedPointer<CaHandler>(implementation);
     }
 
     return implementation;
 }
+
+/*!
+  Preload handlers during the idle time.
+ */
+void CaHandlerProxy::preloadHandlers()
+{
+    mHandlersPreloader = new CaHandlersPreloader(this);
+}