diff -r 000000000000 -r 094583676ce7 PECengine/ListLibrary2/ContactListSrc/CPEngContactListMngTransSubcription.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/ContactListSrc/CPEngContactListMngTransSubcription.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,396 @@
+/*
+* 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: Handler to update contact list subscription.
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngContactListMngTransSubcription.h"
+
+#include "MPEngContactListSettingsManager.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 ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::CPEngContactListMngTransSubcription()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListMngTransSubcription::CPEngContactListMngTransSubcription(
+ CPEngContactListModBase& aContactList,
+ CPEngSessionSlotId& aSessionSlotId,
+ TPEngWVCspVersion& aCSPVersion,
+ TInt aOperationId )
+ : iContactList ( aContactList ),
+ iSessionSlotId( aSessionSlotId ),
+ iTransactionCompleted( EFalse ),
+ iCSPVersion( aCSPVersion ),
+ iOperationId( aOperationId )
+
+ {
+ PENG_DP( D_PENG_LIT( "CPEngContactListMngTransSubcription::CPEngContactListMngTransSubcription() [%S]" ),
+ &( iContactList.ListProperties().Name() ) );
+
+ iContactList.Open(); // CSI: 65 #
+ iContactList.Lock( EStorageLockLevelHigh );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::ConstructL()
+ {
+ iTransactionStatus = CPEngTransactionStatus::NewL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::NewLC()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListMngTransSubcription* CPEngContactListMngTransSubcription::NewLC(
+ CPEngContactListModBase& aContactList,
+ CPEngSessionSlotId& aSessionSlotId,
+ TPEngWVCspVersion& aCSPVersion,
+ TInt aOperationId )
+ {
+ CPEngContactListMngTransSubcription* self =
+ new ( ELeave ) CPEngContactListMngTransSubcription( aContactList,
+ aSessionSlotId,
+ aCSPVersion,
+ aOperationId );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+
+ return self;
+ }
+
+
+// Destructor
+CPEngContactListMngTransSubcription::~CPEngContactListMngTransSubcription()
+ {
+ iContactList.Unlock();
+ iContactList.Close();
+ delete iTransactionStatus;
+ }
+
+
+
+// ===========================================================================
+// =============Function from MPEngOutgoingTransactionHandler ================
+// ===========================================================================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::RequestL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::RequestL(
+ TDes8& aSendBuffer )
+ {
+ aSendBuffer.Zero();
+ MPEngXMLSerializer* xmlSerializer = CreateXmlSerializerL( aSendBuffer );
+ CleanupClosePushL( *xmlSerializer );
+
+ //
+ NListLibTools::AppendTransactionContentTagXmlL( *xmlSerializer, iCSPVersion );
+
+ // check if contact list needs to be re-subscribed, or unsubscribed
+ if ( iContactList.Settings().Property( KPEngCntLstSubscribe,
+ KPEngCntLstPropertyNativePermanent ) )
+ {
+ GetXMLSubscribeListL( *xmlSerializer );
+ }
+ else
+ {
+ GetXMLUnsubscribeListL( *xmlSerializer );
+ }
+
+ // end of transaction
+ //
+ xmlSerializer->EndTagL( KTransactionContent );
+ CleanupStack::PopAndDestroy( ); // xmlSerializer
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::LastRunningTransactionHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::LastRunningTransactionHandler()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::ProcessResponseL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::ProcessResponseL(
+ const TDesC8& aResponse,
+ TRequestStatus& /* aStatus */ )
+ {
+ MPEngXMLParser* XMLparser = CreateXMLParserLC();
+
+ // try if there were some errors
+ // check what kind of the request was it
+ if ( iContactList.Settings().Property( KPEngCntLstSubscribe ,
+ KPEngCntLstPropertyNativePermanent ) )
+ {
+ ParseSubscribeListResponseL( aResponse, *XMLparser );
+ }
+ else
+ {
+ ParseUnsubscribeListResponseL( aResponse, *XMLparser );
+ }
+
+
+ CleanupStack::PopAndDestroy(); // XMLparser
+ iTransactionCompleted = ETrue;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::CancelProcessing()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::CancelProcessing()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::NewTransactionHandlersL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::NewTransactionHandlersL(
+ RPointerArray& /* aTransactionsArray*/ )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::TransactionCompleted()
+// -----------------------------------------------------------------------------
+//
+TBool CPEngContactListMngTransSubcription::TransactionCompleted()
+ {
+ return iTransactionCompleted;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::TransactionResult()
+// -----------------------------------------------------------------------------
+//
+CPEngTransactionStatus* CPEngContactListMngTransSubcription::TransactionResult()
+ {
+ CPEngTransactionStatus* temp = iTransactionStatus;
+ iTransactionStatus = NULL;
+ return temp;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::ReleaseHandler()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::ReleaseHandler()
+ {
+ iTransactionCompleted = ETrue;
+ }
+
+
+// =============================================================================
+// ==============NEW FUNCTIONS of the base class ===============================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::GetXMLContactListUpdateL()
+// Creates XML message to unsubscribe contact lists
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::GetXMLUnsubscribeListL(
+ MPEngXMLSerializer& aXmlSerializer )
+ {
+ //
+ aXmlSerializer.StartTagL( KUnsubscribePresence );
+
+ NListLibTools::AppendContactListNameXmlL( aXmlSerializer, iContactList.Settings() );
+
+ //
+ aXmlSerializer.EndTagL( KUnsubscribePresence );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::GetXMLSubscribeList()
+// Creates XML message to re-subscribe contact list
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::GetXMLSubscribeListL(
+ MPEngXMLSerializer& aXmlSerializer )
+ {
+ //
+ aXmlSerializer.StartTagL( KSubscribePresence );
+
+ NListLibTools::AppendContactListNameXmlL( aXmlSerializer,
+ iContactList.Settings() );
+
+ 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 );
+
+ // init attribute models
+ TPEngContactlistDesViewWraper contacts( iContactList );
+ NListLibTools::ActivatePresenceAttributesL( contacts, iSessionSlotId );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::ParseUnsubscreAllResponseL()
+// Parse XML Unsubscribe contact list response
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::ParseUnsubscribeListResponseL(
+ const TDesC8& aResponse,
+ MPEngXMLParser& aXMLparser )
+ {
+ // if contact list was not unsubscribed successfully,
+ // just relax, it will be done by next log in anyway
+ TInt err ( aXMLparser.ParseResultL( aResponse,
+ iOperationId,
+ *iTransactionStatus ) );
+ // ignore
+ switch ( err )
+ {
+ case KErrNone:
+ // partial success is same as success in this case
+ case KPEngNwErrPartiallySuccessful:
+ {
+ iContactList.Settings().DeletePropertyL(
+ KPEngSubcriptionUpdate,
+ KPEngCntLstPropertyNativeCached );
+ TPEngContactlistDesViewWraper contacts( iContactList );
+ NListLibTools::DeactivatePresenceAttributesL( contacts, iSessionSlotId );
+ break;
+ }
+ default:
+ {
+ // client will be notified about fail by Transaction Status
+ break;
+ }
+ }
+ }
+// -----------------------------------------------------------------------------
+// CPEngContactListMngTransSubcription::ParseSubscribeListResponseL()
+// Parse XML re-subscribe contact list response
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListMngTransSubcription::ParseSubscribeListResponseL(
+ const TDesC8& aResponse,
+ MPEngXMLParser& aXMLparser )
+ {
+ TInt err ( aXMLparser.ParseContactListResultL( aResponse,
+ iOperationId,
+ iContactList.StorageId(),
+ *iTransactionStatus ) );
+ switch ( err )
+ {
+ //
+ case KPEngNwErrPartiallySuccessful:
+ {
+ // only wrong contact Ids are checked here
+ NListLibTools::MarkForRemoveBadContactsL( *iTransactionStatus, iContactList );
+ break;
+ }
+
+ case KErrNone:
+ {
+ // Contact list was subscribed successfully
+ iContactList.Settings().DeletePropertyL(
+ KPEngSubcriptionUpdate,
+ KPEngCntLstPropertyNativeCached );
+ break;
+ }
+
+ case KPEngNwErrUnknownUser:
+ {
+ // deactivate attribute models
+ TPEngContactlistDesViewWraper contacts( iContactList );
+ NListLibTools::DeactivatePresenceAttributesL( contacts, iSessionSlotId );
+ // all contact Ids are wrong, remove them
+ iContactList.ResetLocalView();
+ break;
+ }
+ case KPEngNwErrContactListDoesNotExist:
+ {
+ iContactList.Settings().DeletePropertyL(
+ KPEngListExistsOnServer,
+ KPEngCntLstPropertyNativeCached );
+ break;
+ }
+ // ignore all other errors
+ default:
+ {
+ }
+ }
+ }
+
+// End of File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+