activityfw/activityserviceplugin/activityclient_p.cpp
changeset 66 32469d7d46ff
parent 61 8e5041d13c84
child 73 4bc7b118b3df
equal deleted inserted replaced
61:8e5041d13c84 66:32469d7d46ff
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description: 
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 #include "activityclient_p.h"
    17 #include "activityclient_p.h"
    18 #include "activityclient.h"
    18 #include "activityclient.h"
    19 #include "activitydatastorage.h"
    19 #include "activitydatastorage.h"
    20 #include <hsactivitydbclient.h>
    20 #include <hsactivitydbclient.h>
    21 
    21 
       
    22 #include <QCoreApplication>
    22 #include <QStringList>
    23 #include <QStringList>
    23 #include <QTimer>
    24 #include <QTimer>
       
    25 #include <QUrl>
       
    26 #include <QDebug>
       
    27 #include <QDir>
    24 
    28 
    25 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q)
    29 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), isconnected(false)
    26 {
    30 {
    27     mDataStorage = new ActivityDataStorage();
    31     mDataStorage = new ActivityDataStorage();
    28     mServerClient = new HsActivityDbClient();
    32     mServerClient = new HsActivityDbClient();
    29     mServerClient->connect();
    33     isconnected = ( KErrNone == mServerClient->connect());
    30     connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString)));
    34     connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString)));
    31 }
    35 }
    32 
    36 
    33 ActivityClientPrivate::~ActivityClientPrivate()
    37 ActivityClientPrivate::~ActivityClientPrivate()
    34 {
    38 {
    36     delete mDataStorage;
    40     delete mDataStorage;
    37 }
    41 }
    38 
    42 
    39 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    43 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    40 {
    44 {
    41     QVariantHash activity(parameters);
    45     if (isconnected) {
    42     mDataStorage->addActivity(activityId, data);
    46         mDataStorage->addActivity(activityId, data);
    43     RProcess process;
    47         QVariantHash activity(parameters);
    44     
    48         RProcess process;
    45     activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    49         registerThumbnail(activityId, activity);
    46     activity.insert(ActivityActivityKeyword, activityId);
    50         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    47     mServerClient->addActivity(activity);
    51         activity.insert(ActivityActivityKeyword, activityId);
    48     
    52         mServerClient->addActivity(activity);
       
    53     }
    49     // @todo make those operations atomic
    54     // @todo make those operations atomic
    50     // @todo return real result
    55     // @todo return real result
    51     return true;
    56     return isconnected;
    52 }
    57 }
    53 
    58 
    54 bool ActivityClientPrivate::removeActivity(const QString &activityId)
    59 bool ActivityClientPrivate::removeActivity(const QString &activityId)
    55 {
    60 {
    56     QVariantHash activity;
    61     if (isconnected) {
    57     RProcess process;
    62         mDataStorage->removeActivity(activityId);
    58     activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    63         QVariantHash activity;
    59     activity.insert(ActivityActivityKeyword, activityId);
    64         RProcess process;
    60     mDataStorage->removeActivity(activityId); 
    65         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    61     mServerClient->removeActivity(activity); 
    66         activity.insert(ActivityActivityKeyword, activityId);
       
    67         mServerClient->removeActivity(activity);
       
    68     }
    62     // @todo make those operations atomic
    69     // @todo make those operations atomic
    63     // @todo return real result
    70     // @todo return real result
    64     return true;
    71     return isconnected;
    65 }
    72 }
    66 
    73 
    67 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    74 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    68 {
    75 {
    69     QVariantHash activity(parameters);
    76     if (isconnected) {
    70     RProcess process;
    77         mDataStorage->updateActivity(activityId, data);
    71     activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    78         QVariantHash activity(parameters);
    72     activity.insert(ActivityActivityKeyword, activityId);
    79         RProcess process;
    73     mDataStorage->updateActivity(activityId, data);
    80         registerThumbnail(activityId, activity);
    74     mServerClient->updateActivity(activity);
    81         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
    82         activity.insert(ActivityActivityKeyword, activityId);
       
    83         mServerClient->updateActivity(activity);
       
    84     }
    75     // @todo make those operations atomic
    85     // @todo make those operations atomic
    76     // @todo return real result
    86     // @todo return real result
    77     return true;
    87     return isconnected;
    78 }
    88 }
    79 
    89 
    80 QList<QVariantHash> ActivityClientPrivate::activities() const
    90 QList<QVariantHash> ActivityClientPrivate::activities() const
    81 {
    91 {
    82     QVariantHash activity;
       
    83     RProcess process;
       
    84     activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
    85 
       
    86     QList<QVariantHash> activities;
    92     QList<QVariantHash> activities;
    87 
    93     if (isconnected) {
    88     mServerClient->applicationActivities(activities, activity);
    94         QVariantHash activity;
       
    95         RProcess process;
       
    96         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
    97         mServerClient->applicationActivities(activities, activity);
       
    98     }
    89     return activities;
    99     return activities;
    90 }
   100 }
    91 
   101 
    92 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
   102 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
    93 {
   103 {
    94     return mDataStorage->activityData(activityId);
   104     return isconnected ? mDataStorage->activityData(activityId) : QVariant();
    95 }
   105 }
    96 
   106 
    97 bool ActivityClientPrivate::waitActivity()
   107 bool ActivityClientPrivate::waitActivity()
    98 {
   108 {
    99     RProcess process;
   109     bool retVal(isconnected);
   100     QVariantHash activity;
   110     if (isconnected) {
   101     activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
   111         RProcess process;
   102     return !mServerClient->waitActivity(activity);
   112         QVariantHash activity;
       
   113         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
   114         retVal = !mServerClient->waitActivity(activity);
       
   115     }
       
   116     return retVal;
   103 }
   117 }
       
   118 
       
   119 QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const
       
   120 {
       
   121     QVariantHash activityParams;
       
   122     int activityMarkerIndex = commandLineParams.indexOf("-activity");
       
   123     if (activityMarkerIndex != -1 && commandLineParams.count() - 1 > activityMarkerIndex) {
       
   124         QUrl activityUri(commandLineParams.at(activityMarkerIndex+1));
       
   125         if (activityUri.scheme() == "appto") {
       
   126             QList<QPair<QString, QString> > parameters = activityUri.queryItems();
       
   127             for (QList<QPair<QString, QString> >::const_iterator i = parameters.constBegin(); i != parameters.constEnd(); ++i) {
       
   128                 activityParams.insert(i->first, i->second);
       
   129             }
       
   130 
       
   131             if (activityParams.contains("activityname") && !activityParams.value("activityname").toString().isEmpty()) {
       
   132                 return activityParams;
       
   133             }
       
   134         }
       
   135     }
       
   136     return QVariantHash();
       
   137 }
       
   138 
       
   139 void ActivityClientPrivate::registerThumbnail(const QString &name, QVariantHash &activity)
       
   140 {
       
   141     QVariantHash::const_iterator    findIterator(activity.constFind(ActivityScreenshotKeyword));
       
   142     if (activity.constEnd() != findIterator   &&
       
   143         findIterator.value().canConvert<QPixmap>()) {
       
   144         const QString thumbnailManagerName = thumbnailName(name);
       
   145         if (findIterator.value().value<QPixmap>().save(thumbnailManagerName)) {
       
   146             activity.insert(ActivityScreenshotKeyword, thumbnailManagerName);
       
   147         } else {
       
   148             activity.remove(ActivityScreenshotKeyword);
       
   149         }
       
   150     }
       
   151 }
       
   152 
       
   153 QString ActivityClientPrivate::thumbnailName(const QString &activityId) const
       
   154 {
       
   155     return QDir::toNativeSeparators(qApp->applicationDirPath() + 
       
   156                                     "/" + 
       
   157                                     QString::number(qHash(activityId), 16) + 
       
   158                                     ".png");
       
   159 }