--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpststorage/src/cvimpststoragevpbkstorehandler.cpp Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,1318 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class that provides handling of vpbk store
+*
+*/
+
+
+// INCLUDE FILES
+#include "cvimpststoragevpbkstorehandler.h"
+
+#include "mvimpststoragevpbkstorehandler.h"
+
+//vpbk interfaces
+#include <MVPbkContactStoreObserver.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactLink.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+#include <MVPbkContactView.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactFieldUriData.h>
+#include <MVPbkContactFieldBinaryData.h>
+#include <MVPbkContactFieldData.h>
+#include <CVPbkContactViewDefinition.h>
+
+#include <MVPbkViewContact.h>
+#include <MVPbkStoreContact.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <MVPbkStoreContactFieldCollection.h>
+#include <MVPbkStoreContactField.h>
+#include <MVPbkFieldType.h>
+#include <VPbkEng.rsg>
+#include <CVPbkContactLinkArray.h>
+#include <CVPbkFieldTypeSelector.h>
+#include <CPbk2SortOrderManager.h>
+#include <MVPbkContactFieldBinaryData.h>
+
+#include "uiservicetabtracer.h"
+#include "tvimpstconsts.h"
+#include <cntdb.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::
+// CVIMPSTStorageVPbkStoreHandler
+// ---------------------------------------------------------------------------
+//
+CVIMPSTStorageVPbkStoreHandler:: CVIMPSTStorageVPbkStoreHandler( MVIMPSTStorageVPbkStoreHandler& aStoreHandler,TBool aLocalStore ):
+ CActive( CActive::EPriorityIdle ),
+ iStoreHandler(aStoreHandler ),
+ iStoreEventType( EVPbkUnknownEvent ),
+ iFetcingIndex( 0 ),
+ iLocalStore( aLocalStore )
+ {
+ TRACER_AUTO;
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ConstructL(const TDesC& aStoreName,const TDesC& aServiceName )
+ {
+ TRACER_AUTO;
+ iAddIdInProgress = NULL;
+ iStoreName = aStoreName.AllocL();
+ iServiceName = aServiceName.AllocL();
+ CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
+ uriArray->AppendL( TVPbkContactStoreUriPtr( aStoreName ) );
+ if( !uriArray->IsIncluded( TVPbkContactStoreUriPtr( KPhoneBookDbURI ) ) )
+ {
+ TRACE( "phonebook store apended" );
+ uriArray->AppendL( TVPbkContactStoreUriPtr( KPhoneBookDbURI ) );
+ }
+ iContactManager = CVPbkContactManager::NewL( *uriArray, NULL );
+ CleanupStack::PopAndDestroy( uriArray );
+ TRACE( "iContactManager created" );
+ iStores = &iContactManager->ContactStoresL();
+ iStores->OpenAllL( *this );
+ TRACE( " OpenAllL called" );
+ iSortOrderManager = CPbk2SortOrderManager::NewL( iContactManager->FieldTypes(), NULL );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CVIMPSTStorageVPbkStoreHandler* CVIMPSTStorageVPbkStoreHandler::NewL( const TDesC& aContactDb,
+ const TDesC& aServiceName,
+ MVIMPSTStorageVPbkStoreHandler& aStoreHandler,
+ TBool aLocalStore )
+ {
+ TRACER_AUTO;
+ CVIMPSTStorageVPbkStoreHandler* self = NewLC( aContactDb ,aServiceName, aStoreHandler,aLocalStore );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::NewLC
+// ---------------------------------------------------------------------------
+//
+CVIMPSTStorageVPbkStoreHandler* CVIMPSTStorageVPbkStoreHandler::NewLC( const TDesC& aContactDb,
+ const TDesC& aServiceName,
+ MVIMPSTStorageVPbkStoreHandler& aStoreHandler,
+ TBool aLocalStore )
+ {
+ TRACER_AUTO;
+ CVIMPSTStorageVPbkStoreHandler* self =
+ new (ELeave) CVIMPSTStorageVPbkStoreHandler( aStoreHandler ,aLocalStore );
+ CleanupStack::PushL( self );
+ self->ConstructL( aContactDb,aServiceName );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::
+// ~CVIMPSTStorageVPbkStoreHandler
+// ---------------------------------------------------------------------------
+//
+CVIMPSTStorageVPbkStoreHandler:: ~CVIMPSTStorageVPbkStoreHandler()
+ {
+ TRACER_AUTO;
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+ Cancel();
+ ResetAndDestroyRArray();
+ iUnCommittedVPbkContacts.ResetAndDestroy();
+ delete iAddIdInProgress;
+ delete iContactOperation;
+ delete iContactLink;
+ delete iStoreContact;
+ delete iContactView;
+ if ( iContactManager )
+ {
+ TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
+ TRACE( "CloseAll called" );
+ delete iContactManager;
+ }
+ delete iStoreName;
+ delete iSortOrderManager;
+ delete iServiceName;
+
+ }
+ // ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactViewReady
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactViewReady(
+ MVPbkContactViewBase& aView )
+ {
+ TRACER_AUTO;
+ if ( iContactView == &aView && ( iStoreEventType == EVPbkUnknownEvent ) )
+ {
+ iStoreEventType = EVPbkContactReading ;
+ TRAP_IGNORE( HandleContactViewReadyL( *iContactView ) );
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactViewUnavailable
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactViewUnavailable(
+ MVPbkContactViewBase& /*aView*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactAddedToView
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactAddedToView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactRemovedFromView
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactRemovedFromView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactViewError
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactViewError(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aError*/, TBool /*aErrorNotified*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::StoreReady
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::StoreReady(
+ MVPbkContactStore& /*aContactStore*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::StoreUnavailable
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::StoreUnavailable(
+ MVPbkContactStore& /*aContactStore*/,
+ TInt /*aReason*/ )
+ {
+ TRACER_AUTO;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL
+// ---------------------------------------------------------------------------
+//
+MVPbkContactStore* CVIMPSTStorageVPbkStoreHandler::GetDefaultStoreL( const TDesC& aUri )
+ {
+ TRACER_AUTO;
+ return iStores->Find( TVPbkContactStoreUriPtr( aUri ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL(
+ MVPbkContactStore& aContactStore ,
+ TVPbkContactStoreEvent aStoreEvent )
+ {
+ TRACER_AUTO;
+ if( iStore == &aContactStore )
+ {
+ TRACE( "store event" );
+ switch( aStoreEvent.iEventType )
+ {
+ case TVPbkContactStoreEvent::EContactAdded:
+ {
+ TRACE( "EContactAdded event");
+ delete iContactLink;
+ iContactLink = NULL;
+ MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
+ iContactLink = contactLink;
+ CleanupStack::Pop(); // contactLink
+ IssueRequest(); // complete the request
+ TRACE( " EContactAdded done" );
+ break;
+ }
+ case TVPbkContactStoreEvent::EContactDeleted:
+ {
+ TRACE( "EContactDeleted event" );
+ MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
+ delete iContactLink;
+ iContactLink = NULL;
+ iContactLink = contactLink;
+ CleanupStack::Pop(); // contactLink
+ TVIMPSTVPbkStoreEvent storeEvent(EVPbkContactDeleted, iContactLink );
+ iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
+ TRACE( "EContactDeleted done" );
+ break;
+ }
+ case TVPbkContactStoreEvent::EContactChanged:
+ {
+ TRACE( " EContactChanged event" );
+ delete iContactLink;
+ iContactLink = NULL;
+ MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
+ iContactLink = contactLink;
+ CleanupStack::Pop(); // contactLink
+ iStoreEventType = EVPbkContactChanged;
+ IssueRequest(); // complete the request which will begin retriving the iContactLink
+ TRACE("EContactChanged done");
+ break;
+ }
+ case TVPbkContactStoreEvent::EUnknownChanges:
+ {
+ TRACE( " EUnknownChanges event" );
+ iStoreEventType = EVPbkUnknownChanges;
+ TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType);
+ iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
+ TRACE( "EUnknownChanges done" );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ }
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::OpenComplete
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::OpenComplete()
+ {
+ TRACER_AUTO;
+ // stores OpenAll completed
+ TRAP_IGNORE( DoHnadleOpenCompleteL() );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::DoHnadleOpenCompleteL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::DoHnadleOpenCompleteL()
+ {
+ TRACER_AUTO;
+ iStore = GetDefaultStoreL( *iStoreName ) ;
+ CVPbkContactViewDefinition* viewDefinition =
+ CVPbkContactViewDefinition::NewL();
+ CleanupStack::PushL( viewDefinition );
+ viewDefinition->SetType( EVPbkContactsView );
+ viewDefinition->SetUriL( *iStoreName );
+ if ( iStore )
+ {
+ TRACE( "store view creating");
+ MVPbkContactView* tmpView = iStore->CreateViewLC(
+ *viewDefinition,
+ *this,
+ iSortOrderManager->SortOrder() );
+ CleanupStack::Pop(); // tmpView
+ TRACE( "store view created");
+ iContactView = tmpView;
+ }
+ CleanupStack::PopAndDestroy(); //viewDefinition, can not pop ny name
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactOperationCompleted
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactOperationCompleted(
+ TContactOpResult /*aResult*/ )
+ {
+ TRACER_AUTO;
+ // called when contact commit is successful
+ iOperationError = KErrNone;
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+ TRAP_IGNORE( CommitNextPendingContactsL() );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ContactOperationFailed
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ContactOperationFailed(
+ TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ )
+ {
+ TRACER_AUTO;
+ // called when contact commit is unsuccessful
+ iOperationError = aErrorCode;
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+ TRAP_IGNORE( CommitNextPendingContactsL() );
+
+ }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::StepComplete
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::StepComplete(
+ MVPbkContactOperationBase& /*aOperation*/,
+ TInt /*aStepSize*/ )
+ {
+ TRACER_AUTO;
+ // called when batch operation call
+ iOperationError = KErrNone;
+
+ }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::StepFailed
+// --------------------------------------------------------------------------
+//
+TBool CVIMPSTStorageVPbkStoreHandler::StepFailed(
+ MVPbkContactOperationBase& /*aOperation*/,
+ TInt /*aStepSize*/,
+ TInt aError )
+ {
+ TRACER_AUTO;
+ // called when batch operation call
+ iOperationError = aError;
+
+ return EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::OperationComplete
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::OperationComplete(
+ MVPbkContactOperationBase& aOperation )
+ {
+ TRACER_AUTO;
+ // called when batch operation call for opening the multiple store
+ if ( &aOperation == iContactOperation )
+ {
+ delete iContactOperation;
+ iContactOperation = NULL;
+ }
+ iOperationError = KErrNone;
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+
+ }
+
+//----------------------------------------------------------------------
+//CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete()
+//----------------------------------------------------------------------
+void CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete( MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact )
+ {
+ TRACER_AUTO;
+ // called when contact details is retrived
+ TRAP_IGNORE( DoHnadleSingleContactOperationCompleteL( aOperation, aContact ) );
+
+ }
+
+//----------------------------------------------------------------------
+//CVIMPSTStorageVPbkStoreHandler::DoHnadleSingleContactOperationCompleteL()
+//----------------------------------------------------------------------
+void CVIMPSTStorageVPbkStoreHandler::DoHnadleSingleContactOperationCompleteL( MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact )
+ {
+ TRACER_AUTO;
+ TRACE( "StoreEventType: %d",iStoreEventType);
+ // called when contact details is retrived
+ if( iStoreContact )
+ {
+ delete iStoreContact;
+ iStoreContact = NULL;
+ }
+ iStoreContact = aContact ; // iStoreContact owns thea Contact
+ if( ( &aOperation == iContactOperation) && iStoreContact )
+ {
+ TRACE( "inside if (operation) ");
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+ delete iContactOperation;
+ iContactOperation = NULL;
+ TRACE( " before iCommitOperationInProgress: %d",iCommitOperationInProgress);
+ iCommitOperationInProgress = EFalse;
+ TRACE( "After iCommitOperationInProgress: %d",iCommitOperationInProgress);
+
+ if( iStoreEventType != EVPbkUpdatingAvatar )
+ {
+ TRACE( " inside if (iStoreEventType != EVPbkUpdatingAvatar ) ");
+ if( !iLocalStore && iStoreEventType == EVPbkContactRetriving )
+ {
+ TRACE( " EVPbkContactRetriving");
+ RetriveFieldDataAndSendEventL( *iStoreContact );
+ }
+ else
+ {
+ TRACE( "inside else start");
+ HBufC* userId = GetContactFieldDataLC( *iStoreContact, R_VPBK_FIELD_TYPE_IMPP );
+ HBufC* firstname = GetContactFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_FIRSTNAME );
+ HBufC* lastname = GetContactFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_LASTNAME );
+
+ HBufC* disname = NULL;
+ /*
+ * There are three scenarios where I can form the Display name.
+ * 1. First and last name are present.
+ * 2. First name is present but no last name is present.
+ * 3. Lastname is there and no first name.
+ * 4. if none, then assigning NULL
+ */
+ if ( firstname && lastname )
+ {
+ disname = HBufC::NewLC( firstname->Des().Length() + lastname->Des().Length()+ 1 );
+ TPtr disnamePtr( disname->Des() );
+ disnamePtr.Append(*firstname);
+ if(firstname->Length() && lastname->Length() )
+ {
+ disnamePtr.Append(KSpace);
+ }
+ disnamePtr.Append(*lastname);
+ }
+ else
+ {
+ disname = KNullDesC().AllocLC();
+ }
+ HBufC8* avatarContent = GetContactBinaryFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_THUMBNAILPIC );
+ TRACE( "iStoreHandler.HandleVPbkStoreEventL: %d", iStoreEventType);
+ TPtr useridPtr = userId->Des();
+ TRACE( "inside else UserId : %S", &useridPtr);
+ TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType,
+ iContactLink,
+ NULL,
+ *userId,
+ *disname,
+ *avatarContent);
+ iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
+ CleanupStack::PopAndDestroy(5); // disname,lastname,firstname,userId,avatarContent
+ TRACE( " inside else end");
+ }
+ delete iAddIdInProgress;
+ iAddIdInProgress = NULL;
+ }
+
+ iOperationError = KErrNone;
+ if( iStoreEventType == EVPbkContactReading && iContactView )
+ {
+ TRACE( " if after iOperationError");
+ HandleContactViewReadyL( *iContactView );
+ }
+
+ else if(!iCommitOperationInProgress )
+ {
+ TRACE( "else if after if after iOperationError");
+ CommitNextPendingContactsL();// commit only if any pending contact
+ }
+
+ }
+ }
+//----------------------------------------------------------------------
+//CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete()
+//----------------------------------------------------------------------
+void CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationFailed( MVPbkContactOperationBase& aOperation,
+ TInt aError)
+ {
+ TRACER_AUTO;
+ if( &aOperation == iContactOperation )
+ {
+ delete iContactOperation;
+ iContactOperation = NULL;
+ }
+ iOperationError = aError;
+ iCommitOperationInProgress = EFalse;
+ if( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ }
+ TRAP_IGNORE( CommitNextPendingContactsL() );// commit only if any pending contact
+
+ }
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::HandleContactViewReadyL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::HandleContactViewReadyL( MVPbkContactViewBase& aView )
+ {
+ TRACER_AUTO;
+ TInt contactCount = aView.ContactCountL();
+ TRACE( "begin");
+ if( contactCount == iFetcingIndex && iStoreEventType == EVPbkContactReading )
+ {
+ TRACE( "reading completed" );
+ iStoreEventType = EVPbkContactReadCompleted;
+ TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType);
+ iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
+ }
+ else if( iFetcingIndex < contactCount && iFetcingIndex>=0 )
+ {
+ TRACE( " reading");
+ const MVPbkViewContact& contact = aView.ContactAtL( iFetcingIndex );
+ MVPbkContactLink* contactLink = contact.CreateLinkLC();
+ delete iContactLink;
+ iContactLink = NULL;
+ iContactLink = contactLink;
+ CleanupStack::Pop(); // contactLink
+ IssueRequest();
+ iFetcingIndex++;
+ }
+
+ }
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::IssueRequest
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::IssueRequest()
+ {
+ TRACER_AUTO;
+ if( !IsActive() )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RunL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::RunL()
+ {
+ TRACER_AUTO;
+ if( iContactLink )
+ {
+ delete iContactOperation;
+ iContactOperation = NULL;
+ iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
+ }
+
+ }
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::DoCancel
+// --------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::DoCancel()
+ {
+ TRACER_AUTO;
+ }
+
+// --------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RunError
+// --------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::RunError( TInt aError )
+ {
+ TRACER_AUTO;
+ return aError;
+ }
+
+//////////////////////////////////////////////////////////
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::CreateVPbkContactL
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::CreateVPbkContactL(const TDesC& aUserId,
+ const TDesC& aDisplayName )
+ {
+ TRACER_AUTO;
+ TRACE( "aUserId = %S", &aUserId );
+
+ if( iAddIdInProgress && iAddIdInProgress->Compare( aUserId ) == 0 )
+ {
+ TPtr iAddIdInProgressPtr = iAddIdInProgress->Des();
+ TRACE("iAddIdInProgressPtr = %S", &iAddIdInProgressPtr );
+ TRACE("already Adding" );
+ return KErrAlreadyExists;
+ }
+ TRACE( "After If" );
+ delete iAddIdInProgress;
+ iAddIdInProgress = NULL;
+ iAddIdInProgress = aUserId.AllocL();
+
+ if(iStore)
+ {
+ MVPbkStoreContact* storedContact = iStore->CreateNewContactLC(); //1
+ if( !storedContact )
+ {
+ return NULL;
+ }
+ if(aUserId.Length()!= 0)
+ {
+ TRACE( " valid xsp Id" );
+ TInt prefixLocation = aUserId.Locate( ':' );
+ const MVPbkContactStoreProperties& storeProperties = storedContact->ParentStore().StoreProperties();
+ const MVPbkFieldTypeList& supportedFieldTypes = storeProperties.SupportedFields();
+ TInt fieldCount = supportedFieldTypes.FieldTypeCount();
+
+ for( TInt index = 0 ; index < fieldCount ; index++ )
+ {
+ const MVPbkFieldType* fieldType = &(supportedFieldTypes.FieldTypeAt(index));
+ if ( fieldType && ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_IMPP ))
+ {
+ TRACE(" XSP Id-IMMP field creating" );
+ MVPbkStoreContactField* fielduri = storedContact->CreateFieldLC(*fieldType); //2
+ // Check for prefix and remove if found
+ //append the internettelephoney field.
+ HBufC* fieldData = NULL;
+ TInt serFieldLength = aUserId.Length();
+ if( prefixLocation >=0 && ( prefixLocation < serFieldLength ) )
+ {
+ fieldData = aUserId.Right(serFieldLength - prefixLocation - 1).AllocLC(); //3
+ }
+ else
+ {
+ fieldData = aUserId.AllocLC(); // 3
+ }
+ if (fieldData)
+ {
+ TPtr fieldDataPtr( fieldData->Des() );
+ MVPbkContactFieldUriData& address = MVPbkContactFieldUriData::Cast( fielduri->FieldData() );
+ // TODO check here about servicename:userId
+ address.SetUriL(*iServiceName,*fieldData);
+ // fielduri ownership is transfered to storedContact
+ storedContact->AddFieldL(fielduri);
+ CleanupStack::PopAndDestroy(fieldData); //3
+ CleanupStack::Pop(); //fielduri 2
+ }//End if (fieldData)
+ else
+ {
+ CleanupStack::PopAndDestroy(); //2 fielduri
+ }
+ TRACE( " XSP Id-IMMP field created" );
+ }//end of if
+ else if ( fieldType &&
+ ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_FIRSTNAME ))
+ {
+ TRACE( " first name field creating" );
+ HBufC* firstName = NULL;
+
+ // if there is no display name then allocate hte user id as displayname.
+ if(!(aDisplayName.Length()))
+ {
+ // if aServiceField is sip:user1@ouped111147.nmp.nokia.com, then
+ // rippedaServiceField will be user1@ouped111147.nmp.nokia.com
+ TPtrC rippedaServiceField = aUserId.Mid(prefixLocation+1);
+ //append first name.
+ TInt atLocation = rippedaServiceField.Locate( '@' );
+ if( atLocation > 0 && ( atLocation < rippedaServiceField.Length() ) )
+ {
+ // atLocation must be greater that 0
+ firstName = rippedaServiceField.Left( atLocation ).AllocLC() ; //2
+ }
+ else
+ {
+ firstName = rippedaServiceField.AllocLC(); //2
+ }
+ }
+ // there is a display name hence allocate it.
+ else
+ {
+ firstName = aDisplayName.AllocLC();//2
+ }
+
+ if (firstName)
+ {
+ MVPbkStoreContactField* firstNamefield = storedContact->CreateFieldLC(*fieldType); //2
+ MVPbkContactFieldTextData& firstNameText = MVPbkContactFieldTextData::Cast( firstNamefield->FieldData() );
+ firstNameText.SetTextL(*firstName);
+ storedContact->AddFieldL(firstNamefield); // firstNamefield ownership transfered to storedContact
+ CleanupStack::Pop(); //firstNamefield 2
+ CleanupStack::PopAndDestroy(firstName); // 3
+ }//End if (firstName)
+
+ TRACE( "first name field created" );
+ }//end of if.
+ }//end of for.
+ TRACE( "iCommitOperationInProgress = %d",iCommitOperationInProgress );
+ if( iCommitOperationInProgress )
+ {
+ TRACE("inside if" );
+ iUnCommittedVPbkContacts.AppendL( storedContact ); //takes ownership
+ CleanupStack::Pop(); //storedContact
+ }
+ else
+ {
+ TRACE( "inside else");
+ iCommitOperationInProgress = ETrue;
+ if(iStoreContact)
+ {
+ delete iStoreContact;
+ iStoreContact = NULL;
+ }
+ TRACE( "contact fields added" );
+ iStoreContact = storedContact;
+ CleanupStack::Pop(); //storedContact
+ iStoreContact->CommitL(*this);
+ iStoreEventType = EVPbkContactAdded;
+ }
+ TRACE( "contact commited");
+ //Start the wait untill adding of new contact is complete
+ }
+ }
+ //return the added contact
+ TRACE( "iOperationError =%d",iOperationError );
+
+ return iOperationError;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::CommitNextPendingContactsL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::CommitNextPendingContactsL()
+ {
+
+ TRACER_AUTO;
+ TRACE("iStoreEventType = %d",iStoreEventType );
+ if( !iCommitOperationInProgress && iUnCommittedVPbkContacts.Count() && iStoreEventType != EVPbkUpdatingAvatar)
+ {
+ TRACE( " Commit next" );
+ iCommitOperationInProgress = ETrue;
+ if(iStoreContact)
+ {
+ delete iStoreContact;
+ iStoreContact = NULL;
+ }
+ TRACE( "comming..." );
+ iStoreContact = iUnCommittedVPbkContacts[0];
+ iUnCommittedVPbkContacts.Remove(0);
+ iUnCommittedVPbkContacts.Compress();
+ iStoreContact->CommitL(*this);
+ iStoreEventType = EVPbkContactSynchronizing;
+ TRACE( " Commit called" );
+ }
+ else if(!iCommitOperationInProgress && iPendingAvatars.Count() && iStoreEventType != EVPbkUpdatingAvatar)
+ {
+ TRACE( "Commit next pending avatar" );
+ TVIMPSTAvatarData avatarData = iPendingAvatars[0];
+ UpdateAvatarFieldDataL( *avatarData.iContactLink, *avatarData.iAvatarContent );
+ iPendingAvatars.Remove( 0 );
+ delete avatarData.iContactLink;
+ avatarData.iContactLink = NULL;
+ delete avatarData.iAvatarContent;
+ avatarData.iAvatarContent = NULL;
+ iPendingAvatars.Compress();
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RemoveVPbkContactL
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::RemoveVPbkContactL(const CVPbkContactLinkArray& aContactLinkArray )
+ {
+ TRACER_AUTO;
+ // text now holds the name (or first field of the contact)
+ delete iContactOperation;
+ iContactOperation = NULL;
+ iContactOperation = iContactManager->DeleteContactsL(aContactLinkArray, *this );
+ if( !iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ TRACE( "iOperationError=%d",iOperationError );
+
+ return iOperationError;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RetrieveVPbkContactL
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::RetrieveVPbkContactL(const TDesC8& aPackedLinks)
+ {
+ TRACER_AUTO;
+ iStoreEventType = EVPbkContactRetriving;
+ CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC(aPackedLinks, *iStores );
+ // text now holds the name (or first field of the contact)
+ TInt count = linkArray->Count();
+ TRACE( "count=%d",count );
+ for ( TInt i=0; i<count; i++ )
+ {
+ delete iContactLink;
+ iContactLink = NULL;
+ // local variable caz cant push member variable to cleanup stack
+ MVPbkContactLink* cloneLink = linkArray->At( i ).CloneLC();
+ iContactLink = cloneLink;
+ CleanupStack::Pop(); // cloneLink
+
+ delete iContactOperation;
+ iContactOperation = NULL;
+
+ iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
+ if( !iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ }
+ CleanupStack::PopAndDestroy();//linkArray
+
+ return iOperationError;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::UpdateAvatarFieldDataL()
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink,
+ const TDesC8& aAvatartData )
+ {
+ TRACER_AUTO;
+
+ // local variable caz cant push member variable to cleanup stack
+ MVPbkContactLink* cloneLink = aContactLink.CloneLC();
+ TRACE( "iCommitOperationInProgress: %d",iCommitOperationInProgress );
+ TRACE( "iUnCommittedVPbkContacts: %d",iUnCommittedVPbkContacts.Count() );
+ if(iCommitOperationInProgress || iUnCommittedVPbkContacts.Count() || iStoreEventType == EVPbkUpdatingAvatar )
+ {
+ TRACE( "Inside if" );
+ TVIMPSTAvatarData avatarData = {
+ cloneLink,
+ aAvatartData.AllocL()
+ };
+ iPendingAvatars.Append( avatarData );
+ CleanupStack::Pop(); // cloneLink
+ return KErrInUse;
+ }
+ iCommitOperationInProgress = ETrue;
+ TRACE( "Inside after if" );
+ delete iContactLink;
+ iContactLink = NULL;
+ iContactLink = cloneLink;
+ CleanupStack::Pop(); // cloneLink
+
+ //before updating the avatar, check if there are any pending operation already, if there are any,
+ // then delete them and create the next one.
+ if(iContactOperation)
+ {
+ delete iContactOperation;
+ iContactOperation = NULL;
+ }
+ iStoreEventType = EVPbkUpdatingAvatar;
+ iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
+ if( !iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ // exception KErrInUse If another asynchronous operation is
+ // already in progress.
+ // exception KErrAccessDenied if the contact can not be modified.
+ iStoreContact->LockL(*this);
+
+
+ //wait till lock operation is succeded
+ if(!iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ TInt fieldcount = iStoreContact->Fields().FieldCount();
+ for( TInt j = 0 ; j < fieldcount ; j++ )
+ {
+ const MVPbkFieldType* fieldType = iStoreContact->Fields().FieldAt(j).BestMatchingFieldType();
+ if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC )
+ {
+ iStoreContact->RemoveField(j);
+ break;
+ }
+ }
+ if( aAvatartData.Length() )
+ {
+ const MVPbkContactStoreProperties& storeProperties = iStoreContact->ParentStore().StoreProperties();
+ const MVPbkFieldTypeList& supportedFieldTypes = storeProperties.SupportedFields();
+ TInt fieldCount = supportedFieldTypes.FieldTypeCount();
+ for( TInt index = 0 ; index < fieldCount ; index++ )
+ {
+ const MVPbkFieldType* fieldType = &( supportedFieldTypes.FieldTypeAt(index) );
+ //find the relevant voip fields/email id fileds.
+ if ( fieldType && ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC ) )
+ {
+ //updating avatar field in the virtual phonebook
+ //found the required fieldtype
+ MVPbkStoreContactField* storeField = iStoreContact->CreateFieldLC(*fieldType);
+ // The aField instance can not be used after AddFieldL
+ //storeField ownership is transferred
+ TInt fieldIndex = iStoreContact->AddFieldL(storeField);
+ MVPbkContactFieldData& dataField = iStoreContact->Fields().FieldAt( fieldIndex ).FieldData();
+ MVPbkContactFieldBinaryData& data = MVPbkContactFieldBinaryData::Cast(dataField);
+ data.SetBinaryDataL(aAvatartData);
+ CleanupStack::Pop(); // storeField
+ break;
+ }
+ }
+ }
+ TRACE( "Inside after if(avatardata.length)" );
+ iStoreEventType = EVPbkContactChanged;
+ TRACE( "Inside after if(avatardata.length ): %d",iStoreEventType );
+ iStoreContact->CommitL(*this);
+ //wait for delete Avatar operation to complete.
+ if(!iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+
+ return iOperationError;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RemoveAvatarFieldL()
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkStoreHandler::RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact)
+ {
+ TRACER_AUTO;
+ aStoreContact.LockL(*this);
+ //wait till lock operation is succeded
+ if(!iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ TInt fieldcount = aStoreContact.Fields().FieldCount();
+ for( TInt j = 0 ; j < fieldcount ; j++ )
+ {
+ const MVPbkFieldType* fieldType = aStoreContact.Fields().FieldAt(j).BestMatchingFieldType();
+ if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC )
+ {
+ aStoreContact.RemoveField(j);
+ break;
+ }
+ }
+ aStoreContact.CommitL(*this);
+ //wait for delete Avatar operation to complete.
+ if(!iWait.IsStarted() )
+ {
+ iWait.Start();
+ }
+ TRACE( "iOperationError =%d",iOperationError );
+
+ return iOperationError;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::GetContactFieldDataLC()
+// ---------------------------------------------------------------------------
+//
+HBufC* CVIMPSTStorageVPbkStoreHandler::GetContactFieldDataLC(const MVPbkStoreContact& aContact,
+ TInt aFieldResId )
+ {
+ TRACER_AUTO;
+ HBufC* retValue = NULL;
+ const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
+ TInt fieldCount = fieldCollection.FieldCount();
+ TRACE( " fieldCount%d",fieldCount );
+ for( TInt index = 0 ; index < fieldCount ; index++ )
+ {
+ const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
+ const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
+ //find the relevant xSP field
+ if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
+ {
+ const MVPbkContactFieldData& fieldData = field.FieldData();
+ switch( fieldData.DataType() )
+ {
+ case EVPbkFieldStorageTypeText:
+ {
+ TRACE(" Text" );
+ retValue = MVPbkContactFieldTextData::Cast(fieldData).Text().AllocLC();
+ break;
+ }
+ case EVPbkFieldStorageTypeUri:
+ {
+ TRACE(" Uri ");
+ retValue = MVPbkContactFieldUriData::Cast(fieldData).Text().AllocLC();
+ break;
+ }
+
+ }//End switch
+ if( aFieldResId == R_VPBK_FIELD_TYPE_IMPP && retValue )
+ {
+ TRACE( " IMPP fild found");
+ // TODO RAMC : Nikhil/Mukesh
+ // in case of srver contacts it also find the first valid xsp id
+ // not valid through NULL
+ // which can be clarified
+ // earlier it show selection query in UI which one to use
+ TPtrC scheme = MVPbkContactFieldUriData::Cast(fieldData).Scheme();
+ if( scheme.Compare( *iServiceName ) == 0 )
+ {
+ TRACE( " actual xsp Id found");
+ // actual xsp id found break the loop and return
+ break;
+ }
+ else
+ {
+ // actual xsp not yet found continue looking
+ CleanupStack::PopAndDestroy(); // retValue;
+ retValue = NULL;
+ }
+ }
+ else if( retValue )
+ {
+ // break this loop once the given aFieldResId is found
+ // with valid data
+ break;
+ }
+ }
+ }
+ if( !retValue )
+ {
+ TRACE( " NULL value");
+ // if NULL assign valid ptr
+ retValue = KNullDesC().AllocLC();
+ }
+
+ return retValue;// ownership is return to caller
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::GetContactBinaryFieldDataLC()
+// ---------------------------------------------------------------------------
+//
+HBufC8* CVIMPSTStorageVPbkStoreHandler::GetContactBinaryFieldDataLC(const MVPbkStoreContact& aContact,
+ TInt aFieldResId )
+ {
+ TRACER_AUTO;
+ HBufC8* retValue = NULL;
+ const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
+ TInt fieldCount = fieldCollection.FieldCount();
+ TRACE( "fieldCount%d",fieldCount );
+ for( TInt index = 0 ; index < fieldCount ; index++ )
+ {
+ const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
+ const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
+ //find the relevant xSP field
+ if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
+ {
+ const MVPbkContactFieldData& fieldData = field.FieldData();
+ switch( fieldData.DataType() )
+ {
+ case EVPbkFieldStorageTypeBinary:
+ {
+ TRACE( " Text" );
+ retValue = MVPbkContactFieldBinaryData::Cast(fieldData).BinaryData().AllocLC();
+ break;
+ }
+ }//End switch
+ if( retValue )
+ {
+ // break this loop once the given aFieldResId is found
+ // with valid data
+ break;
+ }
+ }
+ }
+ if( !retValue )
+ {
+ TRACE( " NULL value");
+ // if NULL assign valid ptr
+ retValue = KNullDesC8().AllocLC();
+ }
+
+ return retValue;// ownership is return to caller
+ }
+
+
+// ---------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RetriveFieldDataAndSendEventL
+//
+// ---------------------------------------------------------
+void CVIMPSTStorageVPbkStoreHandler::RetriveFieldDataAndSendEventL(const MVPbkStoreContact& aContact )
+ {
+ TRACER_AUTO;
+ HBufC* retValue = NULL;
+ const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
+ TInt fieldCount = fieldCollection.FieldCount();
+ for( TInt index = 0 ; index < fieldCount ; index++ )
+ {
+ const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
+ const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
+ //find the relevant xSP field
+ //if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
+ if ( fieldType && (( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_IMPP )
+ || (fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEHOME )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEWORK )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPWORK )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPHOME )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEGEN )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPGEN )
+ ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_SIP ) ))
+ {
+ const MVPbkContactFieldData& fieldData = field.FieldData();
+ switch( fieldData.DataType() )
+ {
+ case EVPbkFieldStorageTypeText:
+ {
+ TRACE( "Text" );
+ retValue = MVPbkContactFieldTextData::Cast(fieldData).Text().AllocLC();
+ break;
+ }
+ case EVPbkFieldStorageTypeUri:
+ {
+ TRACE( "begin" ) ;
+ retValue = MVPbkContactFieldUriData::Cast(fieldData).Text().AllocLC();
+ break;
+ }
+
+ }//End switch
+ if( retValue )
+ {
+ TRACE( " begin" );
+ TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType,
+ NULL,
+ NULL,
+ *retValue,
+ KNullDesC );
+ iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
+ CleanupStack::PopAndDestroy(); // retValue;
+ retValue = NULL;
+ }
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::RemoveAllVPbkContactsL
+//
+// ---------------------------------------------------------
+TInt CVIMPSTStorageVPbkStoreHandler::RemoveAllVPbkContactsL()
+ {
+ TRACER_AUTO;
+ TRACE( " before if" );
+ if(iAddIdInProgress)
+ {
+ TPtr iAddIdInProgressPtr = iAddIdInProgress->Des();
+ TRACE( "iAddIdInProgressPtr = %S", &iAddIdInProgressPtr );
+ delete iAddIdInProgress;
+ iAddIdInProgress = NULL;
+ }
+ // intialize it to efalse as, somewhere it would have missed.
+ iCommitOperationInProgress = EFalse;
+ TRACE( " After if");
+ TInt count = 0;
+ if( iContactView )
+ {
+ count = iContactView->ContactCountL();
+ }
+ TRACE( "count = %d",count) ;
+ TPtr iStoreNamePtr(iStoreName->Des() );
+ TInt index = iStoreNamePtr.Find(_L(":") );
+ if( index >= 0 && count )
+ {
+ TPtrC store = iStoreNamePtr.Right( iStoreNamePtr.Length() - index -3 );
+ CContactIdArray* contactIds = CContactIdArray::NewLC();
+ CContactDatabase* contactDb = NULL;
+ //Open the database
+ TRAPD(err, contactDb = CContactDatabase::OpenL( store ) );
+ if(err == KErrNone )
+ {
+ CleanupStack::PushL( contactDb );
+ // rest if already old ids exist
+ contactIds->Reset();
+ TContactIter iterator(*contactDb);
+ TContactItemId contactId = iterator.FirstL();
+ while(contactId != KNullContactId)
+ {
+ TRACE( "in side while" );
+ // store into iContactIds for later deletion of contacts
+ contactIds->AddL(contactId );
+ // get the next contactids
+ contactId = iterator.NextL();
+ }
+ contactDb->DeleteContactsL(*contactIds);
+ // reset old ids
+ contactIds->Reset();
+ CleanupStack::PopAndDestroy( contactDb );
+ }
+ CleanupStack::PopAndDestroy( contactIds );
+ }
+
+ return count;
+ }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkStoreHandler::ResetAndDestroyRArray
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTStorageVPbkStoreHandler::ResetAndDestroyRArray()
+ {
+ TRACER_AUTO;
+ TInt count = iPendingAvatars.Count();
+ while( count )
+ {
+ TVIMPSTAvatarData contactInf = iPendingAvatars[ 0 ];
+ iPendingAvatars.Remove(0 );
+ delete contactInf.iAvatarContent;
+ contactInf.iAvatarContent = NULL;
+ delete contactInf.iContactLink;
+ contactInf.iContactLink = NULL;
+ // not exist need to add
+ iPendingAvatars.Compress();
+ count = iPendingAvatars.Count();
+ }
+ iPendingAvatars.Reset();
+
+ }
+// End of file