PECengine/ListLibrary2/ContactListSrc/CPEngContactListMngTransSubcription.cpp
branchRCL_3
changeset 17 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/ContactListSrc/CPEngContactListMngTransSubcription.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -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 );
+
+    // <TransactionContent xmlns="http://www.wireless -village.org/TRC1.1">
+    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
+    // </TransactionContent>
+    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<MPEngOutgoingTransactionHandler>& /* 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 )
+    {
+    // <UnsubscribePresence-Request>
+    aXmlSerializer.StartTagL( KUnsubscribePresence );
+
+    NListLibTools::AppendContactListNameXmlL( aXmlSerializer, iContactList.Settings() );
+
+    //  </UnsubscribePresence-Request>
+    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 )
+    {
+    // <SubscribePresence-Request>
+    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 )
+        {
+        // <AutoSubscribe>T</AutoSubscribe>
+        aXmlSerializer.StartTagL( KAutoSubscribe ).
+        NarrowTextL( KXMLValueTrue ).
+        EndTagL( KAutoSubscribe );
+        }
+
+
+    // </SubscribePresence-Request>
+    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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+