--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailcontacts/remotecontactlookup/engine/src/cpbkxrclcontactconverter.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,219 @@
+/*
+* 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: Converting CPbkContactItem to MVPbkStoreContact
+*
+*/
+
+#include "emailtrace.h"
+#include <e32base.h> // CActiveSchedulerWait
+#include <coemain.h>
+#include <BCardEng.h> // Old VCard engine
+#include <s32mem.h> // Memory based streams
+#include <s32strm.h> // Stream
+#include <CPbkContactEngine.h> // Old phonebook contact engine
+#include <CVPbkContactStoreUriArray.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactStoreProperties.h>
+#include <MVPbkContactOperationBase.h>
+#include <CVPbkVCardEng.h>
+#include <MVPbkStoreContact.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactStore.h>
+
+#include "cpbkxrclcontactconverter.h"
+
+const TInt KGranularitySize = 128; // "Granularity" of dynamic buffer
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::CPbkxRclContactConverter()
+// ---------------------------------------------------------------------------
+//
+CPbkxRclContactConverter::CPbkxRclContactConverter(
+ CPbkContactEngine& aContactEngine,
+ CVPbkContactManager& aContactManager,
+ MVPbkContactStore& aContactStore ):
+ iContactEngine( aContactEngine ),
+ iContactManager( aContactManager ),
+ iContactStore( aContactStore )
+ {
+ FUNC_LOG;
+ // No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPbkxRclContactConverter::~CPbkxRclContactConverter()
+ {
+ FUNC_LOG;
+ delete iCardEngine;
+ delete iVPbkCardEngine;
+ delete iWait;
+ }
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter* CPbkxRclContactConverter::NewLC()
+// ---------------------------------------------------------------------------
+//
+CPbkxRclContactConverter* CPbkxRclContactConverter::NewLC(
+ CPbkContactEngine& aContactEngine,
+ CVPbkContactManager& aContactManager,
+ MVPbkContactStore& aContactStore )
+ {
+ FUNC_LOG;
+ CPbkxRclContactConverter* self = new (ELeave)CPbkxRclContactConverter(
+ aContactEngine, aContactManager, aContactStore );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter* CPbkxRclContactConverter::NewL()
+// ---------------------------------------------------------------------------
+//
+CPbkxRclContactConverter* CPbkxRclContactConverter::NewL(
+ CPbkContactEngine& aContactEngine,
+ CVPbkContactManager& aContactManager,
+ MVPbkContactStore& aContactStore )
+ {
+ FUNC_LOG;
+ CPbkxRclContactConverter* self = CPbkxRclContactConverter::NewLC(
+ aContactEngine, aContactManager, aContactStore );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CPbkxRclContactConverter::ConstructL()
+ {
+ FUNC_LOG;
+ // Crete Old VCard engine
+ iCardEngine = CBCardEngine::NewL( &iContactEngine );
+
+ // New Virtual Phonebook VCard engine
+ iVPbkCardEngine = CVPbkVCardEng::NewL( iContactManager );
+
+ iWait = new ( ELeave ) CActiveSchedulerWait();
+ }
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::ConvertContactL()
+// ---------------------------------------------------------------------------
+//
+void CPbkxRclContactConverter::ConvertContactL(
+ CPbkContactItem& aContactItem,
+ RFscStoreContactList& aConvertedContact )
+ {
+ FUNC_LOG;
+ CBufFlat* buf = CBufFlat::NewL(KGranularitySize);
+ RBufWriteStream bufWriteStream;
+ bufWriteStream.Open(*buf);
+ CleanupClosePushL(bufWriteStream);
+
+ // Export ContactCard (ContactItem ) to VCard. Sync operation.
+ iCardEngine->ExportBusinessCardL( bufWriteStream, aContactItem );
+
+ CleanupStack::PopAndDestroy( &bufWriteStream );
+
+ // Create ReadStrem for VPbk VCard engine and associate it with received buf
+ RBufReadStream bufReadStream;
+ bufReadStream.Open(*buf);
+ CleanupClosePushL(bufReadStream);
+
+ // Pass new ReadStream for VPbk VCard engine and receive MVPbkStoreContact object
+ MVPbkContactOperationBase* oper = iVPbkCardEngine->ImportVCardL(
+ aConvertedContact,
+ iContactStore,
+ bufReadStream,
+ *this );
+ CleanupDeletePushL( oper );
+
+ // Now wait until async ready
+ if ( !(iWait->IsStarted()) )
+ {
+ iWait->Start();
+ }
+
+ CleanupStack::PopAndDestroy(2, &bufReadStream); // bufReadStream, oper
+ delete buf;
+ }
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::ConvertAndExportContactL()
+// ---------------------------------------------------------------------------
+//
+void CPbkxRclContactConverter::ConvertAndExportContactL(
+ CPbkContactItem& aContactItem,
+ RWriteStream& aStream )
+ {
+ FUNC_LOG;
+ RFscStoreContactList convertedContact;
+ CleanupClosePushL( convertedContact );
+
+ ConvertContactL( aContactItem, convertedContact );
+ CleanupDeletePushL( convertedContact[0] );
+
+ MVPbkContactOperationBase* oper = iVPbkCardEngine->ExportVCardL(
+ aStream,
+ *convertedContact[0],
+ *this);
+ CleanupDeletePushL( oper );
+ // Now wait until async ready
+ iWait->Start();
+
+ CleanupStack::PopAndDestroy(3, &convertedContact );
+ }
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::VPbkSingleContactOperationComplete()
+// ---------------------------------------------------------------------------
+//
+void CPbkxRclContactConverter::VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& /*aOperation*/,
+ MVPbkStoreContact* /* aContact */ )
+ {
+ FUNC_LOG;
+ // The aContact in the call back is always NULL.
+ iLastError = KErrNone;
+ if (iWait->IsStarted())
+ {
+ iWait->AsyncStop();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CPbkxRclContactConverter::VPbkSingleContactOperationFailed()
+// ---------------------------------------------------------------------------
+//
+void CPbkxRclContactConverter::VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& /*aOperation*/, TInt aError )
+ {
+ FUNC_LOG;
+ iLastError = aError;
+ if (iWait->IsStarted())
+ {
+ iWait->AsyncStop();
+ }
+ }
+