messagingapp/msgappfw/plugins/msgplugin/src/ccsmsghandler.cpp
author hgs
Fri, 09 Jul 2010 14:46:10 +0530
changeset 41 25fe1fe642e3
parent 37 518b245aa84c
child 51 3507212d340e
permissions -rw-r--r--
201027_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007 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:  CS Message Handler, This class caches the conversation server
hgs
parents:
diff changeset
    15
 *                with the message data and also sends run-time updates to the
hgs
parents:
diff changeset
    16
 *                server with the message data
hgs
parents:
diff changeset
    17
 *
hgs
parents:
diff changeset
    18
*/
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// USER INCLUDES
hgs
parents:
diff changeset
    22
#include "ccsmsghandler.h"
hgs
parents:
diff changeset
    23
#include "msgbiouids.h"
hgs
parents:
diff changeset
    24
#include "ccsdefs.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// SYSTEM INCLUDES
hgs
parents:
diff changeset
    27
#include <smsclnt.h>                   
hgs
parents:
diff changeset
    28
#include <mmsclient.h>
hgs
parents:
diff changeset
    29
#include <mtclreg.h>
hgs
parents:
diff changeset
    30
#include <csmsemailfields.h>
hgs
parents:
diff changeset
    31
#include <txtrich.h>
hgs
parents:
diff changeset
    32
#include <msvids.h>
hgs
parents:
diff changeset
    33
#include <e32const.h>
hgs
parents:
diff changeset
    34
#include <SendUiConsts.h>
hgs
parents:
diff changeset
    35
#include <pushentry.h> // For services messages
hgs
parents:
diff changeset
    36
#include <e32cmn.h>
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
//CONSTANTS
hgs
parents:
diff changeset
    40
const TInt KMessageArrayGranularity = 50;
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// NOTE:- DRAFT ENTRIES ARE NOT HANDLED IN THE PLUGIN
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ============================== MEMBER FUNCTIONS ============================
hgs
parents:
diff changeset
    45
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    46
// CCsMsgHandler::NewL
hgs
parents:
diff changeset
    47
// Two Phase Construction
hgs
parents:
diff changeset
    48
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
//
hgs
parents:
diff changeset
    50
CCsMsgHandler* CCsMsgHandler::NewL(MCsMsgObserver *aMsgObserver)
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
    PRINT ( _L("Enter CCsMsgHandler::NewL") );
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
    CCsMsgHandler* self = new ( ELeave ) CCsMsgHandler();
hgs
parents:
diff changeset
    55
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    56
    self->ConstructL(aMsgObserver);
hgs
parents:
diff changeset
    57
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    PRINT ( _L("End CCsMsgHandler::NewL") );
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    return self;
hgs
parents:
diff changeset
    62
    }
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    65
// CCsMsgHandler::~CCsMsgHandler
hgs
parents:
diff changeset
    66
// Destructor
hgs
parents:
diff changeset
    67
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    68
//
hgs
parents:
diff changeset
    69
CCsMsgHandler::~CCsMsgHandler()
hgs
parents:
diff changeset
    70
    {
hgs
parents:
diff changeset
    71
    PRINT ( _L("Enter CCsMsgHandler::~CCsMsgHandler") );
hgs
parents:
diff changeset
    72
    if(iIdle)
hgs
parents:
diff changeset
    73
        {
hgs
parents:
diff changeset
    74
        iIdle->Cancel();
hgs
parents:
diff changeset
    75
        delete iIdle;
hgs
parents:
diff changeset
    76
        iIdle=NULL;
hgs
parents:
diff changeset
    77
        }
hgs
parents:
diff changeset
    78
    if(iMsgPluginUtility)
hgs
parents:
diff changeset
    79
        {
hgs
parents:
diff changeset
    80
        delete iMsgPluginUtility;
hgs
parents:
diff changeset
    81
        iMsgPluginUtility = NULL;
hgs
parents:
diff changeset
    82
        }
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    if(iConverstationEntryList)
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
    87
        iConverstationEntryList->Close();
hgs
parents:
diff changeset
    88
        delete iConverstationEntryList;
hgs
parents:
diff changeset
    89
        iConverstationEntryList = NULL;
hgs
parents:
diff changeset
    90
        }
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    if(iSmsMtm)
hgs
parents:
diff changeset
    93
        {
hgs
parents:
diff changeset
    94
        delete iSmsMtm;
hgs
parents:
diff changeset
    95
        iSmsMtm = NULL;
hgs
parents:
diff changeset
    96
        }
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    if(iMmsMtm)
hgs
parents:
diff changeset
    99
        {
hgs
parents:
diff changeset
   100
        delete iMmsMtm;
hgs
parents:
diff changeset
   101
        iMmsMtm = NULL;
hgs
parents:
diff changeset
   102
        }
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
    if(iMtmRegistry)
hgs
parents:
diff changeset
   105
        {
hgs
parents:
diff changeset
   106
        delete iMtmRegistry;
hgs
parents:
diff changeset
   107
        iMtmRegistry = NULL;
hgs
parents:
diff changeset
   108
        }
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
    if(iSession)
hgs
parents:
diff changeset
   111
        {
hgs
parents:
diff changeset
   112
        delete iSession;
hgs
parents:
diff changeset
   113
        iSession = NULL;
hgs
parents:
diff changeset
   114
        }
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    if(iMessageArray)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        iMessageArray->Reset();
hgs
parents:
diff changeset
   119
        iMessageArray->Close();
hgs
parents:
diff changeset
   120
        delete iMessageArray;
hgs
parents:
diff changeset
   121
        iMessageArray = NULL;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
    PRINT ( _L("End CCsMsgHandler::~CCsMsgHandler") );
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   128
// CCsMsgHandler::ConstructL
hgs
parents:
diff changeset
   129
// Two Phase Construction
hgs
parents:
diff changeset
   130
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   131
//
hgs
parents:
diff changeset
   132
