contentctrl_plat/adapter_customization_api/tsrc/DummyAdapter/src/nsmldummymodsfetcher.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/adapter_customization_api/tsrc/DummyAdapter/src/nsmldummymodsfetcher.cpp Wed Sep 01 12:30:02 2010 +0100
@@ -0,0 +1,433 @@
+/*
+* Copyright (c) 2009 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: DS Dummy Adapter ModsFetcher
+*
+*/
+
+// CLASS HEADER
+#include "nsmldummymodsfetcher.h"
+
+
+// EXTERNAL INCLUDES
+#include <e32base.h>
+#include <s32strm.h>
+#include <e32cmn.h>
+#include <e32des16.h>
+#include <CVPbkContactViewDefinition.h>
+#include <CVPbkContactIdConverter.h>
+#include <CVPbkContactFieldIterator.h>
+#include <MVPbkContactStoreProperties.h>
+#include <MVPbkStoreContactProperties.h>
+#include <MVPbkViewContact.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkStoreContact2.h>
+#include <MVPbkContactLink.h>
+#include <vpbkeng.rsg>
+
+// INTERNAL INCLUDES
+#include "nsmldebug.h"
+#include "nsmlsnapshotitem.h"
+#include "nsmlchangefinder.h"
+#include "nsmldummyutility.h"
+
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::CNSmlDummyModsFetcher
+// ------------------------------------------------------------------------------------------------
+//
+CNSmlDummyModsFetcher::CNSmlDummyModsFetcher(
+ TBool& aSnapshotRegistered,CVPbkContactManager& aContactManager,
+ MVPbkContactStore& aStore,TKeyArrayFix& aKey,
+ CNSmlChangeFinder& aChangeFinder ) :
+ CActive( EPriorityLow ),
+ iSnapshotRegistered( aSnapshotRegistered ),
+ iKey( aKey ),
+ iChangeFinder( aChangeFinder ),
+ iContactManager( aContactManager ),
+ iStore( aStore ),
+ iContactViewBase( NULL )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::CNSmlDummyModsFetcher(): begin");
+ CActiveScheduler::Add( this );
+ _DBG_FILE("CNSmlDummyModsFetcher::CNSmlDummyModsFetcher(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::~CNSmlDummyModsFetcher
+// ------------------------------------------------------------------------------------------------
+//
+CNSmlDummyModsFetcher::~CNSmlDummyModsFetcher()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::~CNSmlDummyModsFetcher(): begin");
+
+ Cancel();
+ delete iSnapshot;
+ delete iContactViewBase;
+
+ _DBG_FILE("CNSmlDummyModsFetcher::~CNSmlDummyModsFetcher(): end");
+ }
+
+// ----------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::CancelRequest
+// ----------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::CancelRequest()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::CancelRequest(): begin");
+
+ Cancel();
+
+ _DBG_FILE("CNSmlDummyModsFetcher::CancelRequest(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::FetchModificationsL
+// ------------------------------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::FetchModificationsL( TRequestStatus& aStatus )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::FetchModificationsL(): begin");
+
+ iCallerStatus = &aStatus;
+ *iCallerStatus = KRequestPending;
+ iContactCount = 0;
+ if( !iSnapshot )
+ {
+ iSnapshot = new (ELeave) CArrayFixSeg< TNSmlSnapshotItem >( KNSmlSnapshotSize );
+ }
+
+ if( iContactViewBase )
+ {
+ delete iContactViewBase;
+ iContactViewBase = NULL;
+ }
+
+ CreateViewL();
+
+ _DBG_FILE("CNSmlDummyModsFetcher::FetchModificationsL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::ConstructL
+// ------------------------------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::ConstructL()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::ConstructL(): begin");
+
+ iSnapshot = new ( ELeave ) CArrayFixSeg< TNSmlSnapshotItem >( KNSmlSnapshotSmallSize );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::ConstructL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::RunL
+// ------------------------------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::RunL()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::RunL(): begin");
+
+ if ( !iSnapshotRegistered )
+ {
+ FetchNextContactL();
+ }
+#ifdef __NSML_MODULETEST__
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+#endif
+
+ _DBG_FILE("CNSmlDummyModsFetcher::RunL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::FetchNextContactL
+// ------------------------------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::FetchNextContactL()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::FetchNextContactL(): begin");
+ if( iContactViewBase->ContactCountL() == 0 )
+ {
+ User::RequestComplete( iCallerStatus, KErrNone );
+ return;
+ }
+ if ( !iSnapshotRegistered )
+ {
+ const MVPbkViewContact& contact = iContactViewBase->ContactAtL( iContactCount );
+
+ MVPbkContactLink* contactLink = contact.CreateLinkLC();
+ iContactManager.RetrieveContactL( *contactLink, *this );
+ CleanupStack::PopAndDestroy();
+ }
+
+ _DBG_FILE("CNSmlDummyModsFetcher::FetchNextContactL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::DoCancel
+// ------------------------------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::DoCancel()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::DoCancel(): begin");
+
+ User::RequestComplete( iCallerStatus, KErrCancel );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::DoCancel(): end");
+ }
+
+// ----------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::IsConfidentialL
+// ----------------------------------------------------------------------------
+//
+TBool CNSmlDummyModsFetcher::IsConfidentialL( MVPbkStoreContact& aItem )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::IsConfidentialL(): begin");
+ TBool ret( EFalse );
+
+ //find X-CLASS field type
+ const MVPbkFieldType* syncclass =
+ iContactManager.FieldTypes().Find( R_VPBK_FIELD_TYPE_SYNCCLASS );
+ CVPbkBaseContactFieldTypeIterator* itr =
+ CVPbkBaseContactFieldTypeIterator::NewLC( *syncclass,
+ aItem.Fields() );
+ while ( itr->HasNext() )
+ {
+ const MVPbkBaseContactField* field = itr->Next();
+ const MVPbkContactFieldTextData& data =
+ MVPbkContactFieldTextData::Cast( field->FieldData() );
+ TPtrC ptr = data.Text();
+ //compare the sync type
+ if ( ptr.Compare( KNSmlContactSyncNoSync ) == 0 )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::IsConfidentialL(): \
+ find confidential");
+ ret = ETrue;
+ }
+
+ }
+ CleanupStack::PopAndDestroy( itr );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::IsConfidentialL(): end");
+ return ret;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::RunError
+// ----------------------------------------------------------------------------
+ TInt CNSmlDummyModsFetcher::RunError( TInt aError )
+ {
+ DBG_FILE_CODE(aError, _S8("CNSmlDummyModsFetcher::RunError() : error code received "));
+ User::RequestComplete( iCallerStatus, aError );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::CreateViewL()
+// Create a contact view of the store which is opened
+// -----------------------------------------------------------------------------
+
+void CNSmlDummyModsFetcher::CreateViewL()
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::CreateViewL(): begin");
+
+ CVPbkContactViewDefinition* viewDef = CVPbkContactViewDefinition::NewL();
+ CleanupStack::PushL( viewDef );
+ viewDef->SetType( EVPbkContactsView );
+
+ viewDef->SetUriL( iStore.StoreProperties().Uri().UriDes() );
+
+ iContactViewBase = iContactManager.CreateContactViewLC(
+ *this,
+ *viewDef,
+ iContactManager.FieldTypes() );
+ CleanupStack::Pop();
+ CleanupStack::PopAndDestroy( viewDef );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::CreateViewL(): end");
+ }
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::UpdateSnapshotL
+// Add the fetched contacts id and timestamp
+// to the snapshot.
+// ---------------------------------------------------------------------------
+//
+
+ void CNSmlDummyModsFetcher::UpdateSnapshotL( MVPbkStoreContact* aContact )
+{
+ _DBG_FILE("CNSmlDummyModsFetcher::UpdateSnapshotL(): begin");
+
+ if( !IsConfidentialL( *aContact) )
+ {
+ CVPbkContactIdConverter* idConverter = CVPbkContactIdConverter::NewL( iStore );
+ CleanupStack::PushL( idConverter );
+
+ TInt32 id = idConverter->LinkToIdentifier(
+ *iContactViewBase->ContactAtL( iContactCount).CreateLinkLC() );
+ TNSmlSnapshotItem snap( id );
+
+ MVPbkStoreContact2* tempContact =
+ reinterpret_cast<MVPbkStoreContact2*> ( aContact->StoreContactExtension ( KMVPbkStoreContactExtension2Uid ) );
+
+ MVPbkStoreContactProperties *contactProterties
+ = tempContact ->PropertiesL();
+ CleanupDeletePushL( contactProterties );
+ snap.SetLastChangedDate( contactProterties->LastModifiedL() );
+ CleanupStack::PopAndDestroy();
+
+ iSnapshot->InsertIsqL( snap, iKey );
+ iCurrentSnapshotCounter++;
+ if ( iCurrentSnapshotCounter > KNSmlSnapshotCompressSize )
+ {
+ iSnapshot->Compress();
+ iCurrentSnapshotCounter = 0;
+ }
+ CleanupStack::PopAndDestroy();
+ CleanupStack::PopAndDestroy( idConverter );
+ }
+
+ iContactCount++;
+
+ if ( iContactCount == iContactViewBase->ContactCountL() )
+ {
+ iChangeFinder.SetNewSnapshot( iSnapshot ); // changefinder takes ownership
+ iSnapshot = NULL;
+ iSnapshotRegistered = ETrue;
+ User::RequestComplete( iCallerStatus, KErrNone );
+ }
+
+ _DBG_FILE("CNSmlDummyModsFetcher::UpdateSnapshotL(): end");
+}
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::ContactViewReady
+// Implements the view ready function of MVPbkContactViewObserver
+// ---------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::ContactViewReady(
+ MVPbkContactViewBase& /*aView*/ )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::ContactViewReady(): begin");
+
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::ContactViewReady(): end");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::ContactViewUnavailable
+// Implements the view unavailable function of MVPbkContactViewObserver
+// ---------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::ContactViewUnavailable(
+ MVPbkContactViewBase& /*aView*/ )
+{
+}
+
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::ContactAddedToView
+// Implements the add contact function of MVPbkContactViewObserver
+// ---------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::ContactAddedToView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+{
+}
+
+// ---------------------------------------------------------------------------
+// Implements the remove contact function of MVPbkContactViewObserver
+// ---------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::ContactRemovedFromView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+{
+}
+
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::ContactViewError
+// Implements the view error function of MVPbkContactViewObserver
+// ---------------------------------------------------------------------------
+void CNSmlDummyModsFetcher::ContactViewError(
+ MVPbkContactViewBase& /*aView*/,
+ TInt aError,
+ TBool /*aErrorNotified*/ )
+{
+ _DBG_FILE("CNSmlDummyModsFetcher::ContactViewError(): begin");
+
+ User::RequestComplete( iCallerStatus, aError );
+
+ _DBG_FILE("CNSmlDummyModsFetcher::ContactViewError(): end");
+}
+
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::VPbkSingleContactOperationComplete
+// Called when the contact operation is completed.
+// ---------------------------------------------------------------------------
+//
+ void CNSmlDummyModsFetcher::VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact )
+{
+ _DBG_FILE("CNSmlDummyModsFetcher::VPbkSingleContactOperationComplete(): begin");
+
+ MVPbkContactOperationBase* operation = &aOperation;
+ if ( operation )
+ {
+ delete operation;
+ operation = NULL;
+ }
+
+ TRAPD( error,UpdateSnapshotL( aContact ) );
+ delete aContact;
+ if( error!= KErrNone )
+ {
+ User::RequestComplete( iCallerStatus, error );
+ }
+ else
+ {
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ }
+
+ _DBG_FILE("CNSmlDummyModsFetcher::VPbkSingleContactOperationComplete(): end");
+}
+
+// ---------------------------------------------------------------------------
+// CNSmlDummyModsFetcher::VPbkSingleContactOperationFailed
+// Called when the contact operation fails
+// ---------------------------------------------------------------------------
+//
+void CNSmlDummyModsFetcher::VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt /*aError*/ )
+ {
+ _DBG_FILE("CNSmlDummyModsFetcher::VPbkSingleContactOperationFailed(): begin");
+
+ MVPbkContactOperationBase* operation = &aOperation;
+ if ( operation )
+ {
+ delete operation;
+ operation = NULL;
+ }
+
+ _DBG_FILE("CNSmlDummyModsFetcher::VPbkSingleContactOperationFailed(): end");
+ }
+// End of File