activityfw/activitydatabase/hsactivitydbserver/s60/src/hsactivitysession_p.cpp
changeset 93 82b66994846c
parent 92 782e3408c2ab
child 94 dbb8300717f7
equal deleted inserted replaced
92:782e3408c2ab 93:82b66994846c
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Application entry point
       
    15 *
       
    16 */
       
    17 #include "hsactivityserver_p.h"
       
    18 #include "hsactivitysession_p.h"
       
    19 #include "hsactivityglobals.h"
       
    20 #include "hsserializer.h"
       
    21 #include <qglobal.h>
       
    22 #include <qpixmap.h>
       
    23 // -----------------------------------------------------------------------------
       
    24 //
       
    25 // -----------------------------------------------------------------------------
       
    26 //
       
    27 HsActivitySessionPrivate::HsActivitySessionPrivate(HsActivityDbClientInterface &storage)
       
    28     : mStorage(storage), mAppId(KErrNotFound)
       
    29 {
       
    30 }
       
    31 
       
    32 // -----------------------------------------------------------------------------
       
    33 //
       
    34 // -----------------------------------------------------------------------------
       
    35 //
       
    36 HsActivitySessionPrivate::~HsActivitySessionPrivate()
       
    37 {
       
    38     CancelNotify();
       
    39     mData.Close();
       
    40 }
       
    41 
       
    42 // -----------------------------------------------------------------------------
       
    43 //
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 void HsActivitySessionPrivate::ServiceL(const RMessage2 &message)
       
    47 {
       
    48     mActivity.clear();
       
    49     mResult.clear();
       
    50     mName.clear();
       
    51 
       
    52     switch (message.Function()) {
       
    53         case AddActivity:
       
    54             HandleAddActivityL(message);
       
    55             break;
       
    56         case UpdateActivity:
       
    57             HandleUpdateActivityL(message);
       
    58             break;
       
    59         case RemoveActivity:
       
    60             HandleRemoveActivityL(message);
       
    61             break;
       
    62         case RemoveApplicationActivities:
       
    63             HandleRemoveApplicationActivitiesL(message);
       
    64             break;
       
    65         case Activities:
       
    66             HandleActivitiesL(message);
       
    67             break;
       
    68         case ApplicationActivities:
       
    69             HandleApplicationActivitiesL(message);
       
    70             break;
       
    71         case LaunchActivity:
       
    72             HandleLaunchActivityL(message);
       
    73             break;
       
    74         case WaitActivity:
       
    75             HandleWaitActivityL(message);
       
    76             return; //!!!!! This message shouldn't be compleated !!!!!
       
    77         case GetThumbnail:
       
    78             HandleGetThumbnailL(message);
       
    79             break;
       
    80         case GetData:
       
    81             HandleGetDataL(message);
       
    82             break;
       
    83         case CancelWait:
       
    84             HandleCancelWaitActivity(message);
       
    85             break;
       
    86         default:
       
    87             message.Panic(KErr400, CServer2::EBadMessageNumber);
       
    88     }
       
    89     message.Complete(KErrNone);
       
    90 }
       
    91 
       
    92 // -----------------------------------------------------------------------------
       
    93 //
       
    94 // -----------------------------------------------------------------------------
       
    95 //
       
    96 void HsActivitySessionPrivate::ServiceError(const RMessage2 &message, TInt error)
       
    97 {
       
    98     message.Complete(error);
       
    99 }
       
   100 
       
   101 // -----------------------------------------------------------------------------
       
   102 //
       
   103 // -----------------------------------------------------------------------------
       
   104 //
       
   105 void HsActivitySessionPrivate::HandleAddActivityL(const RMessage2 &message)
       
   106 {
       
   107     ReadDataL(message);
       
   108     LeaveIfNotZero(mStorage.addActivity(mActivity));
       
   109 }
       
   110 
       
   111 // -----------------------------------------------------------------------------
       
   112 //
       
   113 // -----------------------------------------------------------------------------
       
   114 //
       
   115 void HsActivitySessionPrivate::HandleUpdateActivityL(const RMessage2 &message)
       
   116 {
       
   117     ReadDataL(message);
       
   118     LeaveIfNotZero(mStorage.updateActivity(mActivity));
       
   119 }
       
   120 
       
   121 // -----------------------------------------------------------------------------
       
   122 //
       
   123 // -----------------------------------------------------------------------------
       
   124 //
       
   125 void HsActivitySessionPrivate::HandleRemoveActivityL(const RMessage2 &message)
       
   126 {
       
   127     ReadDataL(message);
       
   128     LeaveIfNotZero(mStorage.removeActivity(mActivity));
       
   129 }
       
   130 
       
   131 // -----------------------------------------------------------------------------
       
   132 //
       
   133 // -----------------------------------------------------------------------------
       
   134 //
       
   135 void HsActivitySessionPrivate::HandleRemoveApplicationActivitiesL(const RMessage2 &message)
       
   136 {
       
   137     ReadDataL(message);
       
   138     LeaveIfNotZero(mStorage.removeApplicationActivities(mActivity));
       
   139 }
       
   140 
       
   141 // -----------------------------------------------------------------------------
       
   142 //
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 void HsActivitySessionPrivate::HandleActivitiesL(const RMessage2 &message)
       
   146 {
       
   147     int errNo(KErrNone);
       
   148     QT_TRYCATCH_LEAVING(errNo = mStorage.activities(mResult));
       
   149     LeaveIfNotZero(errNo);
       
   150     mData << mResult;
       
   151     TPckgC<int> dataSize(mData.Size());
       
   152     message.WriteL(1, dataSize);
       
   153 }
       
   154 
       
   155 // -----------------------------------------------------------------------------
       
   156 //
       
   157 // -----------------------------------------------------------------------------
       
   158 //
       
   159 void HsActivitySessionPrivate::HandleApplicationActivitiesL(const RMessage2 &message)
       
   160 {
       
   161     int errNo(KErrNone);
       
   162     ReadDataL(message);
       
   163     QT_TRYCATCH_LEAVING(errNo = mStorage.applicationActivities(mResult, mActivity));
       
   164     LeaveIfNotZero(errNo);
       
   165     mData << mResult;
       
   166     TPckgC<int> dataSize(mData.Size());
       
   167     message.WriteL(1, dataSize);
       
   168 }
       
   169 
       
   170 // -----------------------------------------------------------------------------
       
   171 //
       
   172 // -----------------------------------------------------------------------------
       
   173 //
       
   174 void HsActivitySessionPrivate::HandleLaunchActivityL(const RMessage2 &message)
       
   175 {
       
   176     ReadDataL(message);
       
   177     LaunchActivityL();
       
   178 }
       
   179 
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 // -----------------------------------------------------------------------------
       
   183 //
       
   184 void HsActivitySessionPrivate::HandleWaitActivityL(const RMessage2 &message)
       
   185 {
       
   186     ReadDataL(message);
       
   187     WaitActivityL(message);
       
   188 }
       
   189 
       
   190 // -----------------------------------------------------------------------------
       
   191 //
       
   192 // -----------------------------------------------------------------------------
       
   193 //
       
   194 void HsActivitySessionPrivate::HandleGetThumbnailL(const RMessage2 &message)
       
   195 {
       
   196     ReadDataL(message);
       
   197     GetThumbnailL(message);
       
   198 }
       
   199 
       
   200 // -----------------------------------------------------------------------------
       
   201 //
       
   202 // -----------------------------------------------------------------------------
       
   203 //
       
   204 void HsActivitySessionPrivate::HandleCancelWaitActivity(const RMessage2& /*message*/)
       
   205 {
       
   206     CancelNotify();
       
   207 }
       
   208 
       
   209 // -----------------------------------------------------------------------------
       
   210 //
       
   211 // -----------------------------------------------------------------------------
       
   212 //
       
   213 void HsActivitySessionPrivate::HandleGetDataL(const RMessage2 &message)
       
   214 {
       
   215     message.WriteL(0, mData);
       
   216 }
       
   217 
       
   218 // -----------------------------------------------------------------------------
       
   219 //
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void HsActivitySessionPrivate::LaunchActivityL()
       
   223 {
       
   224     CServer2 *const server(const_cast<CServer2 *>(Server()));
       
   225     if (mActivity.end() == mActivity.find(ActivityApplicationKeyword) ||
       
   226             mActivity.end() == mActivity.find(ActivityActivityKeyword)) {
       
   227         User::Leave(KErrCorrupt);
       
   228     }
       
   229     static_cast<HsActivityServerPrivate *>
       
   230     (server)->notifyL(mActivity.find(ActivityApplicationKeyword).value().toInt(),
       
   231                       mActivity.find(ActivityActivityKeyword).value().toString());
       
   232 }
       
   233 
       
   234 // -----------------------------------------------------------------------------
       
   235 //
       
   236 // -----------------------------------------------------------------------------
       
   237 //
       
   238 void HsActivitySessionPrivate::LaunchActivityL(const RMessage2 &message,
       
   239         const QString &name)
       
   240 {
       
   241     if (mData.MaxSize() < name.toAscii().length()) {
       
   242         mData.ReAlloc(name.toAscii().length());
       
   243     }
       
   244     mData.Copy(reinterpret_cast<const TUint8*>(name.toAscii().data()),
       
   245                                                name.toAscii().length());
       
   246     TPckgC<int> dataSize(mData.Size());
       
   247     message.WriteL(1, dataSize);
       
   248     message.Complete(KErrNone);
       
   249 }
       
   250 // -----------------------------------------------------------------------------
       
   251 //
       
   252 // -----------------------------------------------------------------------------
       
   253 //
       
   254 void HsActivitySessionPrivate::WaitActivityL(const RMessage2 &msg)
       
   255 {
       
   256     CServer2 *const server(const_cast<CServer2 *>(Server()));
       
   257     if (mActivity.end() == mActivity.find(ActivityApplicationKeyword)) {
       
   258         User::Leave(KErrCorrupt);
       
   259     }
       
   260     mAppId = mActivity.find(ActivityApplicationKeyword).value().toInt();
       
   261     static_cast<HsActivityServerPrivate *>
       
   262     (server)->waitNotification(mAppId, msg);
       
   263 }
       
   264 
       
   265 // -----------------------------------------------------------------------------
       
   266 //
       
   267 // -----------------------------------------------------------------------------
       
   268 //
       
   269 void HsActivitySessionPrivate::GetThumbnailL(const RMessage2 &message)
       
   270 {
       
   271     if (mActivity.constEnd() == mActivity.constFind(ActivityScreenshotKeyword)) {
       
   272         User::Leave(KErrGeneral);
       
   273     }
       
   274     mData << QPixmap(mActivity.constFind(ActivityScreenshotKeyword).value().toString());
       
   275     TPckgC<int> dataSize(mData.Size());
       
   276     message.WriteL(1, dataSize);
       
   277 }
       
   278 
       
   279 // -----------------------------------------------------------------------------
       
   280 //
       
   281 // -----------------------------------------------------------------------------
       
   282 //
       
   283 void HsActivitySessionPrivate::CancelNotify()
       
   284 {
       
   285     if (mAppId != KErrNotFound) {
       
   286         CServer2 *const server(const_cast<CServer2 *>(Server()));
       
   287         static_cast<HsActivityServerPrivate *>(server)->cancelNotify(mAppId);
       
   288         mAppId = KErrNotFound;
       
   289     }
       
   290 }
       
   291 
       
   292 // -----------------------------------------------------------------------------
       
   293 //
       
   294 // -----------------------------------------------------------------------------
       
   295 //
       
   296 void HsActivitySessionPrivate::CancelNotify(RMessage2 &message)
       
   297 {
       
   298     message.Complete(KErrCancel);
       
   299 }
       
   300 
       
   301 // -----------------------------------------------------------------------------
       
   302 //
       
   303 // -----------------------------------------------------------------------------
       
   304 //
       
   305 void HsActivitySessionPrivate::ReadDataL(const RMessage2 &src)
       
   306 {
       
   307     int srcLength = src.GetDesLength(0);
       
   308     User::LeaveIfError(srcLength);
       
   309     RBuf8 buffer;
       
   310     CleanupClosePushL(buffer);
       
   311     buffer.CreateL(srcLength);
       
   312     src.ReadL(0, buffer, 0);
       
   313     if (buffer.Length() != srcLength) {
       
   314         User::Leave(KErrCorrupt);
       
   315     }
       
   316     mActivity << buffer;
       
   317     CleanupStack::PopAndDestroy(&buffer);
       
   318 }
       
   319 
       
   320 // -----------------------------------------------------------------------------
       
   321 //
       
   322 // -----------------------------------------------------------------------------
       
   323 //
       
   324 void HsActivitySessionPrivate::LeaveIfNotZero(int errNo)
       
   325 {
       
   326     if (KErrNone != errNo) {
       
   327         User::LeaveIfError(errNo);
       
   328         User::Leave(KErrGeneral);
       
   329     }
       
   330 }