void CCsMsgHandler::ConstructL(MCsMsgObserver *aMsgObserver)
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    PRINT ( _L("Enter CCsMsgHandler::ConstructL") );
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    iMsgObserver = aMsgObserver;
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    iSession = CMsvSession::OpenSyncL(*this);
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    iMsgPluginUtility = CCsMsgPluginUtility::NewL();
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
    iConverstationEntryList = new(ELeave) RPointerArray<CCsConversationEntry>(1);
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    iMtmRegistry = CClientMtmRegistry::NewL( *iSession );
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    iSmsMtm = static_cast<CSmsClientMtm*>( iMtmRegistry->
hgs
parents:
diff changeset
   147
            NewMtmL( KSenduiMtmSmsUid ) );
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    iMmsMtm = static_cast<CMmsClientMtm*>( iMtmRegistry->
hgs
parents:
diff changeset
   150
            NewMtmL( KSenduiMtmMmsUid ) );
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    iState = EReadInbox;
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    iMessageArray = new (ELeave)RArray <TMsvId>(KMessageArrayGranularity);
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    PRINT ( _L("End CCsMsgHandler::ConstructL") );
hgs
parents:
diff changeset
   157
    }
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   160
// CCsMsgHandler::CCsMsgHandler
hgs
parents:
diff changeset
   161
// Two Phase Construction
hgs
parents:
diff changeset
   162
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   163
//
hgs
parents:
diff changeset
   164
