--- /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 <MVPbkContactView.h>
+#include <CVPbkContactIdConverter.h>
+#include "uiservicetabtracer.h"
+#include "tvimpstconsts.h"
+#include "mvimpststorageserviceview.h"
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactLink.h>
+#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 <TPtrC>& aFirstNameList,
+ RArray <TPtrC> &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; i<fetchContactCount; i++ )
+ {
+ TRACE( " Append = %d",i );
+ TVIMPSTContactInfo contactInf =
+ {
+ aServiceField[i].AllocL() ,
+ aFirstNameList[i].AllocL()
+ };
+ iFetchContactsToBeAdded.Append( contactInf );
+ }
+ TRACE( "iFetchStep = %d", iFetchStep );
+ if( iFetchStep == EContactReadComplete || !oldContactCount)
+ {
+ TRACE( "inside if" );
+ IssueRequest();
+ }
+ else
+ {
+ TRACE( " set to state EFetchingCalled" );
+ iFetchStep = EFetchingCalled;
+ }
+
+ }
+// ---------------------------------------------------------------------------
+// CVIMPSTStorageVPbkServerStore::RemoveVPbkContactL
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageVPbkServerStore::RemoveVPbkContactL(const MVPbkContactLink& aContactLink)
+ {
+ TRACER_AUTO;;
+ // text now holds the name (or first field of the contact)
+ CVPbkContactLinkArray* contactsToDelete = CVPbkContactLinkArray::NewLC();
+ MVPbkContactLink* link = aContactLink.CloneLC();
+ contactsToDelete->AppendL( 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
+
+