--- a/simpledatamodeladapter/src/presenceplugingroup.cpp Thu Jul 01 14:09:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,866 +0,0 @@
-/*
-* Copyright (c) 2006-2010 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: IETF SIMPLE Protocol implementation for XIMP Framework
-*
-*/
-
-
-#include <e32std.h>
-#include <ximpdatasubscriptionstate.h>
-#include <protocolpresentitygroupsdatahost.h>
-#include <protocolpresencedatahost.h>
-#include <ximpobjectfactory.h>
-#include <presenceobjectfactory.h>
-#include <ximpstatus.h>
-#include <ximpidentity.h>
-#include <ximpobjectcollection.h>
-#include <xdmerrors.h>
-#include <presentitygroupinfo.h>
-#include <presentitygroupmemberinfo.h>
-#include <utf.h>
-#include <avabilitytext.h>
-
-#include "mpresencepluginconnectionobs.h"
-#include "presenceplugingroup.h"
-#include "presencepluginxdmutils.h"
-#include "presenceplugincommon.h"
-#include "presencepluginvirtualgroup.h"
-#include "presenceplugindata.h"
-#include "presencepluginwatcher.h"
-#include "presencepluginauthorization.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::CPresencePluginGroups
-// ---------------------------------------------------------------------------
-//
-CPresencePluginGroups::CPresencePluginGroups(
- MPresencePluginConnectionObs& aObs,
- CPresencePluginVirtualGroup* aSubscribedBuddies,
- CPresencePluginData* aPresenceData ):
- CActive( CActive::EPriorityStandard ),
- iConnObs(aObs),
- iOperation( ENoOperation),
- iState( EPluginIdle ), iCompleted( ETrue ),
- iSubscribedBuddies( aSubscribedBuddies ),
- iPresenceData( aPresenceData )
- {
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::NewL
-// ---------------------------------------------------------------------------
-//
-CPresencePluginGroups* CPresencePluginGroups::NewL(
- MPresencePluginConnectionObs& aObs,
- CPresencePluginVirtualGroup* aSubscribedBuddies,
- CPresencePluginData* aPresenceData )
- {
- CPresencePluginGroups* self =
- CPresencePluginGroups::NewLC(
- aObs,
- aSubscribedBuddies,
- aPresenceData );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::NewLC
-// ---------------------------------------------------------------------------
-//
-CPresencePluginGroups* CPresencePluginGroups::NewLC(
- MPresencePluginConnectionObs& aObs,
- CPresencePluginVirtualGroup* aSubscribedBuddies,
- CPresencePluginData* aPresenceData )
- {
- CPresencePluginGroups* self =
- new( ELeave ) CPresencePluginGroups(
- aObs,
- aSubscribedBuddies,
- aPresenceData );
- CleanupStack::PushL( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::~CPresencePluginGroups
-// ---------------------------------------------------------------------------
-//
-CPresencePluginGroups::~CPresencePluginGroups()
- {
- DP_SDA("CPresencePluginGroups::~CPresencePluginGroups");
- Cancel();
- delete iPresIdentity;
- delete iDisplayName;
- DP_SDA("CPresencePluginGroups::~CPresencePluginGroups end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoSubscribePresentityGroupListL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoSubscribePresentityGroupListL(
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginGroups::DoSubscribePresentityGroupListL");
- iCompleted = EFalse;
- // List of lists under buddylist
- StartXdmOperationL( aReqId, EGetListOfLists );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoUnsubscribePresentityGroupListL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoUnsubscribePresentityGroupListL(
- TXIMPRequestId /*aReqId*/ )
- {
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoCreatePresentityGroupL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoCreatePresentityGroupL(
- const MXIMPIdentity& /*aGroupId*/,
- const TDesC16& /*aDisplayName*/,
- TXIMPRequestId /*aReqId*/ )
- {
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoDeletePresentityGroupL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoDeletePresentityGroupL(
- const MXIMPIdentity& /*aGroupId*/,
- TXIMPRequestId /*aReqId*/ )
- {
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoUpdatePresentityGroupDisplayNameL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoUpdatePresentityGroupDisplayNameL(
- const MXIMPIdentity& /*aGroupId*/,
- const TDesC16& /*aDisplayName*/,
- TXIMPRequestId /*aReqId*/ )
- {
- // Notice: later
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoSubscribePresentityGroupContentL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoSubscribePresentityGroupContentL(
- const MXIMPIdentity& aGroupId,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginGroups::DoSubscribePresentityGroupContentL");
- iCompleted = EFalse;
- // List of lists under buddylist
- StartXdmOperationL( aGroupId, aReqId, EGetListContent );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoUnsubscribePresentityGroupContentL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoUnsubscribePresentityGroupContentL(
- const MXIMPIdentity& /*aGroupId*/,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginGroups::DoUnsubscribePresentityGroupContentL");
-
- iXIMPId = aReqId;
- iConnObs.WatcherHandlerL()->UnSubscribeAllL();
- iCompleted = EFalse;
- CompleteXIMPReq( KErrNone );
- DP_SDA("CPresencePluginGroups::DoUnsubscribePresentityGroupContentL out");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoAddPresentityGroupMemberL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoAddPresentityGroupMemberL(
- const MXIMPIdentity& aGroupId,
- const MXIMPIdentity& aMemberId,
- const TDesC16& /*aMemberDisplayName*/,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginGroups::DoAddPresentityGroupMemberL");
- __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrNotReady ) );
-
- SetPresIdentityL( aMemberId, ETrue );
-
- iCompleted = EFalse;
- iXIMPId = aReqId;
-
- if( !aGroupId.Identity().Compare( KPresenceBuddyList ) )
- {
- DP_SDA("CPresencePluginGroups::DoAddPresentityGroupMemberL - buddylist");
- iOperation = EAddPresentityGroupMember;
-
- // write pending to presence cache
- TBuf<20> buf;
- buf.Copy( KPendingRequestExtensionValue );
-
- iPresenceData->WriteStatusToCacheL( aMemberId.Identity(),
- MPresenceBuddyInfo2::ENotAvailable,
- buf,
- KNullDesC() );
-
- iConnObs.WatcherHandlerL()->DoPerformSubscribePresentityPresenceL(
- aMemberId, iStatus );
- SetActive();
- }
- else if ( !aGroupId.Identity().Compare( KPresenceBlockedList ) )
- {
- DP_SDA("CPresencePluginGroups::DoAddPresentityGroupMemberL - blockedlist");
- iOperation = EBlockPresentityGroupMember;
- iConnObs.InternalPresenceAuthorization().
- DoPerformBlockPresenceForPresentityL( aMemberId, iStatus );
- SetActive();
- }
- else
- {
- DP_SDA("CPresencePluginGroups::DoAddPresentityGroupMemberL - unknown, leave");
- User::Leave( KErrNotSupported );
- }
-
- DP_SDA("CPresencePluginGroups::DoAddPresentityGroupMemberL out");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoRemovePresentityGroupMemberL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoRemovePresentityGroupMemberL(
- const MXIMPIdentity& aGroupId,
- const MXIMPIdentity& aMemberId,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginGroups::DoRemovePresentityGroupMemberL");
- __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrNotReady ) );
-
- SetPresIdentityL( aMemberId, ETrue );
-
- iCompleted = EFalse;
- iXIMPId = aReqId;
- iOperation = ERemovePresentityGroupMember;
-
- if( !aGroupId.Identity().Compare( KPresenceBuddyList ) )
- {
- DP_SDA(" DoRemovePresentityGroupMemberL - buddylist");
- iConnObs.WatcherHandlerL()->DoPerformUnsubscribePresentityPresenceL(
- aMemberId, iStatus );
- SetActive();
- }
- else if ( !aGroupId.Identity().Compare( KPresenceBlockedList ) )
- {
- DP_SDA(" DoRemovePresentityGroupMemberL - blockedlist");
- iOperation = EUnblockPresentityGroupMember;
- iConnObs.InternalPresenceAuthorization().
- DoPerformCancelPresenceBlockFromPresentityL( aMemberId, iStatus );
- SetActive();
- }
- else
- {
- DP_SDA("DoRemovePresentityGroupMemberL - unknown, leave");
- User::Leave( KErrNotSupported );
- }
-
- DP_SDA("CPresencePluginGroups::DoRemovePresentityGroupMemberL out");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoUpdatePresentityGroupMemberDisplayNameL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoUpdatePresentityGroupMemberDisplayNameL(
- const MXIMPIdentity& /*aGroupId*/,
- const MXIMPIdentity& /*aMemberId*/,
- const TDesC16& /*aMemberDisplayName*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_SDA("CPresencePluginGroups::DoUpdatePresentityGroupMemberDisplayNameL");
- // Notice: Later
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoCancel( )
- {
- if ( iOperation != ENoOperation )
- {
- iXdmUtils->Cancel();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::RunL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::RunL()
- {
- DP_SDA("CPresencePluginGroups::RunL");
- TInt myStatus = iStatus.Int();
- DP_SDA2("CPresencePluginGroups::RunL myStatus %d", myStatus );
-
- if ( !myStatus && !iCompleted )
- {
- DP_SDA("CPresencePluginGroups::RunL !myStatus");
- // OK response
- CallActualXdmOperationL( myStatus );
- }
- else if ( !myStatus && iCompleted )
- {
- DP_SDA("CPresencePluginGroups::RunL SEND COMPLETE");
- CompleteXIMPReq( myStatus );
- }
- else
- {
- if ( iOperation == EDeletePresentityGroup && iState ==
- EPluginCommitRls )
- {
- DP_SDA("CPresencePluginGroups::RunL CallActualXdmOperation");
- CallActualXdmOperationL( myStatus );
- }
- else
- {
- DP_SDA("CPresencePluginGroups::RunL SEND COMPLETE 2");
- // Other errors terminated the show
- CompleteXIMPReq( myStatus );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::CallActualXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::CallActualXdmOperationL( TInt aCompleteStatus )
- {
- DP_SDA("CPresencePluginGroups::CallActualXdmOperationL");
-
- DP_SDA2("CallActualXdmOperationL iOperation %d", iOperation);
- switch ( iOperation )
- {
- case EGetListOfLists:
- {
- DP_SDA("PluginGroups::CallActualXdmOperationL EGetListOfLists");
- iOperation = EGetListOfLists;
- GetListOfListsL();
- }
- break;
-
- case EGetListContent:
- {
- DP_SDA("PluginGroups::CallActualXdmOperationL EGetListContent");
- iOperation = EGetListContent;
- GetListContentL();
- }
- break;
-
- case EAddPresentityGroupMember:
- {
- DP_SDA(" CallActualXdmOperationL EAddPresentityGroupMember");
-
- iOperation = EGrantPresentityGroupMember;
- MXIMPIdentity* newIdentity =
- iConnObs.ObjectFactory().NewIdentityLC();
- newIdentity->SetIdentityL( *iPresIdentity );
-
- iConnObs.InternalPresenceAuthorization().
- DoPerformGrantPresenceForPresentityL( *newIdentity, iStatus );
- CleanupStack::PopAndDestroy(); // >> newIdentity
- SetActive();
- }
- break;
-
- case ERemovePresentityGroupMember:
- {
- DP_SDA(" CallActualXdmOperationL ERemovePresentityGroupMember");
- iOperation = EWithdrawGrantFromMember;
- MXIMPIdentity* newIdentity = iConnObs.ObjectFactory().NewIdentityLC();
- newIdentity->SetIdentityL( *iPresIdentity );
- iConnObs.InternalPresenceAuthorization().
- DoPerformWithdrawPresGrantFromPresentityL(
- *newIdentity, iStatus );
- CleanupStack::PopAndDestroy(); // >> newIdentity
- SetActive();
- }
- break;
-
- case EGrantPresentityGroupMember:
- {
- DP_SDA(" CallActualXdmOperationL EGrantPresentityGroupMember");
- CompleteXIMPReq( aCompleteStatus );
- }
- break;
-
- case EWithdrawGrantFromMember:
- {
- DP_SDA(" CallActualXdmOperationL EWithdrawGrantFromMember");
- if ( !aCompleteStatus )
- {
- DP_SDA(" -> succesfully unblocked, store to cache");
- DeletePersonCacheL();
- DP_SDA(" -> store info to cache done");
- }
- CompleteXIMPReq( aCompleteStatus );
- }
- break;
-
- case EBlockPresentityGroupMember:
- {
- DP_SDA(" CallActualXdmOperationL EBlockPresentityGroupMember");
- if ( !aCompleteStatus )
- {
- DP_SDA(" -> succesfully blocked, store to cache");
-
- DP_SDA(" -> strip prefix from uri");
- HBufC* withoutPrefix = iPresenceData->RemovePrefixLC(
- *iPresIdentity );
- DP_SDA(" -> store info to cache");
-
- TBuf<20> buf;
- buf.Copy( KBlockedExtensionValue );
-
- iPresenceData->WriteStatusToCacheL( *withoutPrefix,
- MPresenceBuddyInfo2::EUnknownAvailability,
- buf,
- KNullDesC() );
-
- CleanupStack::PopAndDestroy( withoutPrefix );
- DP_SDA(" -> store info to cache done");
- }
- CompleteXIMPReq( aCompleteStatus );
- }
- break;
-
- case EUnblockPresentityGroupMember:
- {
- DP_SDA(" CallActualXdmOperationL EUnblockPresentityGroupMember");
- if ( !aCompleteStatus )
- {
- DP_SDA(" -> succesfully unblocked, store to cache");
- DeletePersonCacheL();
- DP_SDA(" -> store info to cache done");
- }
- CompleteXIMPReq( aCompleteStatus );
- }
- break;
-
- default:
- User::Leave( KErrNotSupported );
- break;
- }
- DP_SDA("CPresencePluginGroups::CallActualXdmOperationL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginGroups::RunError( TInt aError )
- {
- DP_SDA("CPresencePluginGroups::RunError SEND COMPLETE");
- // complete the open request
- CompleteXIMPReq( aError );
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::GetInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CPresencePluginGroups::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions )
- {
- if ( aInterfaceId == GetInterfaceId() )
- {
- // caller wants this interface
- MProtocolPresentityGroups* myIf = this;
- return myIf;
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::GetInterface()
-// ---------------------------------------------------------------------------
-//
-const TAny* CPresencePluginGroups::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions ) const
- {
- if ( aInterfaceId == GetInterfaceId() )
- {
- // caller wants this interface
- const MProtocolPresentityGroups* myIf = this;
- return myIf;
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::GetInterfaceId()
-// ---------------------------------------------------------------------------
-//
-TInt32 CPresencePluginGroups::GetInterfaceId() const
- {
- return MProtocolPresentityGroups::KInterfaceId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::SetPresIdentityL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::SetPresIdentityL(
- const MXIMPIdentity& aPresentityId,
- TBool aFormatUri )
- {
- DP_SDA2("CPresencePluginGroups::SetPresIdentityL: %S",
- &aPresentityId.Identity() );
-
- delete iPresIdentity;
- iPresIdentity = NULL;
-
- if ( aFormatUri )
- {
- DP_SDA("CPresencePluginGroups::SetPresIdentityL, format uri");
-
- HBufC8* identityCopy = HBufC8::NewLC( KBufSize255 );
- TPtr8 identityCopyPtr( identityCopy->Des() );
- identityCopyPtr.Copy( aPresentityId.Identity() );
-
- HBufC8* prefixUri = iPresenceData->CreatePresenceUri8LC(
- identityCopyPtr );
-
- HBufC* prefixUri16 = HBufC::NewLC( KBufSize255 );
- TPtr prefixUri16Ptr( prefixUri16->Des() );
- prefixUri16Ptr.Copy( *prefixUri );
-
- iPresIdentity = prefixUri16;
- CleanupStack::Pop( prefixUri16 );
- CleanupStack::PopAndDestroy( prefixUri );
- CleanupStack::PopAndDestroy( identityCopy );
- }
- else
- {
- DP_SDA("CPresencePluginGroups::SetPresIdentityL, use as it is");
- iPresIdentity = aPresentityId.Identity().AllocL();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::StartXdmOperationL(
- TXIMPRequestId aReqId,
- TPluginGroupsOperation aOperation )
- {
- DP_SDA("StartXdmOperationL StartXdmOperationL two param");
- __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
- iXIMPId = aReqId;
- iOperation = aOperation;
- StartXdmOperationL();
- DP_SDA("StartXdmOperationL StartXdmOperationL two param end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::StartXdmOperationL(
- const MXIMPIdentity& aId,
- TXIMPRequestId aReqId,
- TPluginGroupsOperation aOperation )
- {
- DP_SDA("StartXdmOperationL StartXdmOperationL three param");
- __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
- SetPresIdentityL( aId, EFalse );
- iXIMPId = aReqId;
- iOperation = aOperation;
- StartXdmOperationL();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::StartXdmOperationL()
- {
- if ( !iXdmUtils )
- {
- DP_SDA("CPresencePluginGroups::StartXdmOperationL Get xdmUtils");
- iXdmUtils = iConnObs.XdmUtilsL();
- }
- DP_SDA("CPresencePluginGroups::StartXdmOperationL StartXdmOperationL");
-
- iXdmUtils->InitializeXdmL( iStatus );
- iState = EPluginInitXdm;
- DP_SDA("CPresencePluginGroups::StartXdmOperationL SetActive");
- SetActive();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::GetListOfListsL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::GetListOfListsL()
- {
- DP_SDA("CPresencePluginGroups::GetListOfListsL");
-
- RPointerArray<MXIMPIdentity> subscribed;
- CleanupClosePushL( subscribed );
-
- iXdmUtils->SubscribeBuddyListL( subscribed );
- DP_SDA("CPresencePluginGroups::GetListOfListsL SubscribeBudyList Ready");
-
- MXIMPObjectCollection* coll =
- iConnObs.ObjectFactory().NewObjectCollectionLC(); // << coll
-
- TInt count = subscribed.Count();
- DP_SDA2("CPresencePluginGroups::GetListOfListsL soul count %d", count);
-
- for ( TInt i = 0; i < count; i++ )
- {
- MXIMPIdentity* currId = subscribed[i];
- MPresentityGroupInfo* sInfo =
- iConnObs.PresenceObjectFactoryOwn().NewPresentityGroupInfoLC();
- sInfo->SetGroupIdL( currId ); // ownership is taken
- sInfo->SetGroupDisplayNameL( currId->Identity() );
-
- coll->AddObjectL( sInfo ); // ownership is taken
- CleanupStack::Pop(); // >> bInfo
- }
- DP_SDA("SubscribeBudyList For ready SEND COMPLETE continue");
-
- CompleteXIMPReq( KErrNone );
-
- // Callback for subscription state (terminated).
- MXIMPDataSubscriptionState* myState =
- iConnObs.ObjectFactory().NewDataSubscriptionStateLC();
-
- MXIMPStatus* myStatus = iConnObs.ObjectFactory().NewStatusLC();
-
- // Notice: consider XIMP error codes
- myStatus->SetResultCode( KErrNone );
- myState->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
-
- MProtocolPresentityGroupsDataHost& dataHost =
- iConnObs.ProtocolPresenceHost().GroupsDataHost();
-
- dataHost.SetPresentityGroupListDataSubscriptionStateL(
- myState, myStatus );
-
- dataHost.HandlePresentityGroupListL( coll );
-
- CleanupStack::Pop( 3 ); // >> myState, myStatus, coll
- CleanupStack::Pop( &subscribed );
- DP_SDA("CPresencePluginGroups::GetListOfListsL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::GetListContentL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::GetListContentL()
- {
- DP_SDA("CPresencePluginGroups::GetListContentL");
-
- if( !iPresIdentity->Compare( KPresenceBuddyList ) )
- {
- DP_SDA("CPresencePluginGroups::GetListContentL - get buddies");
- DoGetSubscribedBuddyListL();
-
- // Consider waiting complete for each subscribe before completing
- CompleteXIMPReq( KErrNone );
- }
- else if( !iPresIdentity->Compare( KPresenceSubcribedBuddys ) )
- {
- //Subscribe subscribed buddyes virtual group
- DP_SDA("GetListContentL KPresenceSubcribedBuddys");
- DoGetSubscribedBuddyListL();
- }
- else
- {
- DP_SDA("CPresencePluginGroups::GetListContentL Wrong list name");
- User::Leave( KErrNotFound );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoGetBuddyListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoGetBuddyListL()
- {
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL KPresenceBuddyList");
- MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
- MProtocolPresentityGroupsDataHost& dataHost =
- iConnObs.ProtocolPresenceHost().GroupsDataHost();
-
- MXIMPObjectCollection* entities =
- myFactory.NewObjectCollectionLC(); // << entities
- iXdmUtils->GetEntitiesInListL( iPresIdentity->Des(), *entities );
- DP_SDA("DoGetBuddyListL entities get ready SEND COMPLETE");
-
- // callback for data
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL callback data");
- MXIMPIdentity* id = myFactory.NewIdentityLC(); // << id
- id->SetIdentityL( iPresIdentity->Des() );
- dataHost.HandlePresentityGroupContentL( id, entities );
- CleanupStack::Pop();// >> id
- CleanupStack::Pop();// >> entities
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL callback ready");
-
- // Callback for subscription state (terminated).
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL terminated ");
- id = myFactory.NewIdentityLC(); // << id
- id->SetIdentityL( iPresIdentity->Des() );
- MXIMPDataSubscriptionState* myState =
- myFactory.NewDataSubscriptionStateLC();
- MXIMPStatus* myStatus = myFactory.NewStatusLC();
- // Notice: consider XIMP error codes
- myStatus->SetResultCode( KErrNone );
- myState->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
-
- dataHost.SetPresentityGroupContentDataSubscriptionStateL(
- id, myState, myStatus );
-
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL Pop");
- CleanupStack::Pop( 3 );
-
- DP_SDA("CPresencePluginGroups::DoGetBuddyListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DoGetSubscribedBuddyListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DoGetSubscribedBuddyListL()
- {
- DP_SDA("CPresencePluginGroups::DoGetSubscribedBuddyListL");
- MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
- MProtocolPresentityGroupsDataHost& dataHost =
- iConnObs.ProtocolPresenceHost().GroupsDataHost();
-
- // Get internal list content
- MXIMPObjectCollection* entities =
- myFactory.NewObjectCollectionLC(); // << entities
- iXdmUtils->GetEntitiesInListL( iPresIdentity->Des(), *entities );
- DP_SDA("DoGetBuddyListL entities get ready SEND COMPLETE");
- CleanupStack::PopAndDestroy(); // entities
-
- // start getting virtualEntities
- MXIMPObjectCollection* virtualEntities =
- myFactory.NewObjectCollectionLC();// << virtualEntities
-
- iSubscribedBuddies->GetVirtualEntitiesL( *virtualEntities );
-
- DP_SDA("CPresencePluginGroups::DoGetSubscribedBuddyListL - subscribe all");
- iConnObs.WatcherHandlerL()->SubscribeAllL();
- DP_SDA("CPresencePluginGroups::DoGetSubscribedBuddyListL - subscribe all ok");
-
- // callback for data
- DP_SDA("DoGetSubscribedBuddyListL callback data");
- MXIMPIdentity* id = myFactory.NewIdentityLC(); // << id
- id->SetIdentityL( iPresIdentity->Des() );
- dataHost.HandlePresentityGroupContentL( id, virtualEntities );
- CleanupStack::Pop(); // >> id
- CleanupStack::Pop(); // >> entities
- DP_SDA("DoGetSubscribedBuddyListL callback ready");
-
- // Callback for subscription state (terminated).
- DP_SDA("CPresencePluginGroups::DoGetSubscribedBuddyListL terminated");
- id = myFactory.NewIdentityLC(); // << id
- id->SetIdentityL( iPresIdentity->Des() );
- MXIMPDataSubscriptionState* myState =
- myFactory.NewDataSubscriptionStateLC();
- MXIMPStatus* myStatus = myFactory.NewStatusLC();
- // Notice: consider XIMP error codes
- myStatus->SetResultCode( KErrNone );
- myState->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionActive );
- dataHost.SetPresentityGroupContentDataSubscriptionStateL(
- id, myState, myStatus );
-
- CleanupStack::Pop( 3 );
-
- DP_SDA("DoGetSubscribedBuddyListL - KPresenceOnlineBuddy case end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::CompleteXIMPReq
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::CompleteXIMPReq( TInt aStatus )
- {
- DP_SDA("CPresencePluginGroups::CompleteXIMPReq");
- if ( iCompleted )
- {
- DP_SDA("CPresencePluginGroups::CompleteXIMPReq return");
- return;
- }
-
- iCompleted = ETrue;
- iOperation = ENoOperation;
- iConnObs.CompleteReq( iXIMPId, aStatus );
- iXIMPId = TXIMPRequestId();
- DP_SDA("CPresencePluginGroups::CompleteXIMPReq end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::DeletePersonCacheL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginGroups::DeletePersonCacheL()
- {
- DP_SDA("CPresencePluginGroups::DeletePersonCacheL");
- DP_SDA(" -> strip prefix from uri");
- HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( *iPresIdentity );
- iPresenceData->DeletePresenceL( *withoutPrefix );
- CleanupStack::PopAndDestroy( withoutPrefix );
- DP_SDA("CPresencePluginGroups::DeletePersonCacheL out");
- }
-
-// End of file