diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpststorage/src/cvimpststoragevpbkserverstore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpststorage/src/cvimpststoragevpbkserverstore.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,537 @@ +/* +* 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 server store +* +*/ + + + +// INCLUDE FILES +#include "cvimpststoragevpbkserverstore.h" + +#include "cvimpststoragevpbkstorehandler.h" + +#include +#include +#include "uiservicetabtracer.h" +#include "tvimpstconsts.h" +#include "mvimpststorageserviceview.h" +#include +#include +#include "cvimpststoragecontact.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore:: +// CVIMPSTStorageVPbkServerStore +// --------------------------------------------------------------------------- +// +CVIMPSTStorageVPbkServerStore:: CVIMPSTStorageVPbkServerStore( MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ): + CActive( CActive::EPriorityIdle ), + iServiceCacheWriter( aServiceCacheWriter ), + iFetchStep( EFetchingUnknown ) + { + TRACER_AUTO; + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::ConstructL +// --------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::ConstructL( const TDesC& aContactDb, const TDesC& aServiceName) + { + TRACER_AUTO; + iVPbkStoreHandler = CVIMPSTStorageVPbkStoreHandler::NewL( aContactDb,aServiceName, *this, EFalse ); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::NewL +// --------------------------------------------------------------------------- +// +CVIMPSTStorageVPbkServerStore* + CVIMPSTStorageVPbkServerStore::NewL( const TDesC& aContactDb, + const TDesC& aServiceName, + MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ) + { + TRACER_AUTO; + CVIMPSTStorageVPbkServerStore* self = NewLC( aContactDb, + aServiceName, + aServiceCacheWriter ); + CleanupStack::Pop( self ); + + return self; + + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::NewLC +// --------------------------------------------------------------------------- +// +CVIMPSTStorageVPbkServerStore* + CVIMPSTStorageVPbkServerStore::NewLC(const TDesC& aContactDb, + const TDesC& aServiceName, + MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ) + { + TRACER_AUTO; + CVIMPSTStorageVPbkServerStore* self = + new (ELeave) CVIMPSTStorageVPbkServerStore(aServiceCacheWriter); + CleanupStack::PushL( self ); + self->ConstructL( aContactDb,aServiceName ); + + return self; + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore:: +// ~CVIMPSTStorageVPbkServerStore +// --------------------------------------------------------------------------- +// +CVIMPSTStorageVPbkServerStore::~CVIMPSTStorageVPbkServerStore() + { + TRACER_AUTO; + iRetrivedXSPIdArray.ResetAndDestroy(); + TRAP_IGNORE( ResetAndDestroyLocalArrayL() ); + delete iVPbkStoreHandler; + + } + + // --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::ResetAndDestroyLocalArrayL +// --------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::ResetAndDestroyLocalArrayL() + { + TRACER_AUTO; + TInt count = iFetchContactsToBeAdded.Count(); + while( count ) + { + TVIMPSTContactInfo contactInf = iFetchContactsToBeAdded[ count-1 ]; + iFetchContactsToBeAdded.Remove( count-1 ); + delete contactInf.iUserId; + contactInf.iUserId = NULL; + delete contactInf.iDisplayName; + contactInf.iDisplayName = NULL; + // not exist need to add + iFetchContactsToBeAdded.Compress(); + count = iFetchContactsToBeAdded.Count(); + } + iFetchContactsToBeAdded.Reset(); + + } +// ---------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::LocalStore +// ---------------------------------------------------------- +// +TBool CVIMPSTStorageVPbkServerStore::LocalStore() const + { + TRACER_AUTO; + return EFalse; + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::HandleVPbkStoreEventL +// --------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::HandleVPbkStoreEventL(TVIMPSTVPbkStoreEvent aVPbkStoreEvent) + { + TRACER_AUTO; + switch( aVPbkStoreEvent.iEventType ) + { + case EVPbkContactReadCompleted: + { + TRACE( "EVPbkContactReadCompleted started" ); + iServiceCacheWriter.NotifyServiceViewL(TVIMPSTEnums::EStorageContactReadComplete); + if( iFetchStep == EFetchingCalled ) + { + TRACE( "EVPbkContactReadCompleted fetcing in progress " ); + IssueRequest(); + } + TRACE( "iFetchStep set to state EContactReadComplete" ); + iFetchStep = EContactReadComplete; + TRACE( " completed" ); + break; + } + case EVPbkContactReading: + { + TRACE(" EVPbkContactReading started"); + // a contact entry has been created in virtual database store + // create the cache contact + // fetched one by one contact from cdb file + // Add to storage cache + + iServiceCacheWriter.AddContactToCacheL(*aVPbkStoreEvent.iContactLink , + aVPbkStoreEvent.iUserId , + aVPbkStoreEvent.iDisplayName , + aVPbkStoreEvent.iAvatarContent, + TVIMPSTEnums::EStorageContactReading ); + TRACE( "EVPbkContactReading completed" ); + break; + } + case EVPbkContactFetching: + case EVPbkContactAdded: + { + TRACE( "EVPbkContactAdded or EVPbkContactFetching" ); + TVIMPSTEnums::TVIMPSTStorgaeEventType event = TVIMPSTEnums::EStorageEventContactAddition; + // a contact entry has been created in virtual database store + // create the cache contact + // fetched one by one contact from cdb file + // Add to storage cache + if( iFetchStep == EFetchingOn ) + { + event = TVIMPSTEnums::EStorageContactFetching; + } + iServiceCacheWriter.AddContactToCacheL(*aVPbkStoreEvent.iContactLink , + aVPbkStoreEvent.iUserId , + aVPbkStoreEvent.iDisplayName , + aVPbkStoreEvent.iAvatarContent, + event ); + if(iFetchStep == EFetchingOn) + { + TRACE( "EVPbkContactAdded or EVPbkContactFetching fetchin on" ); + IssueRequest(); + } + TRACE( " EVPbkContactAdded or EVPbkContactFetching completed" ); + break; + } + case EVPbkContactSynchronizing: + { + TRACE( "EVPbkContactSynchronizing " ); + // a contact entry has been created in virtual database store + // create the cache contact + // fetched one by one contact from cdb file + // Add to storage cache + iServiceCacheWriter.AddContactToCacheL(*aVPbkStoreEvent.iContactLink , + aVPbkStoreEvent.iUserId , + aVPbkStoreEvent.iDisplayName , + aVPbkStoreEvent.iAvatarContent, + TVIMPSTEnums::EStorageContactSynchronizing ); + TRACE( "EVPbkContactSynchronizing(iFetchStep): %d " , iFetchStep ); + if(iFetchStep == EFetchingOn) + { + TRACE( " EVPbkContactSynchronizing fetchin on" ); + IssueRequest(); + } + TRACE( " EVPbkContactSynchronizing completed" ); + break; + } + case EVPbkContactDeleted: + { + TRACE( "EVPbkContactDeleted Event" ); + // a contact entry has been deleted from virtual database store + // delete from cache contact + // not Needed in case of server contact + iServiceCacheWriter.RemoveContactFromCacheL(*aVPbkStoreEvent.iContactLink, + TVIMPSTEnums::EStorageEventContactDelete ); + TRACE( " EVPbkContactDeleted Event done" ); + break; + } + case EVPbkContactChanged: + { + TRACE( " EVPbkContactChanged started" ); + // a contact entry has been updated to virtual database store + // update to cache contact + // not Needed in case of server contact + iServiceCacheWriter.UpdateCacheContactL(*aVPbkStoreEvent.iContactLink , + aVPbkStoreEvent.iUserId , + aVPbkStoreEvent.iDisplayName, + aVPbkStoreEvent.iAvatarContent); + if(iFetchStep == EFetchingOn) + { + TRACE(" EVPbkContactAdded or EVPbkContactFetching fetchin on" ); + IssueRequest(); + } + TRACE( " EVPbkContactChanged started" ); + break; + } + case EVPbkContactRetriving: + { + TRACE( " EVPbkContactRetriving started " ); + // ONLY VALID USER ID ALLOWED + if( aVPbkStoreEvent.iUserId.Length() ) + { + TRACE( "EVPbkContactRetriving valid id " ); + HBufC* sxpId = aVPbkStoreEvent.iUserId.AllocL(); + iRetrivedXSPIdArray.Append( sxpId ); // takes the ownership of retrivedContact + // keep the backup of retrieved contacts + // user can add later once it sent to server + } + TRACE( " EVPbkContactRetriving done" ); + break; + } + case EVPbkUnknownChanges: + { + TRACE( " EVPbkUnknownChanges Event in" ); + // unknow mean all contact deleted from store + // Not supported in case of server contact + iServiceCacheWriter.RemoveAllCacheContactsL(); + if(iFetchStep == EFetchingCalled ) + { + TRACE( " EVPbkUnknownChanges fetching on" ); + IssueRequest(); + } + TRACE( "EVPbkUnknownChanges Event done" ); + break; + } + default: + { + TRACE( "default" ); + break; + } + } + + } + + +// -------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::IssueRequest +// -------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::IssueRequest() + { + TRACER_AUTO; + if( !IsActive() ) + { + TRequestStatus* status = &iStatus; + TRACE( "RequestComplete"); + User::RequestComplete( status, KErrNone ); + SetActive(); + } + + } + +// -------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::RunL +// -------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::RunL() + { + TRACER_AUTO; + TInt count = iFetchContactsToBeAdded.Count(); + TRACE( " count = %d",count ); + if( !count ) + { + TRACE(" set to state EContactReadComplete" ); + iFetchStep = EContactReadComplete; + iServiceCacheWriter.NotifyServiceViewL( TVIMPSTEnums::EStorageContactFetchComplete ); + TRACE( "calling NotifyFetchCompleteL" ); + } + else + { + TRACE( " set to state EFetchingOn" ); + iFetchStep = EFetchingOn; + TVIMPSTContactInfo contactInfoToAdd = iFetchContactsToBeAdded[0]; + // pass the display NAme in place of NULL + TRACE( "calling CreateVPbkContactL" ); + iVPbkStoreHandler->CreateVPbkContactL( *contactInfoToAdd.iUserId, *contactInfoToAdd.iDisplayName ); // process always 0th item + + iFetchContactsToBeAdded.Remove( 0 ); + delete contactInfoToAdd.iUserId; + contactInfoToAdd.iUserId = NULL; + delete contactInfoToAdd.iDisplayName; + contactInfoToAdd.iDisplayName = NULL ; + + iFetchContactsToBeAdded.Compress(); + } + + } + +// -------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::DoCancel +// -------------------------------------------------------------------------- +// +void CVIMPSTStorageVPbkServerStore::DoCancel() + { + TRACER_AUTO; + } + +// -------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::RunError +// -------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::RunError( TInt aError ) + { + TRACER_AUTO; + TRACE( "error code = %d", aError ); + + return aError; + } + +////////////////////////////////////////////////////////// +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::CreateVPbkContactL +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::CreateVPbkContactL( const TDesC& aUserId, + const TDesC& aDisplayName, + TBool /*aInvitationAutoAccept = EFalse */ ) + { + TRACER_AUTO; + return iVPbkStoreHandler->CreateVPbkContactL( aUserId ,aDisplayName ); + } + +// ----------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::AddVPbkFetchContactsL +// ----------------------------------------------------------------------------- +// + void CVIMPSTStorageVPbkServerStore::AddVPbkFetchContactsL( RArray & aFirstNameList, + RArray &aServiceField ) + { + // in case of server case we delete all contacts and then add fetch contacts + // in case of server contacts delete all contacts + TRACER_AUTO; + TInt oldContactCount = RemoveAllVPbkContactsL(); + TRACE( " oldContactCount = %d", oldContactCount ); + ResetAndDestroyLocalArrayL(); + TInt fetchContactCount = aServiceField.Count(); + for( TInt i = 0; iAppendL( link ); // takes ownership + CleanupStack::Pop(); // link + TInt error = iVPbkStoreHandler->RemoveVPbkContactL( *contactsToDelete ); + CleanupStack::PopAndDestroy(); // contactsToDelete + TRACE( " error code = %d", error ); + + return error; + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::RemoveAllVPbkContactsL +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::RemoveAllVPbkContactsL() + { + TRACER_AUTO; + iRetrivedXSPIdArray.ResetAndDestroy(); + return iVPbkStoreHandler->RemoveAllVPbkContactsL(); + } +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::RetrieveVPbkXSPIdL +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::RetrieveVPbkXSPIdL(const TDesC8& aPackedLinks ) + { + TRACER_AUTO; + iRetrivedXSPIdArray.ResetAndDestroy(); + TRACE( " iRetrivedXSPIdArray Reset" ); + iVPbkStoreHandler->RetrieveVPbkContactL( aPackedLinks ); + + return iRetrivedXSPIdArray.Count(); + } + + // --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::GetRetrieveVPbkXSPIdL +// --------------------------------------------------------------------------- +// +const TDesC& CVIMPSTStorageVPbkServerStore::GetRetrieveVPbkXSPIdL(TInt aIndex ) + { + TRACER_AUTO; + HBufC* contactId = NULL; + if( aIndex >= 0 && aIndex < iRetrivedXSPIdArray.Count() ) + { + contactId = iRetrivedXSPIdArray[ aIndex ]; + } + if( contactId ) + { + TRACE( "RetrieveVPbkXSPIdL() end"); + return *contactId; + } + + return KNullDesC ; + } + // --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::CreateRetriveVPbkContactL +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::CreateRetriveVPbkContactL( TInt /*aIndexToUse*/ ) + { + TRACER_AUTO; + // Not applicable for server store + return KErrNotSupported; + } +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::deleteRetriveVPbkContactL +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::deleteRetriveVPbkContactL( TInt /*aIndexToUse*/ ) + { + TRACER_AUTO; + // Not applicable for server store + return KErrNotSupported; + } +// CVIMPSTStorageVPbkServerStore::UpdateAvatarFieldDataL() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink, + const TDesC8& aAvatartData ) + { + TRACER_AUTO; + return iVPbkStoreHandler->UpdateAvatarFieldDataL( aContactLink, aAvatartData ); + } + +// --------------------------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::RemoveAvatarFieldL() +// --------------------------------------------------------------------------- +// +TInt CVIMPSTStorageVPbkServerStore::RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact) + { + TRACER_AUTO; + return iVPbkStoreHandler->RemoveAvatarFieldL( aStoreContact ); + } + +// ---------------------------------------------------------- +// CVIMPSTStorageVPbkServerStore::DeleteDatabaseL +// ---------------------------------------------------------- +void CVIMPSTStorageVPbkServerStore::DeleteDatabaseL() + { + TRACER_AUTO; + // TODO : Not supported yet + + } +// End of file + +