CCsMsgHandler::CCsMsgHandler()
hgs
parents:
diff changeset
   165
    {
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
// CCsMsgHandler::ProcessResultsL()
hgs
parents:
diff changeset
   170
// ProcessResultsL fetches results for the searchsort query and
hgs
parents:
diff changeset
   171
// updates the CCsServer with the fetched data
hgs
parents:
diff changeset
   172
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   173
//
hgs
parents:
diff changeset
   174
void CCsMsgHandler::ProcessResultsL(TMsvEntry entry)
hgs
parents:
diff changeset
   175
    {
hgs
parents:
diff changeset
   176
    PRINT ( _L("Enter CCsMsgHandler::ProcessResultsL"));
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    // Cleanup the conversationEntry List initially.
hgs
parents:
diff changeset
   179
    // So that the previous entries not cleaned up in
hgs
parents:
diff changeset
   180
    // the event of Leave have been clean up.
hgs
parents:
diff changeset
   181
    iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    RPointerArray<HBufC> addressList;
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
    // Ignore hidden items during upload
hgs
parents:
diff changeset
   186
    if ( entry.Visible() == EFalse )
hgs
parents:
diff changeset
   187
        {
hgs
parents:
diff changeset
   188
        return;
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
    
hgs
parents:
diff changeset
   191
    if ( entry.Parent() == KMsvGlobalInBoxIndexEntryIdValue ||
hgs
parents:
diff changeset
   192
         entry.Parent() == KMsvSentEntryIdValue ||
hgs
parents:
diff changeset
   193
         entry.Parent() == KMsvGlobalOutBoxIndexEntryIdValue )
hgs
parents:
diff changeset
   194
        {
hgs
parents:
diff changeset
   195
        CleanupResetAndDestroyPushL(addressList);
hgs
parents:
diff changeset
   196
        
hgs
parents:
diff changeset
   197
        iMsgPluginUtility->CreateContactL(iSession, entry, addressList);
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
        //process entry
hgs
parents:
diff changeset
   200
        ExtractAddressesL(entry, ERead, addressList);
hgs
parents:
diff changeset
   201
        
hgs
parents:
diff changeset
   202
        // Cleanup addressList
hgs
parents:
diff changeset
   203
        CleanupStack::PopAndDestroy(&addressList);
hgs
parents:
diff changeset
   204
        }
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    PRINT ( _L("Exit CCsMsgHandler::ProcessResultsL") );
hgs
parents:
diff changeset
   207
    }
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   210
// CCsMsgHandler::HandleSessionEventL
hgs
parents:
diff changeset
   211
// Implemented for MMsvSessionObserver
hgs
parents:
diff changeset
   212
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   213
//
hgs
parents:
diff changeset
   214
void CCsMsgHandler::HandleSessionEventL( TMsvSessionEvent aEvent,
hgs
parents:
diff changeset
   215
        TAny* aArg1,
hgs
parents:
diff changeset
   216
        TAny* aArg2,
hgs
parents:
diff changeset
   217
        TAny* /*aArg3*/)
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
    PRINT1 ( _L("Enter CCsMsgHandler::HandleSessionEventL aEvent=%d"),aEvent );
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
    CMsvEntrySelection* selection=NULL;
hgs
parents:
diff changeset
   222
    TMsvId parent;
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
    //args
hgs
parents:
diff changeset
   225
    if(aArg1 == NULL || aArg2 == NULL)
hgs
parents:
diff changeset
   226
        {
hgs
parents:
diff changeset
   227
        PRINT ( _L("Enter CCsMsgHandler::HandleSessionEventL arguments invalid"));
hgs
parents:
diff changeset
   228
        return;
hgs
parents:
diff changeset
   229
        }
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
    //start, processing the event
hgs
parents:
diff changeset
   232
    selection= (CMsvEntrySelection*)aArg1;
hgs
parents:
diff changeset
   233
    parent = *(TMsvId*)aArg2;
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
    // Cleanup the conversationEntry List initially.
hgs
parents:
diff changeset
   236
    iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
    switch( aEvent )
hgs
parents:
diff changeset
   239
        {
hgs
parents:
diff changeset
   240
        case EMsvEntriesChanged:
hgs
parents:
diff changeset
   241
        case EMsvEntriesMoved:
hgs
parents:
diff changeset
   242
            {
hgs
parents:
diff changeset
   243
            HandleEventL(selection,parent);
hgs
parents:
diff changeset
   244
            }
hgs
parents:
diff changeset
   245
            break;
hgs
parents:
diff changeset
   246
            
hgs
parents:
diff changeset
   247
        case EMsvEntriesDeleted:
hgs
parents:
diff changeset
   248
            {
hgs
parents:
diff changeset
   249
            if ( parent == KMsvGlobalInBoxIndexEntryIdValue || 
hgs
parents:
diff changeset
   250
                 parent == KMsvSentEntryIdValue ||
hgs
parents:
diff changeset
   251
                 parent == KMsvGlobalOutBoxIndexEntryIdValue)
hgs
parents:
diff changeset
   252
                {
hgs
parents:
diff changeset
   253
                for( TInt i=0 ; i < selection->Count() ; i++ )
hgs
parents:
diff changeset
   254
                    {
hgs
parents:
diff changeset
   255
                    TMsvId id = selection->At( i );
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
                    //use utility to create conversation entry
hgs
parents:
diff changeset
   258
                    CCsConversationEntry *conversationEntry = 
hgs
parents:
diff changeset
   259
                    iMsgPluginUtility->CreateConversationEntryL(
hgs
parents:
diff changeset
   260
                            NULL,
hgs
parents:
diff changeset
   261
                            id,
hgs
parents:
diff changeset
   262
                            0,
hgs
parents:
diff changeset
   263
                            parent,
hgs
parents:
diff changeset
   264
                            NULL,
hgs
parents:
diff changeset
   265
                            ECsSendStateUnknown,
hgs
parents:
diff changeset
   266
                            ECsAttributeNone,
hgs
parents:
diff changeset
   267
                            0);
hgs
parents:
diff changeset
   268
                    CleanupStack::PushL(conversationEntry);
hgs
parents:
diff changeset
   269
                    iConverstationEntryList->AppendL( conversationEntry );
hgs
parents:
diff changeset
   270
                    CleanupStack::Pop(conversationEntry);
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
                    // call observer interface for each entry
hgs
parents:
diff changeset
   273
                    iMsgObserver->HandleDeleteCompleteL(iConverstationEntryList);
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
                    //cleanup before next iteration
hgs
parents:
diff changeset
   276
                    iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
   277
                    }
hgs
parents:
diff changeset
   278
                }
hgs
parents:
diff changeset
   279
            }
hgs
parents:
diff changeset
   280
            break;
hgs
parents:
diff changeset
   281
            
hgs
parents:
diff changeset
   282
        case EMsvMediaChanged:
hgs
parents:
diff changeset
   283
            iMsgObserver->HandleRefreshCompleteL();
hgs
parents:
diff changeset
   284
            break;
hgs
parents:
diff changeset
   285
        }
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
    // Cleanup the conversationEntry List before function exits.
hgs
parents:
diff changeset
   288
    iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
   289
    PRINT ( _L("Exit CCsMsgHandler::HandleSessionEventL") );
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// ---------------------------------------------------------------------
hgs
parents:
diff changeset
   293
// CCsMsgHandler::HandleEvent
hgs
parents:
diff changeset
   294
// Handle events
hgs
parents:
diff changeset
   295
// ---------------------------------------------------------------------
hgs
parents:
diff changeset
   296
//
hgs
parents:
diff changeset
   297
void CCsMsgHandler::HandleEventL(CMsvEntrySelection* aSelection, TMsvId aParent)
hgs
parents:
diff changeset
   298
    {
hgs
parents:
diff changeset
   299
    PRINT ( _L("Enter CCsMsgHandler::HandleEvent") );
hgs
parents:
diff changeset
   300
    TMsvEntry entry;
hgs
parents:
diff changeset
   301
    TMsvId service;
hgs
parents:
diff changeset
   302
    TInt error= KErrNone;
hgs
parents:
diff changeset
   303
    RPointerArray<HBufC> addressList;
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
    for( TInt i=0 ; i < aSelection->Count() ; i++ )
hgs
parents:
diff changeset
   306
        {
hgs
parents:
diff changeset
   307
        error = iSession->GetEntry(aSelection->At(i),service,entry);
hgs
parents:
diff changeset
   308
        
hgs
parents:
diff changeset
   309
        if ( entry.Visible() == EFalse )
hgs
parents:
diff changeset
   310
            {
hgs
parents:
diff changeset
   311
            // Do a delete if entry becomes invisible.
hgs
parents:
diff changeset
   312
            // e.g) My Nokia registration messages.
hgs
parents:
diff changeset
   313
            RPointerArray<CCsConversationEntry>* hiddenEntries =  
hgs
parents:
diff changeset
   314
                    new (ELeave) RPointerArray<CCsConversationEntry>();
hgs
parents:
diff changeset
   315
            
hgs
parents:
diff changeset
   316
            CCsConversationEntry *conversationEntry = 
hgs
parents:
diff changeset
   317
                    iMsgPluginUtility->CreateConversationEntryL ( 
hgs
parents:
diff changeset
   318
                            NULL,
hgs
parents:
diff changeset
   319
                            entry.Id(),
hgs
parents:
diff changeset
   320
                            0,
hgs
parents:
diff changeset
   321
                            aParent,
hgs
parents:
diff changeset
   322
                            NULL,
hgs
parents:
diff changeset
   323
                            ECsSendStateUnknown,
hgs
parents:
diff changeset
   324
                            ECsAttributeNone,
hgs
parents:
diff changeset
   325
                            0 );  
hgs
parents:
diff changeset
   326
            CleanupStack::PushL(conversationEntry);
hgs
parents:
diff changeset
   327
            hiddenEntries->AppendL( conversationEntry );
hgs
parents:
diff changeset
   328
            CleanupStack::Pop(conversationEntry);
hgs
parents:
diff changeset
   329
            
hgs
parents:
diff changeset
   330
            // Delete at server
hgs
parents:
diff changeset
   331
            iMsgObserver->HandleDeleteCompleteL(hiddenEntries);
hgs
parents:
diff changeset
   332
            hiddenEntries->ResetAndDestroy();
hgs
parents:
diff changeset
   333
            hiddenEntries->Close();
hgs
parents:
diff changeset
   334
            delete hiddenEntries;
hgs
parents:
diff changeset
   335
            
hgs
parents:
diff changeset
   336
            break;
hgs
parents:
diff changeset
   337
            }
hgs
parents:
diff changeset
   338
        
hgs
parents:
diff changeset
   339
        if ( (KErrNone == error) && (IsMtmSupported(entry.iMtm.iUid) ) )
hgs
parents:
diff changeset
   340
            {
hgs
parents:
diff changeset
   341
            // sent/inbox/Outbox entry
hgs
parents:
diff changeset
   342
            if ( aParent == KMsvSentEntryIdValue ||
hgs
parents:
diff changeset
   343
                 aParent == KMsvGlobalInBoxIndexEntryIdValue )
hgs
parents:
diff changeset
   344
                {
hgs
parents:
diff changeset
   345
                CleanupResetAndDestroyPushL(addressList);
hgs
parents:
diff changeset
   346
                // currently server needs number, so getting it from header
hgs
parents:
diff changeset
   347
                iMsgPluginUtility->CreateContactL(iSession, entry,
hgs
parents:
diff changeset
   348
                        addressList);
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
                //process entry
hgs
parents:
diff changeset
   351
                // entry created in sent already exists, hence an update
hgs
parents:
diff changeset
   352
                ExtractAddressesL(entry, EUpdate, addressList);
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
                CleanupStack::PopAndDestroy(&addressList);
hgs
parents:
diff changeset
   355
                }  
hgs
parents:
diff changeset
   356
                
hgs
parents:
diff changeset
   357
            //for drafts and outbox, the entry changes multiple times,
hgs
parents:
diff changeset
   358
            // so making a check if entry has changed
hgs
parents:
diff changeset
   359
            else if(aParent == KMsvGlobalOutBoxIndexEntryIdValue)
hgs
parents:
diff changeset
   360
                {
hgs
parents:
diff changeset
   361
                //outbox
hgs
parents:
diff changeset
   362
                if(!(iMsgPluginUtility->CompareEntry(iPrevEntry,entry,aParent)))
hgs
parents:
diff changeset
   363
                    {
hgs
parents:
diff changeset
   364
                    TUint sendState = entry.SendingState();
hgs
parents:
diff changeset
   365
                    
hgs
parents:
diff changeset
   366
                    // if the entry state is sent, we dont need to process it
hgs
parents:
diff changeset
   367
                    // as it is going to appear in sent items
hgs
parents:
diff changeset
   368
                    if( ECsSendStateSent != iMsgPluginUtility->GetSendState(entry) )
hgs
parents:
diff changeset
   369
                        {
hgs
parents:
diff changeset
   370
                         CleanupResetAndDestroyPushL(addressList);
hgs
parents:
diff changeset
   371
                        // currently server needs number, so getting it from header
hgs
parents:
diff changeset
   372
                        iMsgPluginUtility->CreateContactL(iSession, entry,
hgs
parents:
diff changeset
   373
                                addressList);
hgs
parents:
diff changeset
   374
                        
hgs
parents:
diff changeset
   375
                        //process entry
hgs
parents:
diff changeset
   376
                        // entry created in sent already exists, hence an update
hgs
parents:
diff changeset
   377
                        ExtractAddressesL(entry, EUpdate, addressList);
hgs
parents:
diff changeset
   378
                        
hgs
parents:
diff changeset
   379
                        iPrevEntry = entry;
hgs
parents:
diff changeset
   380
                        
hgs
parents:
diff changeset
   381
                        CleanupStack::PopAndDestroy(&addressList);
hgs
parents:
diff changeset
   382
                        }
hgs
parents:
diff changeset
   383
                    }//end check changed entry
hgs
parents:
diff changeset
   384
                }
hgs
parents:
diff changeset
   385
            }
hgs
parents:
diff changeset
   386
        }//end for loop
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
    PRINT ( _L("Exit CCsMsgHandler::HandleEvent") );
hgs
parents:
diff changeset
   389
    }
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   392
// CCsMsgHandler::CreateAndAddEntryL
hgs
parents:
diff changeset
   393
// Creates CCsConversationEntry and adds to the list
hgs
parents:
diff changeset
   394
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   395
//
hgs
parents:
diff changeset
   396
void CCsMsgHandler::CreateAndAddEntryL(const TDesC& aContact, 
hgs
parents:
diff changeset
   397
        const TDesC& aDescription, 
hgs
parents:
diff changeset
   398
        const TMsvEntry& aEntry)
hgs
parents:
diff changeset
   399
    {
hgs
parents:
diff changeset
   400
    PRINT ( _L("Enter CCsMsgHandler::CreateAndAddEntryL") );
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
    HBufC* contact = NULL;
hgs
parents:
diff changeset
   403
    HBufC* sDescription = NULL;
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    if (aContact.Length()>0)
hgs
parents:
diff changeset
   406
        {
hgs
parents:
diff changeset
   407
        contact = aContact.AllocLC();
hgs
parents:
diff changeset
   408
        }
hgs
parents:
diff changeset
   409
    if (aDescription.Length()>0)
hgs
parents:
diff changeset
   410
        {
hgs
parents:
diff changeset
   411
        sDescription = aDescription.AllocLC();
hgs
parents:
diff changeset
   412
        }
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
    //use utility to create conversation entry
hgs
parents:
diff changeset
   415
    CCsConversationEntry *conversationEntry = iMsgPluginUtility->CreateConversationEntryL(
hgs
parents:
diff changeset
   416
            contact,
hgs
parents:
diff changeset
   417
            aEntry.Id(),
hgs
parents:
diff changeset
   418
            aEntry.iDate.Int64(),
hgs
parents:
diff changeset
   419
            aEntry.Parent(),
hgs
parents:
diff changeset
   420
            sDescription,
hgs
parents:
diff changeset
   421
            iMsgPluginUtility->GetSendState(aEntry),
hgs
parents:
diff changeset
   422
            iMsgPluginUtility->GetMsgAttributes(aEntry),
hgs
parents:
diff changeset
   423
            ExtractCsType(aEntry));
hgs
parents:
diff changeset
   424
    CleanupStack::PushL(conversationEntry);
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
    //add to the list
hgs
parents:
diff changeset
   427
    iConverstationEntryList->AppendL( conversationEntry );
hgs
parents:
diff changeset
   428
    CleanupStack::Pop(conversationEntry);
hgs
parents:
diff changeset
   429
hgs
parents:
diff changeset
   430
    // cleanup
hgs
parents:
diff changeset
   431
    if (sDescription)
hgs
parents:
diff changeset
   432
        {
hgs
parents:
diff changeset
   433
        CleanupStack::PopAndDestroy(sDescription);
hgs
parents:
diff changeset
   434
        }
hgs
parents:
diff changeset
   435
    if (contact)
hgs
parents:
diff changeset
   436
        {
hgs
parents:
diff changeset
   437
        CleanupStack::PopAndDestroy(contact);
hgs
parents:
diff changeset
   438
        }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
    PRINT ( _L("Exit CCsMsgHandler::CreateAndAddEntryL") );
hgs
parents:
diff changeset
   441
    }
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   444
// CCsMsgHandler::ProcessEntryL
hgs
parents:
diff changeset
   445
// Creates CCsConversationEntry and adds to the list
hgs
parents:
diff changeset
   446
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   447
//
hgs
parents:
diff changeset
   448
void CCsMsgHandler::ProcessEntryL( TEventType aEvent, const TDesC& aContact, 
hgs
parents:
diff changeset
   449
        const TDesC& aDescription, const TMsvEntry& aEntry)
hgs
parents:
diff changeset
   450
    {
hgs
parents:
diff changeset
   451
    PRINT ( _L("Enter CCsMsgHandler::ProcessEntryL") );
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
    // create and add entry to the list
hgs
parents:
diff changeset
   454
    CreateAndAddEntryL(aContact,aDescription,aEntry);
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
    // call cs observer interface for each entry
hgs
parents:
diff changeset
   457
    switch(aEvent)
hgs
parents:
diff changeset
   458
        {
hgs
parents:
diff changeset
   459
        case ERead:
hgs
parents:
diff changeset
   460
            {
hgs
parents:
diff changeset
   461
            iMsgObserver->HandleReadCompleteL(iConverstationEntryList);
hgs
parents:
diff changeset
   462
            }
hgs
parents:
diff changeset
   463
            break;
hgs
parents:
diff changeset
   464
        case EUpdate:
hgs
parents:
diff changeset
   465
            {
hgs
parents:
diff changeset
   466
            iMsgObserver->HandleUpdateCompleteL(iConverstationEntryList);
hgs
parents:
diff changeset
   467
            }
hgs
parents:
diff changeset
   468
            break;
hgs
parents:
diff changeset
   469
        }
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
    // Cleanup the conversationEntry List, as we are just sending one entry at a time
hgs
parents:
diff changeset
   472
    iConverstationEntryList->ResetAndDestroy();
hgs
parents:
diff changeset
   473
hgs
parents:
diff changeset
   474
    PRINT ( _L("Exit CCsMsgHandler::ProcessEntryL") );
hgs
parents:
diff changeset
   475
    }
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   478
// CCsMsgHandler::ExtractAddressL
hgs
parents:
diff changeset
   479
// Extracts the addresses in the to field and updates them to server
hgs
parents:
diff changeset
   480
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   481
//
hgs
parents:
diff changeset
   482
void CCsMsgHandler::ExtractAddressesL( 
hgs
parents:
diff changeset
   483
        TMsvEntry aEntry, 
hgs
parents:
diff changeset
   484
        TEventType aEvent, 
hgs
parents:
diff changeset
   485
        RPointerArray<HBufC>& addressList )
hgs
parents:
diff changeset
   486
    {
hgs
parents:
diff changeset
   487
    PRINT ( _L("Enter CCsMsgHandler::ExtractAddressesL") );
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
    // For SMS read the whole body.
hgs
parents:
diff changeset
   490
    // For bio type SMS read the iDescription
hgs
parents:
diff changeset
   491
    // For other message types read the iDescription
hgs
parents:
diff changeset
   492
    // Note: After the LoadMessageL() the iDescription is getting 
hgs
parents:
diff changeset
   493
    // deleted so need to make a copy before that.
hgs
parents:
diff changeset
   494
    TPtrC description;
hgs
parents:
diff changeset
   495
    HBufC* tmpBuffer = NULL;
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
    if ( (aEntry.iBioType && 
hgs
parents:
diff changeset
   498
	      aEntry.iBioType != KUidMsgSubTypeMmsAudioMsg.iUid ) || 
hgs
parents:
diff changeset
   499
		  aEntry.iMtm == KSenduiMtmBtUid ) 
hgs
parents:
diff changeset
   500
        {
hgs
parents:
diff changeset
   501
        tmpBuffer = aEntry.iDescription.AllocLC();
hgs
parents:
diff changeset
   502
        description.Set( tmpBuffer->Des() );         
hgs
parents:
diff changeset
   503
        }    
hgs
parents:
diff changeset
   504
    else if ( aEntry.iMtm == KSenduiMtmSmsUid )  
hgs
parents:
diff changeset
   505
        {
hgs
parents:
diff changeset
   506
        iSmsMtm->SwitchCurrentEntryL( aEntry.Id() );
hgs
parents:
diff changeset
   507
        iSmsMtm->LoadMessageL();
hgs
parents:
diff changeset
   508
            
hgs
parents:
diff changeset
   509
        CRichText& body = iSmsMtm->Body();
hgs
parents:
diff changeset
   510
        TInt smsLength = body.DocumentLength();      
hgs
parents:
diff changeset
   511
        tmpBuffer = HBufC::NewLC(smsLength);
hgs
parents:
diff changeset
   512
        TPtr ptr(tmpBuffer->Des());
hgs
parents:
diff changeset
   513
        body.Extract(ptr, 0);
hgs
parents:
diff changeset
   514
        description.Set( tmpBuffer->Des() );  
hgs
parents:
diff changeset
   515
        }
hgs
parents:
diff changeset
   516
    else if ( aEntry.iMtm == KSenduiMtmMmsUid  || 
hgs
parents:
diff changeset
   517
	          aEntry.iMtm == KSenduiMMSNotificationUid)  
hgs
parents:
diff changeset
   518
        {
hgs
parents:
diff changeset
   519
        tmpBuffer = aEntry.iDescription.AllocLC();
hgs
parents:
diff changeset
   520
        description.Set( tmpBuffer->Des() );         
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
        iMmsMtm->SwitchCurrentEntryL( aEntry.Id() );
hgs
parents:
diff changeset
   523
        iMmsMtm->LoadMessageL();
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
        // Handle addresses
hgs
parents:
diff changeset
   526
        if ( aEntry.Parent() == KMsvGlobalInBoxIndexEntryIdValue )
hgs
parents:
diff changeset
   527
            {
hgs
parents:
diff changeset
   528
            HBufC* address = iMmsMtm->Sender().AllocL();
hgs
parents:
diff changeset
   529
            addressList.Append(address);
hgs
parents:
diff changeset
   530
            }
hgs
parents:
diff changeset
   531
        else if ( aEntry.Parent() == KMsvSentEntryIdValue ||
hgs
parents:
diff changeset
   532
                  aEntry.Parent() == KMsvGlobalOutBoxIndexEntryIdValue )
hgs
parents:
diff changeset
   533
            {
hgs
parents:
diff changeset
   534
            const CMsvRecipientList& addresses = iMmsMtm->AddresseeList();
hgs
parents:
diff changeset
   535
            TInt count = addresses.Count();
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
            for( TInt i = 0; i < count; i++)
hgs
parents:
diff changeset
   538
                {
hgs
parents:
diff changeset
   539
                HBufC* address = addresses[i].AllocL();
hgs
parents:
diff changeset
   540
                TPtrC pureAddress = iMsgPluginUtility->PureAddress(*address);
hgs
parents:
diff changeset
   541
                HBufC* address1 = pureAddress.AllocL();
hgs
parents:
diff changeset
   542
                addressList.Append(address1);
hgs
parents:
diff changeset
   543
                delete address;
hgs
parents:
diff changeset
   544
                }
hgs
parents:
diff changeset
   545
            }
hgs
parents:
diff changeset
   546
        }
hgs
parents:
diff changeset
   547
    else
hgs
parents:
diff changeset
   548
        {
hgs
parents:
diff changeset
   549
        return;
hgs
parents:
diff changeset
   550
        }
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
    if ( addressList.Count() > 0 )
hgs
parents:
diff changeset
   553
        {
hgs
parents:
diff changeset
   554
        for ( int i = 0; i < addressList.Count(); i++ )
hgs
parents:
diff changeset
   555
            {
hgs
parents:
diff changeset
   556
            HBufC* address = addressList[i];
hgs
parents:
diff changeset
   557
            ProcessEntryL(aEvent, *address, description, aEntry);
hgs
parents:
diff changeset
   558
            }
hgs
parents:
diff changeset
   559
        }
hgs
parents:
diff changeset
   560
    else
hgs
parents:
diff changeset
   561
        {
hgs
parents:
diff changeset
   562
        // Unknown
hgs
parents:
diff changeset
   563
        ProcessEntryL(aEvent, KNullDesC, description, aEntry);       
hgs
parents:
diff changeset
   564
        }
hgs
parents:
diff changeset
   565
    
hgs
parents:
diff changeset
   566
    //Cleanup tmpBuffer
hgs
parents:
diff changeset
   567
    if ( tmpBuffer )
hgs
parents:
diff changeset
   568
        {
hgs
parents:
diff changeset
   569
		 CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
    PRINT ( _L("Exit CCsMsgHandler::ExtractAddressesL") );
hgs
parents:
diff changeset
   573
    }
hgs
parents:
diff changeset
   574
hgs
parents:
diff changeset
   575
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   576
// CCsMsgHandler::CompareOrder()
hgs
parents:
diff changeset
   577
// Method for determining the sorting behaviour of RArray of TMsvId's  
hgs
parents:
diff changeset
   578
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   579
//
hgs
parents:
diff changeset
   580
static TInt CompareOrder(const TMsvId& aFirst, const TMsvId& aSecond)
hgs
parents:
diff changeset
   581
    {
hgs
parents:
diff changeset
   582
    return aSecond - aFirst;
hgs
parents:
diff changeset
   583
    }
hgs
parents:
diff changeset
   584
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   585
// CCsMsgHandler::UploadMsgL()
hgs
parents:
diff changeset
   586
// State machine to upload all messages 
hgs
parents:
diff changeset
   587
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   588
//
hgs
parents:
diff changeset
   589
TInt CCsMsgHandler::UploadMsgL() 
hgs
parents:
diff changeset
   590
    {
hgs
parents:
diff changeset
   591
    //Release scheduler for scheduling.    
hgs
parents:
diff changeset
   592
    User::After(1);
hgs
parents:
diff changeset
   593
    
hgs
parents:
diff changeset
   594
    switch ( iState ) 
hgs
parents:
diff changeset
   595
        {
hgs
parents:
diff changeset
   596
        case EReadInbox:
hgs
parents:
diff changeset
   597
            {
hgs
parents:
diff changeset
   598
            UpdateMessageArrayL(KMsvGlobalInBoxIndexEntryId);
hgs
parents:
diff changeset
   599
            iState = EReadSent;
hgs
parents:
diff changeset
   600
            return 1;
hgs
parents:
diff changeset
   601
            }
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
        case EReadSent:
hgs
parents:
diff changeset
   604
            {
hgs
parents:
diff changeset
   605
            UpdateMessageArrayL(KMsvSentEntryId);
hgs
parents:
diff changeset
   606
            iState = EReadOutbox;
hgs
parents:
diff changeset
   607
            return 1;
hgs
parents:
diff changeset
   608
            }
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
        case EReadOutbox:
hgs
parents:
diff changeset
   611
            {
hgs
parents:
diff changeset
   612
            UpdateMessageArrayL(KMsvGlobalOutBoxIndexEntryId);
hgs
parents:
diff changeset
   613
            iState = ESortEntries;            
hgs
parents:
diff changeset
   614
            return 1;
hgs
parents:
diff changeset
   615
            }
hgs
parents:
diff changeset
   616
        case ESortEntries:
hgs
parents:
diff changeset
   617
            {
hgs
parents:
diff changeset
   618
            //Sort the elements in the array by descending order of TMsvId's
hgs
parents:
diff changeset
   619
            TLinearOrder<TMsvId> order(CompareOrder);
hgs
parents:
diff changeset
   620
            iMessageArray->Sort(order);
hgs
parents:
diff changeset
   621
            iState = EProcessEntries;
hgs
parents:
diff changeset
   622
            return 1;
hgs
parents:
diff changeset
   623
            }            
hgs
parents:
diff changeset
   624
        case EProcessEntries:
hgs
parents:
diff changeset
   625
            { 
hgs
parents:
diff changeset
   626
            //Process one entry at a time in sequence
hgs
parents:
diff changeset
   627
            //Process the first element in the array on each call, till the end
hgs
parents:
diff changeset
   628
            if(iMessageArray->Count())
hgs
parents:
diff changeset
   629
                {
hgs
parents:
diff changeset
   630
                CMsvEntry* msvEntry= iSession->
hgs
parents:
diff changeset
   631
                        GetEntryL(iMessageArray->operator[](0));
hgs
parents:
diff changeset
   632
                CleanupStack::PushL(msvEntry);
hgs
parents:
diff changeset
   633
                ProcessResultsL(msvEntry->Entry());
hgs
parents:
diff changeset
   634
                CleanupStack::PopAndDestroy(msvEntry);
hgs
parents:
diff changeset
   635
                iMessageArray->Remove(0);
hgs
parents:
diff changeset
   636
                }
hgs
parents:
diff changeset
   637
            else
hgs
parents:
diff changeset
   638
                {
hgs
parents:
diff changeset
   639
                iMessageArray->Reset();
hgs
parents:
diff changeset
   640
                iMsgObserver->HandleCachingCompleted();
hgs
parents:
diff changeset
   641
                return 0; //DONE 
hgs
parents:
diff changeset
   642
                }            
hgs
parents:
diff changeset
   643
            iState = EProcessEntries;
hgs
parents:
diff changeset
   644
            return 1; 
hgs
parents:
diff changeset
   645
        }
hgs
parents:
diff changeset
   646
    }
hgs
parents:
diff changeset
   647
    return 0;    
hgs
parents:
diff changeset
   648
}
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   651
// CCsMsgHandler::UploadMsg()
hgs
parents:
diff changeset
   652
// CIdle callback 
hgs
parents:
diff changeset
   653
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   654
//
hgs
parents:
diff changeset
   655
TInt CCsMsgHandler::UploadMsg(TAny* aArg)
hgs
parents:
diff changeset
   656
    {
hgs
parents:
diff changeset
   657
    CCsMsgHandler* handler = (CCsMsgHandler*) aArg; 
hgs
parents:
diff changeset
   658
    TInt ok = 0;
hgs
parents:
diff changeset
   659
    TRAPD(err, ok = handler->UploadMsgL());
hgs
parents:
diff changeset
   660
    return ((err == KErrNone) && ok);
hgs
parents:
diff changeset
   661
    }
hgs
parents:
diff changeset
   662
hgs
parents:
diff changeset
   663
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   664
// CCsMsgHandler::StartL()
hgs
parents:
diff changeset
   665
// This function starts the state machine to fetch sms data from msvserver
hgs
parents:
diff changeset
   666
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   667
//
hgs
parents:
diff changeset
   668
void CCsMsgHandler::StartL()
hgs
parents:
diff changeset
   669
    {
hgs
parents:
diff changeset
   670
    PRINT ( _L("Enter CCsMsgHandler::Start") );
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
    iState = EReadInbox;
hgs
parents:
diff changeset
   673
    TCallBack callback = TCallBack(UploadMsg, (TAny*) this);
hgs
parents:
diff changeset
   674
    
hgs
parents:
diff changeset
   675
    if(iIdle)
hgs
parents:
diff changeset
   676
        {
hgs
parents:
diff changeset
   677
        delete iIdle;
hgs
parents:
diff changeset
   678
        iIdle = NULL;
hgs
parents:
diff changeset
   679
        }
hgs
parents:
diff changeset
   680
    iIdle = CIdle::NewL(CActive::EPriorityIdle);
hgs
parents:
diff changeset
   681
    iIdle->Start(callback);
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
    PRINT ( _L("End CCsMsgHandler::Start") );
hgs
parents:
diff changeset
   684
    }
hgs
parents:
diff changeset
   685
hgs
parents:
diff changeset
   686
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   687
// CCsMsgHandler::IsMtmSupported()
hgs
parents:
diff changeset
   688
// 
hgs
parents:
diff changeset
   689
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   690
//
hgs
parents:
diff changeset
   691
TBool CCsMsgHandler::IsMtmSupported(long uid)	
hgs
parents:
diff changeset
   692
    {
hgs
parents:
diff changeset
   693
    if ( KSenduiMtmSmsUidValue == uid || \
hgs
parents:
diff changeset
   694
         KSenduiMtmBtUidValue == uid || \
hgs
parents:
diff changeset
   695
         KSenduiMtmMmsUidValue == uid || \
hgs
parents:
diff changeset
   696
         KSenduiMtmBioUidValue == uid  || \
hgs
parents:
diff changeset
   697
         KSenduiMMSNotificationUidValue == uid || \
hgs
parents:
diff changeset
   698
         KUidMtmWapPush ==  TUid::Uid(uid) )
hgs
parents:
diff changeset
   699
        {
hgs
parents:
diff changeset
   700
        return ETrue;
hgs
parents:
diff changeset
   701
        }	
hgs
parents:
diff changeset
   702
    return EFalse;
hgs
parents:
diff changeset
   703
    }
hgs
parents:
diff changeset
   704
hgs
parents:
diff changeset
   705
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   706
// CCsMsgHandler::ExtractCsType()
hgs
parents:
diff changeset
   707
// Extracts the Message type based on the MTM Uid 
hgs
parents:
diff changeset
   708
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   709
//
hgs
parents:
diff changeset
   710
TCsType CCsMsgHandler::ExtractCsType( const TMsvEntry& aEntry)
hgs
parents:
diff changeset
   711
    {
hgs
parents:
diff changeset
   712
    TCsType type = ECsUnknown;
hgs
parents:
diff changeset
   713
    switch(aEntry.iMtm.iUid)
hgs
parents:
diff changeset
   714
        {
hgs
parents:
diff changeset
   715
        case KSenduiMtmSmsUidValue:            
hgs
parents:
diff changeset
   716
            type = ECsSMS;
hgs
parents:
diff changeset
   717
            if (aEntry.iBioType == KMsgBioUidVCard.iUid)
hgs
parents:
diff changeset
   718
                {
hgs
parents:
diff changeset
   719
                type = ECsBioMsg_VCard;
hgs
parents:
diff changeset
   720
                }
hgs
parents:
diff changeset
   721
            break;
hgs
parents:
diff changeset
   722
        case KSenduiMtmBtUidValue:
hgs
parents:
diff changeset
   723
            type = ECsBlueTooth;
hgs
parents:
diff changeset
   724
            break;
hgs
parents:
diff changeset
   725
        case KSenduiMtmMmsUidValue:        
hgs
parents:
diff changeset
   726
           if(aEntry.iBioType == KUidMsgSubTypeMmsAudioMsg.iUid)
hgs
parents:
diff changeset
   727
                {
hgs
parents:
diff changeset
   728
                type = ECsAudio;
hgs
parents:
diff changeset
   729
                }
hgs
parents:
diff changeset
   730
            else
hgs
parents:
diff changeset
   731
                {
hgs
parents:
diff changeset
   732
                type = ECsMMS;
hgs
parents:
diff changeset
   733
                }
hgs
parents:
diff changeset
   734
            break;
hgs
parents:
diff changeset
   735
        case KSenduiMMSNotificationUidValue:            
hgs
parents:
diff changeset
   736
            type = ECsMmsNotification;
hgs
parents:
diff changeset
   737
            break;
hgs
parents:
diff changeset
   738
        case KSenduiMtmBioUidValue:
hgs
parents:
diff changeset
   739
            { 
41
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   740
			if (aEntry.iMtmData1 == KSenduiMtmBtUidValue) 
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   741
			{
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   742
           	 	if (aEntry.iBioType == KMsgBioUidVCard.iUid) 
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   743
				{
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   744
                	type = ECsBlueTooth_VCard;
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   745
            	}
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   746
            	else if (aEntry.iBioType == KMsgBioUidVCalendar.iUid)
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   747
				{
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   748
               		type = ECsBlueTooth_VCal;
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   749
            	}
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   750
           		 break;
25fe1fe642e3 201027_02
hgs
parents: 37
diff changeset
   751
        	}
37
hgs
parents:
diff changeset
   752
            type = ECsBioMsg; 
hgs
parents:
diff changeset
   753
            
hgs
parents:
diff changeset
   754
            // based on the biotype uid set message type
hgs
parents:
diff changeset
   755
            if(aEntry.iBioType == KMsgBioUidRingingTone.iUid)
hgs
parents:
diff changeset
   756
                {
hgs
parents:
diff changeset
   757
                type = ECsRingingTone;
hgs
parents:
diff changeset
   758
                }
hgs
parents:
diff changeset
   759
            else if(aEntry.iBioType == KMsgBioProvisioningMessage.iUid)
hgs
parents:
diff changeset
   760
                {
hgs
parents:
diff changeset
   761
                type = ECsProvisioning;
hgs
parents:
diff changeset
   762
                }
hgs
parents:
diff changeset
   763
		    else if (aEntry.iBioType == KMsgBioUidVCard.iUid)
hgs
parents:
diff changeset
   764
                {
hgs
parents:
diff changeset
   765
                type = ECsBioMsg_VCard;
hgs
parents:
diff changeset
   766
                }
hgs
parents:
diff changeset
   767
            else if (aEntry.iBioType == KMsgBioUidVCalendar.iUid)
hgs
parents:
diff changeset
   768
                {
hgs
parents:
diff changeset
   769
                type = ECsBioMsg_VCal;
hgs
parents:
diff changeset
   770
       		 }
hgs
parents:
diff changeset
   771
       		 else if (aEntry.iBioType == KMsgBioNokiaServiceMessage.iUid) {
hgs
parents:
diff changeset
   772
            	type = ECsBioMgs_NokiaService;
hgs
parents:
diff changeset
   773
        }
hgs
parents:
diff changeset
   774
    }
hgs
parents:
diff changeset
   775
        break;
hgs
parents:
diff changeset
   776
    default:
hgs
parents:
diff changeset
   777
        type = ECsUnknown;
hgs
parents:
diff changeset
   778
        break;
hgs
parents:
diff changeset
   779
    }
hgs
parents:
diff changeset
   780
    return (type);
hgs
parents:
diff changeset
   781
}
hgs
parents:
diff changeset
   782
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   783
// void CCsMsgHandler::UpdateMessageArrayL(const TMsvId& aFolderId)
hgs
parents:
diff changeset
   784
// Update iMessageArray with the message ID before upload message to csserver. 
hgs
parents:
diff changeset
   785
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   786
//
hgs
parents:
diff changeset
   787
void CCsMsgHandler::UpdateMessageArrayL(const TMsvId& aFolderId)
hgs
parents:
diff changeset
   788
    {
hgs
parents:
diff changeset
   789
    CMsvEntry* msvEntry = iSession->GetEntryL(aFolderId);
hgs
parents:
diff changeset
   790
    CleanupStack::PushL(msvEntry);
hgs
parents:
diff changeset
   791
    // Set sort order
hgs
parents:
diff changeset
   792
    TMsvSelectionOrdering order;
hgs
parents:
diff changeset
   793
    order.SetSorting(EMsvSortById);
hgs
parents:
diff changeset
   794
    msvEntry->SetSortTypeL(order);
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
    CMsvEntrySelection* messages = msvEntry->ChildrenL();  
hgs
parents:
diff changeset
   797
    // Cleanup msvEntry
hgs
parents:
diff changeset
   798
    CleanupStack::PopAndDestroy(msvEntry);
hgs
parents:
diff changeset
   799
    CleanupStack::PushL(messages);
hgs
parents:
diff changeset
   800
hgs
parents:
diff changeset
   801
    TInt messageCount = messages->Count();
hgs
parents:
diff changeset
   802
    
hgs
parents:
diff changeset
   803
    // In case of large number of message caching
hgs
parents:
diff changeset
   804
    // to avoid multiple reallocation alloc memory
hgs
parents:
diff changeset
   805
    // one shot.
hgs
parents:
diff changeset
   806
    if( messageCount > KMessageArrayGranularity)
hgs
parents:
diff changeset
   807
        iMessageArray->Reserve(messageCount);
hgs
parents:
diff changeset
   808
    
hgs
parents:
diff changeset
   809
    for(int i = 0; i < messageCount; i ++)
hgs
parents:
diff changeset
   810
        {
hgs
parents:
diff changeset
   811
        TMsvId msgId=messages->At(i);
hgs
parents:
diff changeset
   812
        iMessageArray->Append(msgId);
hgs
parents:
diff changeset
   813
        }
hgs
parents:
diff changeset
   814
    // Cleanup messages
hgs
parents:
diff changeset
   815
    CleanupStack::PopAndDestroy(messages); 
hgs
parents:
diff changeset
   816
    }
hgs
parents:
diff changeset
   817
// End of file
hgs
parents:
diff changeset
   818