diff -r 2b7283837edb -r 3104fc151679 servicewidget/servicewidgetdatapublisher/src/cservicewidgetpresencehandler.cpp --- a/servicewidget/servicewidgetdatapublisher/src/cservicewidgetpresencehandler.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,642 +0,0 @@ -/* -* Copyright (c) 2008 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: presene status handler - * - * -*/ - - -#include "cservicewidgetpresencehandler.h" - -#include "cservicewidgetbuddypresence.h" -#include "servicewidgetcpglobals.h" -#include "mservicewidgetobservers.h" -#include "cservicewidgetimagedecoder.h" -#include "swpdebugtrace.h" -//ximp includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include //Presence info test -#include -#include -#include - -//ximpfw presence cache -#include // cache reader -#include -#include -#include -#include -#include -#include -#include -//presencecache event handler. -#include -#include - -#include - -#include "vimpstcustomcleanupapi.h" //For customized cleanup function - -_LIT( KListNameAllBuddy ,"buddylist" ); -const TInt KUriMaxLength = 255; -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler -// --------------------------------------------------------------------------- -// -CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler(MServiceWidgetPresenceObserver& aPresenceObserver ) - :iPresenceObserver( aPresenceObserver ), - iTotalCount( 0 ), - iOperationId( EWSOperationUnknown ), - iOwnStatus( EWSOnline ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CServiceWidgetPresenceHandler()") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::NewL -// --------------------------------------------------------------------------- -// -CServiceWidgetPresenceHandler* CServiceWidgetPresenceHandler::NewL(MServiceWidgetPresenceObserver& aPresenceObserver, - const TDesC& aServiceName, - const TDesC& aOwnId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewL() start") ); - CServiceWidgetPresenceHandler* self = NewLC(aPresenceObserver, aServiceName, aOwnId ); - CleanupStack::Pop(self); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewL() end") ); - return self; - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::NewLC -// --------------------------------------------------------------------------- -// -CServiceWidgetPresenceHandler* CServiceWidgetPresenceHandler::NewLC(MServiceWidgetPresenceObserver& aPresenceObserver, - const TDesC& aServiceName, - const TDesC& aOwnId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewLC() start") ); - CServiceWidgetPresenceHandler* self = - new (ELeave) CServiceWidgetPresenceHandler(aPresenceObserver); - CleanupStack::PushL(self); - self->ConstructL( aServiceName, aOwnId ); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::NewLC() end") ); - return self; - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::ConstructL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::ConstructL(const TDesC& aServiceName,const TDesC& aOwnId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() start") ); - iServiceName = aServiceName.AllocL(); - iOwnUserId = aOwnId.AllocL(); - iClient = MXIMPClient::NewClientL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iClient created") ); - //Create new sink to receive ximp context events - iPresenceCtx = iClient->NewPresenceContextLC(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iPresenceCtx created") ); - iFeatures = MPresenceFeatures::NewL(iPresenceCtx); - iAcceptedEventTypes.Reset(); - iAcceptedEventTypes.AppendL( MXIMPRequestCompleteEvent::KInterfaceId ); - iAcceptedEventTypes.AppendL( MXIMPContextStateEvent::KInterfaceId ); - iAcceptedEventTypes.AppendL( MPresentityGroupContentEvent::KInterfaceId ); - iAcceptedEventTypes.AppendL( MPresenceGrantRequestListEvent::KInterfaceId ); - TArray< TInt32 > eventFilterArray = iAcceptedEventTypes.Array(); - // register this to prsence context - iPresenceCtx->RegisterObserverL( *this, &eventFilterArray ); - // ignore code scanner warning, it gives panic - CleanupStack::Pop();// because of LC method - //initialize the presence cache. - iPresenceCacheReader = MPresenceCacheReader2::CreateReaderL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() iPresenceCacheReader created") ); - iPresenceCacheReader->SetObserverForSubscribedNotifications(this); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConstructL() end") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler -// --------------------------------------------------------------------------- -// -CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler() start") ); - iAcceptedEventTypes.Reset(); - iOnlineBuddyArray.ResetAndDestroy(); - delete iServiceName; - delete iOwnUserId; - delete iPresenceCacheReader; - delete iFeatures; - if(iPresenceCtx) - { - iPresenceCtx->UnregisterObserver( *this ); - delete iPresenceCtx; - } - delete iClient; - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::~CServiceWidgetPresenceHandler() end") ); - } - -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::GetConnectedSessionL -// -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::GetConnectedSessionL(TInt aProtocolUid,TInt aServiceId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetConnectedSessionL() start") ); - iOperationId = EWSOperationBind; - iPresenceCtx->BindToL( TUid::Uid( aProtocolUid), aServiceId ) ; - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetConnectedSessionL() end") ); - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::GetCompletedReqResult -// -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::ReleaseConnectionL() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReleaseConnectionL() start") ); - iPresenceCtx->UnbindL() ; - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReleaseConnectionL() end") ); - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::SubscribePresenceL -// -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::SubscribePresenceL( const TDesC& aUserId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribePresenceL() start") ); - __ASSERT_ALWAYS( aUserId.Length(), User::Leave( KErrArgument ) ); - //if anything is there with colon e.g. sip:user@presence1. strip the part before : - TInt len = aUserId.Find(_L(":")); - TPtrC buddyId = aUserId.Right( aUserId.Length() - len - KColon().Length() ); - - HBufC* name = HBufC::NewLC( buddyId.Length() + iServiceName->Length() + KColon().Length() ); - TPtr namePtr( name->Des() ); - namePtr.Zero(); - // append the service name followed by user id ,seperated by colon - namePtr.Append(*iServiceName); - namePtr.Append(KColon); - namePtr.Append(buddyId); - iPresenceCacheReader->SubscribePresenceBuddyChangeL( *name ); - CleanupStack::PopAndDestroy(); // name - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribePresenceL() end") ); - } - - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::RetrieveSubscribedListL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::RetrieveSubscribedListL() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::RetrieveSubscribedListL() start") ); - iOperationId = EWSOperationFetching; - //Create group id - TBuf buffer( KListNameAllBuddy ); - MXIMPIdentity* groupList = iPresenceCtx->ObjectFactory().NewIdentityLC(); - __ASSERT_ALWAYS( groupList , User::Leave( KErrNoMemory ) ); - groupList->SetIdentityL( buffer ); - //Subscribe buddy list - TXIMPRequestId operationId = TXIMPRequestId::Null(); - __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ) ) ; - MPresentityGroups& groups = iFeatures->PresentityGroups() ; - groups.SubscribePresentityGroupContentL( *groupList ); - CleanupStack::PopAndDestroy(); // groupList - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::RetrieveSubscribedListL() end") ); - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::ReadPresenceFromCacheL -// -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::ReadPresenceFromCacheL() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReadPresenceFromCache() start") ); - iOnlineBuddyArray.ResetAndDestroy(); - __ASSERT_ALWAYS( iServiceName, User::Leave( KErrArgument ) ); - // passed the service id to see the member count - iPresenceCacheReader->BuddyCountInService(*iServiceName); - // passed the service to register for notification - iPresenceCacheReader->AllBuddiesPresenceInService(*iServiceName, this ); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ReadPresenceFromCache() end") ); - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::SubscribeForAuthorizationL -// -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::SubscribeForAuthorizationL() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribeForAuthorizationL() start") ); - __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ) ) ; - MPresenceAuthorization& authorization = iFeatures->PresenceAuthorization(); - __ASSERT_ALWAYS( &authorization, User::Leave( KErrNotSupported ) ); - authorization.SubscribePresenceGrantRequestListL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::SubscribeForAuthorizationL() end") ); - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::OnlineBuddyCount -// -// --------------------------------------------------------- -TInt CServiceWidgetPresenceHandler::OnlineBuddyCount() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::OnlineBuddyCount()") ); - return iOnlineBuddyArray.Count(); - } - -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::AllBuddyCount -// -// --------------------------------------------------------- -TInt CServiceWidgetPresenceHandler::AllBuddyCount() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::AllBuddyCount()") ); - return iTotalCount; - } -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::GetInviteCountsL -// -// --------------------------------------------------------- -TInt CServiceWidgetPresenceHandler::GetInviteCounts() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetInviteCountsL()") ); - return iInvitationCount; - } - - // --------------------------------------------------------- -// CServiceWidgetPresenceHandler::GetOwnStatusL -// -// --------------------------------------------------------- -TWSPresenceStatus CServiceWidgetPresenceHandler::GetOwnStatus() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetOwnStatusL()") ); - // get the avatar image if not return the default image - return iOwnStatus; - } - -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::GetOwnStatusL -// -// --------------------------------------------------------- -TWServiceOperationId CServiceWidgetPresenceHandler::GetOngoingOperationId() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::GetOngoingOperationId()") ); - // get the state of ongoing operation - return iOperationId; - } - -// --------------------------------------------------------- -// CServiceWidgetPresenceHandler::HandlePresenceContextEvent -// --------------------------------------------------------- -void CServiceWidgetPresenceHandler::HandlePresenceContextEvent( - const MXIMPContext& /*aContext*/, - const MXIMPBase& aEvent ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceContextEvent() start") ); - switch( aEvent.GetInterfaceId() ) - { - case MXIMPRequestCompleteEvent::KInterfaceId: - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler:: MXIMPRequestCompleteEvent ") ); - const MXIMPRequestCompleteEvent* complEvent = - TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From( - aEvent, MXIMPBase::EPanicIfUnknown ); - TXIMPRequestId reqId = complEvent->RequestId(); - const MXIMPStatus& status = complEvent->CompletionResult() ; - TInt reqResult = complEvent->CompletionResult().ResultCode(); - if( iOperationId == EWSOperationBind && reqResult == KErrNone ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::login completed ") ); - iOwnStatus = EWSOnline; - TRAP_IGNORE(DoHandleBindCompleteL()) ; - } - break; - } - case MPresentityGroupContentEvent::KInterfaceId: - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::MPresentityGroupContentEvent ") ); - TRAP_IGNORE(DoHandlePresentityGroupContentEventL( aEvent )) ; - break; - } - case MPresenceGrantRequestListEvent::KInterfaceId: - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler:: MPresenceGrantRequestListEvent ") ); - TRAP_IGNORE(DoHandlePresenceGrantRequestListEventL(aEvent )) ; - break; - } - default: - { - break; - } - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceContextEvent() end") ); - } -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::HandlePresenceNotificationL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::HandlePresenceNotificationL(TInt /*aErrorCode*/, - MPresenceBuddyInfo2* aPresenceBuddyInfo) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() start") ); - if ( aPresenceBuddyInfo) - { - // we have the ownership of aPresenceBuddyInfo ; Push into cleanup stack - CleanupDeletePushL( aPresenceBuddyInfo ); - if (iServiceName ) - { - // read the buddyID : returns in XSP format - TPtrC buddyXSPId = aPresenceBuddyInfo->BuddyId(); - TPtrC buddyId = buddyXSPId.Right( buddyXSPId.Length() - iServiceName->Length() - KColon().Length()); - // read the availability /presence state enum value - MPresenceBuddyInfo2::TAvailabilityValues availabilityEnum = aPresenceBuddyInfo->Availability(); - TPtrC avablityText = aPresenceBuddyInfo->AvailabilityText(); - // convert the presence cache enum value to service tab enum - TWSPresenceStatus status = ConvertPresenceCacheEnums( availabilityEnum, avablityText ); - - TPtrC statusMsg = aPresenceBuddyInfo->StatusMessage(); // read the status message - TBool isOwnId = buddyId.Compare(*iOwnUserId) ? EFalse : ETrue ; - - if( isOwnId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() own status change") ); - iOwnStatus = status; - iPresenceObserver.HandleOwnStatusChangeL( iOwnStatus ); - } - else - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() buddy status change") ); - CheckAndCacheBuddyAvailabilityL( buddyId, status ); - iPresenceObserver.HandleBuddyPresenceChangeL(buddyId, status, statusMsg ); - } - } - CleanupStack::PopAndDestroy(); // aPresenceBuddyInfo - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceNotificationL() end") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::HandlePresenceReadL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::HandlePresenceReadL(TInt /*aErrorCode*/, - RPointerArray& aPresenceBuddyInfoList) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() start") ); - iOnlineBuddyArray.ResetAndDestroy(); // rest and destroy old data - // we have the ownership of aPresenceBuddyInfoList : Push it to customize cleanupstack - // aPresenceBuddyInfoList is collection of owned object and each object need to be deleted - CustomCleanupResetAndDestroyPushL(aPresenceBuddyInfoList); - - TInt buddyCount = aPresenceBuddyInfoList.Count(); - for ( TInt i =0 ; i < buddyCount && iServiceName; ++i ) - { - MPresenceBuddyInfo2* buddyinfo = aPresenceBuddyInfoList[i]; - // read the buddyID : returns in XSP format - TPtrC buddyXSPId = buddyinfo->BuddyId(); - TPtrC buddyId = buddyXSPId.Right( buddyXSPId.Length() - iServiceName->Length() - KColon().Length()); - // read the availability /presence state enum value - MPresenceBuddyInfo2::TAvailabilityValues availabilityEnum = buddyinfo->Availability(); - TPtrC avablityText = buddyinfo->AvailabilityText(); - // convert the presence cache enum value to service tab enum - TWSPresenceStatus status = ConvertPresenceCacheEnums( availabilityEnum,avablityText ); - //compare if its for own user id - TBool isOwnId = buddyId.Compare(*iOwnUserId) ? EFalse : ETrue ; - if( isOwnId ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() own status change") ); - iOwnStatus = status; - iPresenceObserver.HandleOwnStatusChangeL( iOwnStatus ); - } - else - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() buddy status change") ); - CheckAndCacheBuddyAvailabilityL( buddyId, status ); - } - } - CleanupStack::PopAndDestroy(); // aPresenceBuddyInfoList, calls LocalResetAndDestroy - iPresenceObserver.HandleChangeL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::HandlePresenceReadL() end") ); - } - - // --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::DoHandleBindCompleteL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::DoHandleBindCompleteL() - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandleBindCompleteL() start") ); - __ASSERT_ALWAYS( iOwnUserId, User::Leave( KErrArgument ) ); - SubscribePresenceL(*iOwnUserId); - iInvitationCount = 0; - SubscribeForAuthorizationL(); - // get the list. - RetrieveSubscribedListL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandleBindCompleteL() end") ); - } -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler:: DoHandlePresentityGroupContentEventL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL( const MXIMPBase& aEvent ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL() start") ); - const MPresentityGroupContentEvent& event = *TXIMPGetInterface< - const MPresentityGroupContentEvent >::From(aEvent,MXIMPBase::EPanicIfUnknown ); - TInt newCount = event.NewMembersCount(); - TInt disapCount = event.DisappearedMembersCount(); - - iTotalCount = iTotalCount + newCount; - iTotalCount = iTotalCount - disapCount; - if( iTotalCount <0 ) - { - // if total count becomes < 0 assign to 0 - iTotalCount = 0; - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler iTotalCount %d "), iTotalCount ); - HBufC* groupId = event.GroupId().Identity().AllocLC(); - if ( groupId && !groupId->Compare( KListNameAllBuddy ) ) - { - for( TInt i =0; i < newCount; i++ ) - { - const MPresentityGroupMemberInfo& subscribedEntitys = event.NewMember(i); - const MXIMPIdentity& ident = subscribedEntitys.GroupMemberId(); - HBufC* buddy = ident.Identity().AllocLC(); - if( buddy ) - { - SubscribePresenceL(*buddy); - CleanupStack::PopAndDestroy( buddy ); - } - } - } - if( groupId) - { - CleanupStack::PopAndDestroy( groupId ); - } - iOperationId = EWSOperationComplete; - iPresenceObserver.HandleChangeL(); - ReadPresenceFromCacheL(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresentityGroupContentEventL() end") ); - } -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler:: DoHandlePresenceGrantRequestListEventL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL( const MXIMPBase& aEvent ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL() start") ); - const MPresenceGrantRequestListEvent& event = *TXIMPGetInterface< const MPresenceGrantRequestListEvent >::From( - aEvent, MXIMPBase::EPanicIfUnknown ); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler iInvitationCount %d"), iInvitationCount ); - TInt newcount = event.NewRequestsCount(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler newcount %d"), newcount ); - TInt disapearCount = event.DisappearedRequestsCount(); - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::disapearCount %d "), disapearCount); - if(newcount) - { - iInvitationCount++; // one more inviation recieved - TRACE_SWP(TXT("CServiceWidgetPresenceHandler new invitation ,iInvitationCount %d"), iInvitationCount ); - const MPresenceGrantRequestInfo& reqInfo = event.NewRequest ( 0 );// its always a new request - HBufC* requesterId = reqInfo.RequestorId().Identity().AllocLC(); - if( requesterId ) - { - iPresenceObserver.HandleAddRequestL( *requesterId ); - CleanupStack::PopAndDestroy( requesterId ); - } - } - else if( disapearCount ) - { - iInvitationCount--; - if( iInvitationCount <0 ) - { - // if <0 assign to 0 - iInvitationCount = 0; - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler accept/decline ,iInvitationCount %d"), iInvitationCount ); - // there is some count changes - iPresenceObserver.HandleChangeL(); - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::DoHandlePresenceGrantRequestListEventL() end") ); - } - -// --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::ConvertXimpToClientPresenceStatus -// --------------------------------------------------------------------------- -// -TWSPresenceStatus CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums( MPresenceBuddyInfo2::TAvailabilityValues aAvailabilityEnum,TPtrC aAvabilityText) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums() start") ); - TWSPresenceStatus status = EWSUnknown ; - switch( aAvailabilityEnum ) - { - case MPresenceBuddyInfo2::EBusy: - { - status = EWSbusy; - if(0==aAvabilityText.Compare(KAwayState)) - { - status = EWSAway; - } - if(0==aAvabilityText.Compare(KOnPhoneState)) - { - status = EWSOnPhone; - } - if(0==aAvabilityText.Compare(KDndState)) - { - status = EWSDoNotDisturb; - } - break; - } - case MPresenceBuddyInfo2::EAvailable: - { - status = EWSOnline; - break; - } - case MPresenceBuddyInfo2::ENotAvailable: - { - status = EWSOffline; - break; - } - case MPresenceBuddyInfo2::EUnknownAvailability: - { - status = EWSUnknown; - if(0==aAvabilityText.Compare(KInvisibleState)) - { - status = EWSInvisible; - } - break; - } - default: - { - status = EWSUnknown; - break; - } - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::ConvertPresenceCacheEnums() end") ); - return status; - } - // --------------------------------------------------------------------------- -// CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL -// --------------------------------------------------------------------------- -// -void CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL( const TDesC& aUserId, TWSPresenceStatus aStatus ) - { - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL() start") ); - TBool needToAdd = ETrue; - TInt count = iOnlineBuddyArray.Count(); - for( TInt i=0; iBuddyId() ) == 0 ) - { - if( aStatus == EWSUnknown || aStatus == EWSOffline ) - { - // went offline remove from array - iOnlineBuddyArray.Remove( i ); // do not use agian the loop ,may cuase to crash - delete store; - store = NULL; - iOnlineBuddyArray.Compress(); - } - else - { - store->SetPresenceStatus( aStatus ); - } - needToAdd = EFalse; - break; // break the loop - } - } - if( needToAdd && ( aStatus != EWSUnknown ) && ( aStatus != EWSOffline ) ) - { - // add only availabe buddies to list - CServiceWidgetBuddyPresence* store = CServiceWidgetBuddyPresence::NewL( aUserId, aStatus ); - iOnlineBuddyArray.Append(store); // ownership given to array - } - TRACE_SWP(TXT("CServiceWidgetPresenceHandler::CheckAndCacheBuddyAvailabilityL() end") ); - } - -// end of file