--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/ContactListSrc/CPEngContactListTransBase.cpp Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,339 @@
+/*
+* Copyright (c) 2005 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: Base class for contact list create and synchronize handlers
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPEngContactListTransBase.h"
+#include "CPEngContactListSettings.h"
+#include "CPEngContactListModBase.h"
+
+#include "PEngListLibTools.h"
+#include "MPEngXMLSerializer.h"
+#include "MPEngXMLParser.h"
+
+#include "CPEngTransactionStatus.h"
+#include "PEngWVPresenceErrors2.h"
+#include "PresenceDebugPrint.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::CPEngContactListTransBase()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListTransBase::CPEngContactListTransBase(
+ CPEngContactListModBase& aContactList,
+ CPEngSessionSlotId& aSessionSlotId,
+ MPEngContactListTransactionManager& aManager,
+ TPEngWVCspVersion& aCSPVersion,
+ TInt aOperationId )
+ : iContactList( aContactList ),
+ iSessionSlotId( aSessionSlotId ),
+ iManager( aManager ),
+ iCSPVersion( aCSPVersion ),
+ iOperationId( aOperationId )
+ {
+ iContactList.Open(); // CSI: 65 #
+ iContactList.Lock( EStorageLockLevelHigh );
+ iContactList.BufferServerSideNotifications();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::ConstructL()
+ {
+ iTransactionStatus = CPEngTransactionStatus::NewL();
+ }
+
+
+// Destructor
+CPEngContactListTransBase::~CPEngContactListTransBase()
+ {
+ delete iTransactionStatus;
+
+ iContactList.ReleaseServerSideBuffering();
+ iContactList.Unlock();
+ iContactList.Close();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::RequestL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::RequestL( TDes8& aSendBuffer )
+ {
+ aSendBuffer.Zero();
+ MPEngXMLSerializer* xmlSerializer = CreateXmlSerializerL( aSendBuffer );
+ CleanupClosePushL( *xmlSerializer );
+
+ // <TransactionContent xmlns="http://www.wireless -village.org/TRC1.1">
+ NListLibTools::AppendTransactionContentTagXmlL( *xmlSerializer, iCSPVersion );
+
+ switch ( iContactListSyncState )
+ {
+ case EPEngCntListCreate:
+ DoGetXMLCreateCntListL( *xmlSerializer );
+ break;
+
+ case EPEngCntListFetch:
+ DoGetXMLFetchCntListL( *xmlSerializer );
+ break;
+
+ case EPEngSubscribeCntList:
+ GetXMLSubscribeListL( *xmlSerializer );
+ break;
+
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+
+
+ // end of transaction
+ // </TransactionContent>
+ xmlSerializer->EndTagL( KTransactionContent );
+ CleanupStack::PopAndDestroy( ); // xmlSerializer
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::LastRunningTransactionHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::LastRunningTransactionHandler()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::OutgoingProcessResponseL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::ProcessResponseL( const TDesC8& aResponse,
+ TRequestStatus& /* aStatus */ )
+ {
+ MPEngXMLParser* XMLparser = CreateXMLParserLC();
+
+ switch ( iContactListSyncState )
+ {
+ case EPEngCntListCreate:
+ {
+ DoParseCreateCntListResponseL( aResponse, *XMLparser );
+ break;
+ }
+
+
+ case EPEngCntListFetch:
+ {
+ DoParseFetchCntListResponseL( aResponse, *XMLparser );
+ break;
+ }
+
+
+ case EPEngSubscribeCntList:
+ {
+ ParseSubscribeListResponseL( aResponse, *XMLparser );
+ break;
+ }
+
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // XMLparser
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::CancelProcessing()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::CancelProcessing()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::NewTransactionHandlersL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::NewTransactionHandlersL(
+ RPointerArray<MPEngOutgoingTransactionHandler>& /* aHandlers */ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::TransactionCompleted()
+// -----------------------------------------------------------------------------
+//
+TBool CPEngContactListTransBase::TransactionCompleted()
+ {
+ return ( iContactListSyncState == EPEngTransactionCompleted );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::TransactionResult()
+// -----------------------------------------------------------------------------
+//
+CPEngTransactionStatus* CPEngContactListTransBase::TransactionResult()
+ {
+ CPEngTransactionStatus* temp = iTransactionStatus;
+ iTransactionStatus = NULL;
+ return temp;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::ReleaseHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::ReleaseHandler()
+ {
+ iContactListSyncState = EPEngTransactionCompleted;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::CompleteCntListTransactionL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::CompleteCntListTransactionL()
+ {
+ iContactListSyncState = EPEngTransactionCompleted;
+ iContactList.Settings().SetPropertyL( KPEngHasBeenSynchronized,
+ KPEngCntLstPropertyNativeCached,
+ ETrue );
+ iContactList.Settings().SetPropertyL( KPEngListExistsOnServer,
+ KPEngCntLstPropertyNativeCached,
+ ETrue );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::GetXMLSubscribeList()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::GetXMLSubscribeListL(
+ MPEngXMLSerializer& aXmlSerializer )
+ {
+ // <SubscribePresence-Request>
+ aXmlSerializer.StartTagL( KSubscribePresence );
+
+ NListLibTools::AppendContactListNameXmlL( aXmlSerializer,
+ iContactList.Settings() );
+
+
+ // append set of attributes which should be subscribed
+ NListLibTools::AppendAttributesForSubscriptionXmlL(
+ iContactList.Settings().SubscriptionAttributes(),
+ aXmlSerializer,
+ iSessionSlotId,
+ iCSPVersion );
+
+
+ // if server supports 1.2 CSP, use autosubscribe
+ if ( iCSPVersion == EWVCspV12 )
+ {
+ // <AutoSubscribe>T</AutoSubscribe>
+ aXmlSerializer.StartTagL( KAutoSubscribe ).
+ NarrowTextL( KXMLValueTrue ).
+ EndTagL( KAutoSubscribe );
+ }
+
+
+ // </SubscribePresence-Request>
+ aXmlSerializer.EndTagL( KSubscribePresence );
+
+
+ // register contacts to the Attribute library
+ TPEngContactlistDesViewWraper contacts( iContactList );
+ NListLibTools::ActivatePresenceAttributesL( contacts, iSessionSlotId );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListTransBase::ParseSubscribeListResponseL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListTransBase::ParseSubscribeListResponseL(
+ const TDesC8& aResponse,
+ MPEngXMLParser& aXMLparser )
+ {
+ PENG_DP( D_PENG_LIT( "CPEngContactListTransBase::ParseSubscribeListResponseL() [%S]" ),
+ &( iContactList.ListProperties().Name() ) );
+
+ // try if there were some errors
+ CPEngTransactionStatus* transactionStatus = CPEngTransactionStatus::NewL();
+ CleanupClosePushL( *transactionStatus );
+ TInt err ( aXMLparser.ParseContactListResultL( aResponse,
+ iOperationId,
+ iContactList.StorageId(),
+ *transactionStatus ) );
+ switch ( err )
+ {
+ case KPEngNwErrPartiallySuccessful:
+ {
+ // mark for remove bad contacts,
+ // transaction will also unregister their attribute models
+ NListLibTools::MarkForRemoveBadContactsL( *transactionStatus, iContactList );
+ }
+
+ // fall through
+ case KErrNone:
+ {
+ CompleteCntListTransactionL();
+ transactionStatus->SetStatus( KErrNone );
+ break;
+ }
+
+
+ case KPEngNwErrUnknownUser:
+ {
+ // unregister attribute models
+ TPEngContactlistDesViewWraper contacts( iContactList );
+ NListLibTools::DeactivatePresenceAttributesL( contacts, iSessionSlotId );
+
+ // all contact Ids are wrong, remove them
+ iContactList.ResetLocalView();
+ CompleteCntListTransactionL();
+ break;
+ }
+
+
+ default:
+ {
+ CompleteCntListTransactionL();
+ }
+ }
+
+ iTransactionStatus->ImportStatusFrom( *transactionStatus );
+ CleanupStack::Pop(); // transactionStatus
+
+ PENG_DP( D_PENG_LIT( "CPEngContactListTransBase::ParseSubscribeListResponseL() done [%S]" ),
+ &( iContactList.ListProperties().Name() ) );
+ }
+
+// End of File
+