activityfw/activityserviceplugin/activityclient_p.cpp
changeset 66 32469d7d46ff
parent 61 8e5041d13c84
child 73 4bc7b118b3df
--- a/activityfw/activityserviceplugin/activityclient_p.cpp	Fri Apr 16 15:16:09 2010 +0300
+++ b/activityfw/activityserviceplugin/activityclient_p.cpp	Mon May 03 12:48:45 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 #include "activityclient_p.h"
@@ -19,14 +19,18 @@
 #include "activitydatastorage.h"
 #include <hsactivitydbclient.h>
 
+#include <QCoreApplication>
 #include <QStringList>
 #include <QTimer>
+#include <QUrl>
+#include <QDebug>
+#include <QDir>
 
-ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q)
+ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), isconnected(false)
 {
     mDataStorage = new ActivityDataStorage();
     mServerClient = new HsActivityDbClient();
-    mServerClient->connect();
+    isconnected = ( KErrNone == mServerClient->connect());
     connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString)));
 }
 
@@ -38,66 +42,118 @@
 
 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
 {
-    QVariantHash activity(parameters);
-    mDataStorage->addActivity(activityId, data);
-    RProcess process;
-    
-    activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-    activity.insert(ActivityActivityKeyword, activityId);
-    mServerClient->addActivity(activity);
-    
+    if (isconnected) {
+        mDataStorage->addActivity(activityId, data);
+        QVariantHash activity(parameters);
+        RProcess process;
+        registerThumbnail(activityId, activity);
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        activity.insert(ActivityActivityKeyword, activityId);
+        mServerClient->addActivity(activity);
+    }
     // @todo make those operations atomic
     // @todo return real result
-    return true;
+    return isconnected;
 }
 
 bool ActivityClientPrivate::removeActivity(const QString &activityId)
 {
-    QVariantHash activity;
-    RProcess process;
-    activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-    activity.insert(ActivityActivityKeyword, activityId);
-    mDataStorage->removeActivity(activityId); 
-    mServerClient->removeActivity(activity); 
+    if (isconnected) {
+        mDataStorage->removeActivity(activityId);
+        QVariantHash activity;
+        RProcess process;
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        activity.insert(ActivityActivityKeyword, activityId);
+        mServerClient->removeActivity(activity);
+    }
     // @todo make those operations atomic
     // @todo return real result
-    return true;
+    return isconnected;
 }
 
 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
 {
-    QVariantHash activity(parameters);
-    RProcess process;
-    activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-    activity.insert(ActivityActivityKeyword, activityId);
-    mDataStorage->updateActivity(activityId, data);
-    mServerClient->updateActivity(activity);
+    if (isconnected) {
+        mDataStorage->updateActivity(activityId, data);
+        QVariantHash activity(parameters);
+        RProcess process;
+        registerThumbnail(activityId, activity);
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        activity.insert(ActivityActivityKeyword, activityId);
+        mServerClient->updateActivity(activity);
+    }
     // @todo make those operations atomic
     // @todo return real result
-    return true;
+    return isconnected;
 }
 
 QList<QVariantHash> ActivityClientPrivate::activities() const
 {
-    QVariantHash activity;
-    RProcess process;
-    activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-
     QList<QVariantHash> activities;
-
-    mServerClient->applicationActivities(activities, activity);
+    if (isconnected) {
+        QVariantHash activity;
+        RProcess process;
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        mServerClient->applicationActivities(activities, activity);
+    }
     return activities;
 }
 
 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
 {
-    return mDataStorage->activityData(activityId);
+    return isconnected ? mDataStorage->activityData(activityId) : QVariant();
 }
 
 bool ActivityClientPrivate::waitActivity()
 {
-    RProcess process;
-    QVariantHash activity;
-    activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-    return !mServerClient->waitActivity(activity);
+    bool retVal(isconnected);
+    if (isconnected) {
+        RProcess process;
+        QVariantHash activity;
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        retVal = !mServerClient->waitActivity(activity);
+    }
+    return retVal;
 }
+
+QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const
+{
+    QVariantHash activityParams;
+    int activityMarkerIndex = commandLineParams.indexOf("-activity");
+    if (activityMarkerIndex != -1 && commandLineParams.count() - 1 > activityMarkerIndex) {
+        QUrl activityUri(commandLineParams.at(activityMarkerIndex+1));
+        if (activityUri.scheme() == "appto") {
+            QList<QPair<QString, QString> > parameters = activityUri.queryItems();
+            for (QList<QPair<QString, QString> >::const_iterator i = parameters.constBegin(); i != parameters.constEnd(); ++i) {
+                activityParams.insert(i->first, i->second);
+            }
+
+            if (activityParams.contains("activityname") && !activityParams.value("activityname").toString().isEmpty()) {
+                return activityParams;
+            }
+        }
+    }
+    return QVariantHash();
+}
+
+void ActivityClientPrivate::registerThumbnail(const QString &name, QVariantHash &activity)
+{
+    QVariantHash::const_iterator    findIterator(activity.constFind(ActivityScreenshotKeyword));
+    if (activity.constEnd() != findIterator   &&
+        findIterator.value().canConvert<QPixmap>()) {
+        const QString thumbnailManagerName = thumbnailName(name);
+        if (findIterator.value().value<QPixmap>().save(thumbnailManagerName)) {
+            activity.insert(ActivityScreenshotKeyword, thumbnailManagerName);
+        } else {
+            activity.remove(ActivityScreenshotKeyword);
+        }
+    }
+}
+
+QString ActivityClientPrivate::thumbnailName(const QString &activityId) const
+{
+    return QDir::toNativeSeparators(qApp->applicationDirPath() + 
+                                    "/" + 
+                                    QString::number(qHash(activityId), 16) + 
+                                    ".png");
+}