activityfw/activityserviceplugin/src/activityclient_p.cpp
changeset 103 b99b84bcd2d1
parent 80 397d00875918
equal deleted inserted replaced
83:156f692b1687 103:b99b84bcd2d1
    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"
       
    20 #include <hsactivitydbclient.h>
    19 #include <hsactivitydbclient.h>
    21 
    20 
    22 #include <QCoreApplication>
    21 #include <QCoreApplication>
    23 #include <QStringList>
    22 #include <QStringList>
    24 #include <QTimer>
    23 #include <QTimer>
    26 #include <QDebug>
    25 #include <QDebug>
    27 #include <QDir>
    26 #include <QDir>
    28 
    27 
    29 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), mIsconnected(false)
    28 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), mIsconnected(false)
    30 {
    29 {
    31     mDataStorage = new ActivityDataStorage();
       
    32     mServerClient = new HsActivityDbClient();
    30     mServerClient = new HsActivityDbClient();
    33     mIsconnected = ( KErrNone == mServerClient->connect());
    31     mIsconnected = ( KErrNone == mServerClient->connect());
    34     if( mIsconnected) {
    32     if( mIsconnected) {
    35         mServerClient->waitActivity(QVariantHash());
    33         mServerClient->waitActivity(QVariantHash());
    36     }
    34     }
    38 }
    36 }
    39 
    37 
    40 ActivityClientPrivate::~ActivityClientPrivate()
    38 ActivityClientPrivate::~ActivityClientPrivate()
    41 {
    39 {
    42     delete mServerClient;
    40     delete mServerClient;
    43     delete mDataStorage;
       
    44 }
    41 }
    45 
    42 
    46 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)
    47 {
    44 {
    48     bool result(false);
    45     bool result(false);
    49     if (mIsconnected) {
    46     if (mIsconnected) {
    50         result = mDataStorage->addActivity(activityId, data);
    47         QVariantHash privateData;
    51         if ( result ) {
    48         privateData.insert(ActivityDataKeyword, data);
    52             QVariantHash activity(parameters);
    49         QVariantHash publicData(parameters);
    53             RProcess process;
    50         RProcess process;
    54             registerThumbnail(activityId, activity);
    51         publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    55             activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    52         publicData.insert(ActivityActivityKeyword, activityId);
    56             activity.insert(ActivityActivityKeyword, activityId);
    53         result = (KErrNone == mServerClient->addActivity(privateData, publicData));
    57             int error = mServerClient->addActivity(activity);
       
    58             result = error == KErrNone ? true : false;
       
    59         }
       
    60     }
    54     }
    61     // @todo make those operations atomic
       
    62     return result;
    55     return result;
    63 }
    56 }
    64 
    57 
    65 bool ActivityClientPrivate::removeActivity(const QString &activityId)
    58 bool ActivityClientPrivate::removeActivity(const QString &activityId)
    66 {
    59 {
    67     bool result(false);
    60     bool result(false);
    68     if (mIsconnected) {
    61     if (mIsconnected) {
    69         result = mDataStorage->removeActivity(activityId);
    62         QVariantHash activity;
    70         if ( result ) {            
    63         RProcess process;
    71             QVariantHash activity;
    64         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    72             RProcess process;
    65         activity.insert(ActivityActivityKeyword, activityId);
    73             activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    66         result = (KErrNone == mServerClient->removeActivity(activity));
    74             activity.insert(ActivityActivityKeyword, activityId);
       
    75             int error = mServerClient->removeActivity(activity);
       
    76             result = error == KErrNone ? true : false;
       
    77             if (result) {
       
    78                 result = QFile::remove(thumbnailName(activityId));
       
    79             }
       
    80         }
       
    81     }
    67     }
    82     // @todo make those operations atomic
       
    83     return result;
    68     return result;
    84 }
    69 }
    85 
    70 
    86 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    71 bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    87 {
    72 {
    88     bool result(false);
    73     bool result(false);
    89     if (mIsconnected) {
    74     if (mIsconnected) {
    90         result = mDataStorage->updateActivity(activityId, data);
    75         QVariantHash privateData;
    91         if ( result ) {
    76         privateData.insert(ActivityDataKeyword, data);
    92             QVariantHash activity(parameters);
    77         QVariantHash publicData(parameters);
    93             RProcess process;
    78         RProcess process;
    94             registerThumbnail(activityId, activity);
    79         publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    95             activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    80         publicData.insert(ActivityActivityKeyword, activityId);
    96             activity.insert(ActivityActivityKeyword, activityId);
    81         result = (KErrNone == mServerClient->updateActivity(privateData, publicData));
    97             int error = mServerClient->updateActivity(activity);
       
    98             result = error == KErrNone ? true : false;
       
    99         }
       
   100     }
    82     }
   101     // @todo make those operations atomic
       
   102     return result;
    83     return result;
   103 }
    84 }
   104 
    85 
   105 QList<QVariantHash> ActivityClientPrivate::activities() const
    86 QList<QVariantHash> ActivityClientPrivate::activities() const
   106 {
    87 {
   114     return activities;
    95     return activities;
   115 }
    96 }
   116 
    97 
   117 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
    98 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
   118 {
    99 {
   119     return mIsconnected ? mDataStorage->activityData(activityId) : QVariant();
   100     QVariant data;
       
   101     if (mIsconnected) {
       
   102         QVariantHash activity;
       
   103         RProcess process;
       
   104         activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
   105         activity.insert(ActivityActivityKeyword, activityId);
       
   106         mServerClient->activityData(data, activity);
       
   107     }
       
   108     return data;
   120 }
   109 }
   121 
   110 
   122 QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const
   111 QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const
   123 {
   112 {
   124     QVariantHash activityParams;
   113     QVariantHash activityParams;
   136             }
   125             }
   137         }
   126         }
   138     }
   127     }
   139     return QVariantHash();
   128     return QVariantHash();
   140 }
   129 }
   141 
       
   142 void ActivityClientPrivate::registerThumbnail(const QString &name, QVariantHash &activity)
       
   143 {
       
   144     QVariantHash::const_iterator findIterator(activity.constFind(ActivityScreenshotKeyword));
       
   145     if (activity.constEnd() != findIterator   &&
       
   146         findIterator.value().canConvert<QPixmap>()) {
       
   147         const QString thumbnailManagerName = thumbnailName(name);
       
   148         if (findIterator.value().value<QPixmap>().save(thumbnailManagerName)) {
       
   149             activity.insert(ActivityScreenshotKeyword, thumbnailManagerName);
       
   150         } else {
       
   151             activity.remove(ActivityScreenshotKeyword);
       
   152         }
       
   153     }
       
   154 }
       
   155 
       
   156 QString ActivityClientPrivate::thumbnailName(const QString &activityId) const
       
   157 {
       
   158     return QDir::toNativeSeparators(qApp->applicationDirPath() + 
       
   159                                     "/" + 
       
   160                                     QString::number(qHash(activityId), 16) + 
       
   161                                     ".png");
       
   162 }
       
   163