diff -r 6ca72c0fe49a -r a941bc465d9f PECengine/ListLibrary2/ContactListSrc/CPEngContactListTransBase.cpp --- /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 ); + + // + 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 + // + 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& /* 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 ) + { + // + 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 ) + { + // T + aXmlSerializer.StartTagL( KAutoSubscribe ). + NarrowTextL( KXMLValueTrue ). + EndTagL( KAutoSubscribe ); + } + + + // + 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 +