activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp
changeset 73 4bc7b118b3df
parent 66 32469d7d46ff
child 80 397d00875918
equal deleted inserted replaced
66:32469d7d46ff 73:4bc7b118b3df
    18 #include "hsactivitydbclient_p.h"
    18 #include "hsactivitydbclient_p.h"
    19 #include "hsactivitydbasyncrequest_p.h"
    19 #include "hsactivitydbasyncrequest_p.h"
    20 #include "hsactivityglobals.h"
    20 #include "hsactivityglobals.h"
    21 #include "hsserializer.h"
    21 #include "hsserializer.h"
    22 #include <qvariant.h>
    22 #include <qvariant.h>
    23 
    23 #include <xqconversions>
    24 
    24 
    25 // -----------------------------------------------------------------------------
    25 
    26 //
    26 // -----------------------------------------------------------------------------
    27 // -----------------------------------------------------------------------------
    27 //
    28 //
    28 // -----------------------------------------------------------------------------
    29 HsActivityDbClientPrivate::HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver &observer)
    29 //
    30 {
    30 HsActivityDbClientPrivate::HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver &observer):
    31     mAsyncDataHandler = HsActivityDbAsyncRequestPrivate::NewL(observer, *this);
    31     mObserver(observer)
       
    32 {
       
    33     mAsyncDataHandler = HsActivityDbAsyncRequestPrivate::newWaitActivityL(
       
    34             observer, *this);
    32 }
    35 }
    33 
    36 
    34 // -----------------------------------------------------------------------------
    37 // -----------------------------------------------------------------------------
    35 //
    38 //
    36 // -----------------------------------------------------------------------------
    39 // -----------------------------------------------------------------------------
    37 //
    40 //
    38 HsActivityDbClientPrivate::~HsActivityDbClientPrivate()
    41 HsActivityDbClientPrivate::~HsActivityDbClientPrivate()
    39 {
    42 {
       
    43     mAsyncTasks.ResetAndDestroy();
    40     delete mAsyncDataHandler;
    44     delete mAsyncDataHandler;
    41     Close();
    45     Close();
    42 }
    46 }
    43 
    47 
    44 // -----------------------------------------------------------------------------
    48 // -----------------------------------------------------------------------------
    55 //
    59 //
    56 // -----------------------------------------------------------------------------
    60 // -----------------------------------------------------------------------------
    57 //
    61 //
    58 int HsActivityDbClientPrivate::addActivity(const QVariantHash &activity)
    62 int HsActivityDbClientPrivate::addActivity(const QVariantHash &activity)
    59 {
    63 {
    60     TRAPD(errNo, execSimpleRequestL(AddActivity, activity);)
    64     int errNo(KErrCorrupt);
       
    65     if (activity.end() != activity.find(ActivityApplicationKeyword) &&
       
    66         activity.end() != activity.find(ActivityActivityKeyword)) {
       
    67         TRAP(errNo, execSimpleRequestL(AddActivity, activity);)
       
    68     }
    61     return errNo;
    69     return errNo;
    62 }
    70 }
    63 
    71 
    64 // -----------------------------------------------------------------------------
    72 // -----------------------------------------------------------------------------
    65 //
    73 //
    66 // -----------------------------------------------------------------------------
    74 // -----------------------------------------------------------------------------
    67 //
    75 //
    68 int HsActivityDbClientPrivate::updateActivity(const QVariantHash &activity)
    76 int HsActivityDbClientPrivate::updateActivity(const QVariantHash &activity)
    69 {
    77 {
    70     TRAPD(errNo, execSimpleRequestL(UpdateActivity, activity);)
    78     int errNo(KErrCorrupt);
       
    79     if (activity.end() != activity.find(ActivityApplicationKeyword) &&
       
    80         activity.end() != activity.find(ActivityActivityKeyword)) {
       
    81         TRAP(errNo, execSimpleRequestL(UpdateActivity, activity);)
       
    82     }
    71     return errNo;
    83     return errNo;
    72 }
    84 }
    73 
    85 
    74 // -----------------------------------------------------------------------------
    86 // -----------------------------------------------------------------------------
    75 //
    87 //
    76 // -----------------------------------------------------------------------------
    88 // -----------------------------------------------------------------------------
    77 //
    89 //
    78 int HsActivityDbClientPrivate::removeActivity(const QVariantHash &activity)
    90 int HsActivityDbClientPrivate::removeActivity(const QVariantHash &activity)
    79 {
    91 {
    80     TRAPD(errNo, execSimpleRequestL(RemoveActivity, activity);)
    92     int errNo(KErrCorrupt);
       
    93     if (activity.end() != activity.find(ActivityApplicationKeyword) &&
       
    94         activity.end() != activity.find(ActivityActivityKeyword)) {
       
    95         TRAP(errNo, execSimpleRequestL(RemoveActivity, activity);)
       
    96     }
    81     return errNo;
    97     return errNo;
    82 }
    98 }
    83 
    99 
    84 // -----------------------------------------------------------------------------
   100 // -----------------------------------------------------------------------------
    85 //
   101 //
    86 // -----------------------------------------------------------------------------
   102 // -----------------------------------------------------------------------------
    87 //
   103 //
    88 int HsActivityDbClientPrivate::removeApplicationActivities(const QVariantHash &activity)
   104 int HsActivityDbClientPrivate::removeApplicationActivities(const QVariantHash &activity)
    89 {
   105 {
    90     TRAPD(errNo, execSimpleRequestL(RemoveApplicationActivities, activity);)
   106     int errNo(KErrCorrupt);
       
   107     if (activity.end() != activity.find(ActivityApplicationKeyword)) {
       
   108         TRAP(errNo, execSimpleRequestL(RemoveApplicationActivities, activity);)
       
   109     }
    91     return errNo;
   110     return errNo;
    92 }
   111 }
    93 
   112 
    94 // -----------------------------------------------------------------------------
   113 // -----------------------------------------------------------------------------
    95 //
   114 //
   118 // -----------------------------------------------------------------------------
   137 // -----------------------------------------------------------------------------
   119 //
   138 //
   120 int HsActivityDbClientPrivate::waitActivity(const QVariantHash &activity)
   139 int HsActivityDbClientPrivate::waitActivity(const QVariantHash &activity)
   121 {
   140 {
   122     TRAPD(errNo, waitActivityL(activity);)
   141     TRAPD(errNo, waitActivityL(activity);)
       
   142     return errNo;
       
   143 }
       
   144 
       
   145 // -----------------------------------------------------------------------------
       
   146 //
       
   147 // -----------------------------------------------------------------------------
       
   148 //
       
   149 int HsActivityDbClientPrivate::getThumbnail(QSize size, QString imagePath, QString  mimeType, void *userDdata)
       
   150 {
       
   151     TRAPD(errNo, getThumbnailL(size, imagePath, mimeType, userDdata);)
   123     return errNo;
   152     return errNo;
   124 }
   153 }
   125 
   154 
   126 // -----------------------------------------------------------------------------
   155 // -----------------------------------------------------------------------------
   127 //
   156 //
   172 //
   201 //
   173 // -----------------------------------------------------------------------------
   202 // -----------------------------------------------------------------------------
   174 //
   203 //
   175 void HsActivityDbClientPrivate::connectL()
   204 void HsActivityDbClientPrivate::connectL()
   176 {
   205 {
   177     const int asyncMessageSlots(4);
   206     const int asyncMessageSlots(12);
   178     const int maxRetry(4);
   207     const int maxRetry(4);
   179 
   208 
   180     TInt retry = maxRetry;
   209     TInt retry = maxRetry;
   181     TInt errNo(KErrNone);
   210     TInt errNo(KErrNone);
   182     do {
   211     do {
   198 //
   227 //
   199 // -----------------------------------------------------------------------------
   228 // -----------------------------------------------------------------------------
   200 //
   229 //
   201 void HsActivityDbClientPrivate::execSimpleRequestL(int function, const QVariantHash &activity)
   230 void HsActivityDbClientPrivate::execSimpleRequestL(int function, const QVariantHash &activity)
   202 {
   231 {
       
   232     TPckgBuf<TInt> appId( activity.find(ActivityApplicationKeyword).value().toInt() );
       
   233     HBufC8 *actId = XQConversions::qStringToS60Desc8(activity.find(ActivityActivityKeyword).value().toString());
       
   234     CleanupStack::PushL(actId);
       
   235     TPckgBuf<TInt> taskId(0);
   203     RBuf8 data;
   236     RBuf8 data;
   204     CleanupClosePushL(data);
   237     CleanupClosePushL(data);
   205     data.CreateL(256);
   238     data.CreateL(256);
   206     data << activity;
   239     data << activity;
   207     User::LeaveIfError(SendReceive(function, TIpcArgs(&data)));
   240     User::LeaveIfError(SendReceive(function, TIpcArgs(&appId, actId, &data, &taskId)));
   208     CleanupStack::PopAndDestroy(&data);
   241     CleanupStack::PopAndDestroy(&data);
   209 }
   242     CleanupStack::PopAndDestroy(actId);
   210 
   243 }
   211 // -----------------------------------------------------------------------------
   244 
   212 //
   245 // -----------------------------------------------------------------------------
   213 // -----------------------------------------------------------------------------
   246 //
   214 //
   247 // -----------------------------------------------------------------------------
   215 void HsActivityDbClientPrivate::requestedActivityNameL(QString &result,
   248 //
   216                                                 const QVariantHash &activity)
   249 void HsActivityDbClientPrivate::activitiesL(QList<QVariantHash>& result)
   217 {
   250 {
       
   251     TPckgBuf<TInt> appId(0);
       
   252     TPtrC8 actId(KNullDesC8);
       
   253     TPtrC8 desc(KNullDesC8);
       
   254     TPckgBuf<TInt> taskId(0);
       
   255     User::LeaveIfError(SendReceive(Activities, 
       
   256                        TIpcArgs(&appId, &actId, &desc, &taskId)));
       
   257 
       
   258     int sizeBuf(appId());
   218     RBuf8 data;
   259     RBuf8 data;
   219     TPckgBuf<int> sizeBuf;
       
   220     CleanupClosePushL(data);
   260     CleanupClosePushL(data);
   221     data.CreateL(256);
   261     data.Create(sizeBuf);
   222     data << activity;
   262     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &data)));
   223     User::LeaveIfError(SendReceive(RequestedActivityName, TIpcArgs(&data,&sizeBuf)));
   263     
   224     if (sizeBuf() > data.MaxSize()) {
       
   225         data.ReAlloc(sizeBuf());
       
   226     }
       
   227     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data)));
       
   228     result = QString::fromAscii(reinterpret_cast<const char *>(data.Ptr()),
       
   229                                 data.Length());
       
   230     CleanupStack::PopAndDestroy(&data);
       
   231 }
       
   232 
       
   233 // -----------------------------------------------------------------------------
       
   234 //
       
   235 // -----------------------------------------------------------------------------
       
   236 //
       
   237 void HsActivityDbClientPrivate::activitiesL(QList<QVariantHash>& result)
       
   238 {
       
   239     RBuf8 data;
       
   240     TPckgBuf<int> sizeBuf;
       
   241     CleanupClosePushL(data);
       
   242     data.CreateL(256);
       
   243     User::LeaveIfError(SendReceive(Activities, TIpcArgs(&data, &sizeBuf)));
       
   244     if (sizeBuf() > data.MaxSize()) {
       
   245         data.ReAlloc(sizeBuf());
       
   246     }
       
   247     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data)));
       
   248     result << data;
   264     result << data;
   249     CleanupStack::PopAndDestroy(&data);
   265     CleanupStack::PopAndDestroy(&data);
   250 }
   266 }
   251 
   267 
   252 // -----------------------------------------------------------------------------
   268 // -----------------------------------------------------------------------------
   254 // -----------------------------------------------------------------------------
   270 // -----------------------------------------------------------------------------
   255 //
   271 //
   256 void HsActivityDbClientPrivate::applicationActivitiesL(QList<QVariantHash>& result,
   272 void HsActivityDbClientPrivate::applicationActivitiesL(QList<QVariantHash>& result,
   257                                                      const QVariantHash & condition)
   273                                                      const QVariantHash & condition)
   258 {
   274 {
       
   275     TPckgBuf<TInt> appId = condition.find(ActivityApplicationKeyword).value().toInt();
       
   276     TPtrC8 actId(KNullDesC8);
       
   277     TPtrC8 desc(KNullDesC8);
       
   278     TPckgBuf<TInt> taskId(0);
       
   279     User::LeaveIfError(SendReceive(ApplicationActivities, 
       
   280                        TIpcArgs(&appId, &actId, &desc, &taskId)));
       
   281 
       
   282     int sizeBuf(appId());
   259     RBuf8 data;
   283     RBuf8 data;
   260     TPckgBuf<int> sizeBuf;
       
   261     CleanupClosePushL(data);
   284     CleanupClosePushL(data);
   262     data.CreateL(256);
   285     data.Create(sizeBuf);
   263     data << condition;
   286     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &data)));
   264     User::LeaveIfError(SendReceive(ApplicationActivities, TIpcArgs(&data, &sizeBuf)));
   287     
   265     if (sizeBuf() > data.MaxSize()) {
       
   266         data.ReAlloc(sizeBuf());
       
   267     }
       
   268     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data)));
       
   269     result << data;
   288     result << data;
   270     CleanupStack::PopAndDestroy(&data);
   289     CleanupStack::PopAndDestroy(&data);
   271 }
   290 }
   272 
   291 
   273 // -----------------------------------------------------------------------------
   292 // -----------------------------------------------------------------------------
   285 
   304 
   286 // -----------------------------------------------------------------------------
   305 // -----------------------------------------------------------------------------
   287 //
   306 //
   288 // -----------------------------------------------------------------------------
   307 // -----------------------------------------------------------------------------
   289 //
   308 //
   290 void HsActivityDbClientPrivate::getData(RBuf8 &data)
   309 void HsActivityDbClientPrivate::getThumbnailL(QSize size, QString imagePath, QString  mimeType, void *userDdata)
   291 {
   310 {
   292     SendReceive(GetData, TIpcArgs(&data));
   311     HsActivityDbAsyncRequestPrivate::getThumbnailLD(mObserver,
       
   312                               *this, size, imagePath, mimeType, userDdata);
       
   313 }
       
   314 
       
   315 // -----------------------------------------------------------------------------
       
   316 //
       
   317 // -----------------------------------------------------------------------------
       
   318 //
       
   319 void HsActivityDbClientPrivate::getData(int taskId, RBuf8 &data)
       
   320 {
       
   321     TPckgBuf<int> requestId(taskId);
       
   322     SendReceive(GetData, TIpcArgs(&requestId, &data));
   293 }
   323 }
   294 
   324 
   295 // -----------------------------------------------------------------------------
   325 // -----------------------------------------------------------------------------
   296 //
   326 //
   297 // -----------------------------------------------------------------------------
   327 // -----------------------------------------------------------------------------
   305 
   335 
   306 // -----------------------------------------------------------------------------
   336 // -----------------------------------------------------------------------------
   307 //
   337 //
   308 // -----------------------------------------------------------------------------
   338 // -----------------------------------------------------------------------------
   309 //
   339 //
   310 int HsActivityDbClientPrivate::getThumbnail(QPixmap &dst, const QString & src)
   340 void HsActivityDbClientPrivate::PushL(HsActivityDbAsyncRequestPrivate * task)
   311 {
   341 {
   312     RBuf8 data;
   342     (KErrNotFound == mAsyncTasks.Find(task)) ?
   313     QVariantHash thumbnailRequest;
   343         mAsyncTasks.AppendL(task):
   314     thumbnailRequest.insert(ActivityScreenshotKeyword, src);
   344         User::Leave(KErrAlreadyExists);
   315     TPckgBuf<int> sizeBuf(0);
   345 }
   316     CleanupClosePushL(data);
   346 
   317     data.CreateL(256);
   347 // -----------------------------------------------------------------------------
   318     data << thumbnailRequest;
   348 //
   319     User::LeaveIfError(SendReceive(GetThumbnail, TIpcArgs(&data, &sizeBuf)));
   349 // -----------------------------------------------------------------------------
   320     if (sizeBuf() > data.MaxSize()) {
   350 //
   321         data.ReAlloc(sizeBuf());
   351 void HsActivityDbClientPrivate::Pop(HsActivityDbAsyncRequestPrivate *task)
   322     }
   352 {
   323     User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data)));
   353     const TInt offset(mAsyncTasks.Find(task));
   324     dst << data;
   354     if (KErrNotFound != offset) {
   325     CleanupStack::PopAndDestroy(&data);
   355         mAsyncTasks.Remove(offset);
   326     return 0;
   356     }
   327 }
   357 }