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