activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbasyncrequest_p.cpp
changeset 80 397d00875918
parent 73 4bc7b118b3df
--- a/activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbasyncrequest_p.cpp	Fri May 14 16:10:06 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbasyncrequest_p.cpp	Thu May 27 13:11:12 2010 +0300
@@ -19,7 +19,7 @@
 #include "hsactivitydbclient_p.h"
 #include "hsactivitydbclient.h"
 #include <fbs.h>
-#include <xqconversions>
+#include <XQConversions>
 
 
 // -----------------------------------------------------------------------------
@@ -27,7 +27,7 @@
 // -----------------------------------------------------------------------------
 //
 HsActivityDbAsyncRequestPrivate*
-HsActivityDbAsyncRequestPrivate::NewL(HsActivityDbAsyncRequestObserver &observer,
+HsActivityDbAsyncRequestPrivate::NewLC(HsActivityDbAsyncRequestObserver &observer,
                                       HsActivityDbClientPrivate &session, 
                                       TAsyncRequest requestType,
                                       void* userData)
@@ -36,7 +36,6 @@
     new(ELeave)HsActivityDbAsyncRequestPrivate(observer, session, requestType, userData);
     CleanupStack::PushL(self);
     self->mDataBuf.CreateL(64);
-    CleanupStack::Pop(self);
     return self;
 }
 
@@ -44,12 +43,36 @@
 //
 // -----------------------------------------------------------------------------
 //
-HsActivityDbAsyncRequestPrivate*
-HsActivityDbAsyncRequestPrivate::newWaitActivityL(HsActivityDbAsyncRequestObserver & observer, 
-            HsActivityDbClientPrivate & session)
-    {
-    return HsActivityDbAsyncRequestPrivate::NewL(observer, session, EWaitActivity);
-    }
+void HsActivityDbAsyncRequestPrivate::waitActivityLD(
+                                HsActivityDbAsyncRequestObserver & observer, 
+                                HsActivityDbClientPrivate & session, 
+                                const QVariantHash &activity)
+{
+    HsActivityDbAsyncRequestPrivate *self =
+        HsActivityDbAsyncRequestPrivate::NewLC(observer, 
+                                               session, 
+                                               EWaitActivity);
+    self->mSession.PushL(self);
+    CleanupStack::Pop(self);
+    self->waitActivity(activity);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivityDbAsyncRequestPrivate::notifyDataChangeLD(
+                                   HsActivityDbAsyncRequestObserver &observer, 
+                                   HsActivityDbClientPrivate &session)
+{
+    HsActivityDbAsyncRequestPrivate *self = 
+        HsActivityDbAsyncRequestPrivate::NewLC(observer, 
+                                              session,
+                                              ENotifyDataChange);
+    self->mSession.PushL(self);
+    CleanupStack::Pop(self);
+    self->notifyDataChange();
+}
 
 // -----------------------------------------------------------------------------
 //
@@ -58,12 +81,14 @@
 void HsActivityDbAsyncRequestPrivate::getThumbnailLD(HsActivityDbAsyncRequestObserver &observer,
                                       HsActivityDbClientPrivate &session, 
                                       QSize size, 
-                                      QString imagePath, 
-                                      QString  mimeType, 
+                                      const QString &imagePath, 
+                                      const QString &mimeType, 
                                       void *userDdata)
 {
     HsActivityDbAsyncRequestPrivate *instance = 
-        HsActivityDbAsyncRequestPrivate::NewL(observer, session, EWaitGetThumbnail, userDdata);
+        HsActivityDbAsyncRequestPrivate::NewLC(observer, session, EWaitGetThumbnail, userDdata);
+    session.PushL(instance);
+    CleanupStack::Pop(instance);
     instance->getThumbnail( size, imagePath, mimeType);
 }
 
@@ -104,7 +129,10 @@
 void HsActivityDbAsyncRequestPrivate::DoCancel()
 {
     if (IsActive()) {
-        mSession.cancelWaitActivity();
+        switch (mRequestType) {
+        case EWaitActivity: mSession.cancelWaitActivity(); break;
+        case ENotifyDataChange: mSession.cancelNotifyDataChange(); break;
+        };
     }
 }
 
@@ -114,35 +142,45 @@
 //
 void HsActivityDbAsyncRequestPrivate::RunL()
 {
-    int requestResult(iStatus.Int());
-    if (KErrNone == requestResult) {
-        switch (mRequestType){
-        case WaitActivity: {
+    switch (mRequestType) {
+    case WaitActivity: {
+        QString data;
+        if (KErrNone == iStatus.Int()) {
             RBuf8 buff;
             CleanupClosePushL(buff);
-            QString data;
             if (0 < mDataSize()) {
                 buff.CreateL(mDataSize());
             }
             mSession.getData(mTaskId(), buff);
             data = QString::fromAscii(reinterpret_cast<const char *>(buff.Ptr()),
                                       buff.Length());
-            buff.Close();
-            mObserver.asyncRequestCompleated(requestResult, mRequestType, data);
             CleanupStack::PopAndDestroy(&buff);
-            break;
-            }
-        case EWaitGetThumbnail: {
+        }
+        mObserver.asyncRequestCompleated(iStatus.Int(), mRequestType, data);
+        mSession.Pop(this);
+        delete this;
+        break;
+        }
+    case EWaitGetThumbnail: {
+        QPixmap pixmap;
+        if (KErrNone == iStatus.Int()) {
             CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
             CleanupStack::PushL(bitmap);
             User::LeaveIfError(bitmap->Duplicate(mBitmapId()));
             mSession.getData(mTaskId(), mDataBuf);//ACK Bitmap copy
-            mObserver.asyncRequestCompleated(requestResult, mRequestType, QPixmap::fromSymbianCFbsBitmap(bitmap), mUserData);
+            pixmap = QPixmap::fromSymbianCFbsBitmap(bitmap);
             CleanupStack::PopAndDestroy(bitmap);
-            break;
-            }
+        }
+        mObserver.asyncRequestCompleated(iStatus.Int(), mRequestType, pixmap, mUserData);
+        mSession.Pop(this);
+        delete this;
+        break;
         }
+    case ENotifyDataChange: {
+        mObserver.asyncRequestCompleated(iStatus.Int(),mRequestType);
         mSession.Pop(this);
+        delete this;
+        }
     }
 }
 
@@ -174,3 +212,14 @@
     mBitmapMimeType = XQConversions::qStringToS60Desc8(mimeType);
     mSession.sendDataAsync(mRequestType, TIpcArgs(&mBitmapId, &mTaskId, mBitmapPath, mBitmapMimeType), iStatus);
 }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void HsActivityDbAsyncRequestPrivate::notifyDataChange()
+{
+    iStatus = KRequestPending;
+    SetActive();
+    mSession.sendDataAsync(ENotifyDataChange, TIpcArgs(), iStatus);
+}