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