--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imservices/ossprotocoladaptation/src/cosscontactmanager.cpp Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2007-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: contact manager
+*
+*/
+
+#include "cosscontactmanager.h"
+#include "mossprotocolconnectionmanager.h"
+
+#include <ximpobjectfactory.h>
+#include <ximpprotocolconnectionhost.h>
+#include <ximpidentity.h>
+#include <ximpobjectcollection.h>
+#include <presenceobjectfactory.h>
+#include <protocolpresencedatahost.h>
+#include <protocolpresentitygroupsdatahost.h>
+#include <presentitygroupinfo.h>
+#include <presentitygroupmemberinfo.h>
+#include <presencegrantrequestinfo.h>
+#include <protocolpresenceauthorizationdatahost.h>
+#include <mpresencebuddyinfo2.h>
+#include <presencecachewriter2.h>
+#include <avabilitytext.h>
+#include "cossprotocolconnectionmanager.h"
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::COSSContactManager()
+// ---------------------------------------------------------------------------
+//
+COSSContactManager::COSSContactManager(MOSSProtocolConnectionManager& aConnMan):
+ iConnMan ( aConnMan )
+ {
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::ConstructL()
+ {
+ iFetchContactsFirstTime = EFalse;
+ iFetchInvitationsFirstTime = EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::NewL()
+// ---------------------------------------------------------------------------
+//
+COSSContactManager* COSSContactManager::NewL(MOSSProtocolConnectionManager& aConnMan)
+ {
+
+ COSSContactManager* self = new ( ELeave )COSSContactManager(aConnMan);
+
+ CleanupStack::PushL ( self );
+
+ self->ConstructL();
+ CleanupStack::Pop ( self );
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::~COSSProtocolConnectionManager()
+// ---------------------------------------------------------------------------
+//
+COSSContactManager::~COSSContactManager()
+ {
+ iContacts.ResetAndDestroy();
+ iInvitationList.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::IsFetchForFirstTime()
+// ---------------------------------------------------------------------------
+//
+TBool COSSContactManager::IsFetchContactsFirstTime()
+ {
+ return iFetchContactsFirstTime;
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::IsFetchInvitationsForFirstTime()
+// ---------------------------------------------------------------------------
+//
+TBool COSSContactManager::IsFetchInvitationsForFirstTime()
+ {
+ return iFetchInvitationsFirstTime;
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::SetFetchForFirstTime()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::SetFetchContactsFirstTime(TBool aValue)
+ {
+ iFetchContactsFirstTime = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::SetFetchInvitationsForFirstTime()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::SetFetchInvitationsForFirstTime(TBool aValue)
+ {
+ iFetchInvitationsFirstTime = aValue;
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::GetContactsListL()
+// ---------------------------------------------------------------------------
+//
+RPointerArray<HBufC>& COSSContactManager::GetContactsListL()
+ {
+ return iContacts;
+ }
+// ---------------------------------------------------------------------------
+// COSSContactManager::GetInvitationListL()
+// ---------------------------------------------------------------------------
+//
+RPointerArray<HBufC>& COSSContactManager::GetInvitationListL()
+ {
+ return iInvitationList;
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::ReturnContactsListL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::ReturnInvitationListL()
+ {
+ MXIMPObjectFactory& prfwObjFact = iConnMan.HandleToHost().ObjectFactory();
+
+ MPresenceObjectFactory& prObjFact = iConnMan.HandleToHost().ProtocolPresenceDataHost().PresenceObjectFactory();
+
+ MXIMPIdentity* AuthReqIdentity = NULL ;
+ MPresenceGrantRequestInfo* presenceGrant = NULL;
+
+ MXIMPObjectCollection* listOfInvitations = prfwObjFact.NewObjectCollectionLC();
+
+ for ( TInt i = 0; i<iInvitationList.Count(); i++ )
+ {
+ presenceGrant = prObjFact.NewPresenceGrantRequestInfoLC();//1
+ AuthReqIdentity = prfwObjFact.NewIdentityLC();//2
+ AuthReqIdentity->SetIdentityL(*(iInvitationList[ i ] ));
+ iInvitationList[i]->Des().Fold();
+ presenceGrant->SetRequestorIdL(AuthReqIdentity);
+ listOfInvitations->AddObjectL( presenceGrant );
+ CleanupStack::Pop ( 2 );//presenceGrant, AuthReqIdentity
+ }
+
+ iConnMan.HandleToHost().ProtocolPresenceDataHost().AuthorizationDataHost().HandlePresenceGrantRequestListL( listOfInvitations );
+ CleanupStack::Pop ( 1 );//listOfInvitations
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::ReturnContactsListL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::ReturnContactsListL()
+ {
+ MXIMPObjectFactory& prfwObjFact = iConnMan.HandleToHost().ObjectFactory();
+
+ MPresenceObjectFactory& prObjFact = iConnMan.HandleToHost().ProtocolPresenceDataHost().PresenceObjectFactory();
+
+ MXIMPIdentity* contactIdentity = NULL;
+ MPresentityGroupMemberInfo* groupMemberInfo = NULL;
+
+ MXIMPObjectCollection* listOfContacts = prfwObjFact.NewObjectCollectionLC();
+ for(TInt i = 0;i<iContacts.Count();i++)
+ {
+ contactIdentity = prfwObjFact.NewIdentityLC();
+ groupMemberInfo = prObjFact.NewPresentityGroupMemberInfoLC();
+ contactIdentity->SetIdentityL ( *(iContacts[ i ] ));
+ groupMemberInfo->SetGroupMemberIdL ( contactIdentity );
+ groupMemberInfo->SetGroupMemberDisplayNameL ( *(iContacts[ i ] ) );
+ listOfContacts->AddObjectL ( groupMemberInfo );
+ CleanupStack::Pop ( 2 );//groupMemberInfo, contactIdentity
+ }
+ MXIMPIdentity* groupIdentity = prfwObjFact.NewIdentityLC();
+ groupIdentity->SetIdentityL ( iConnMan.GroupId() );
+ iConnMan.HandleToHost().ProtocolPresenceDataHost().GroupsDataHost().HandlePresentityGroupContentL ( groupIdentity, listOfContacts );
+ CleanupStack::Pop ( 2 );//groupIdentity,listOfContacts
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::RemoveContactFromLocalL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::RemoveContactFromLocalL(const TDesC& aContactName)
+ {
+ HBufC* contactName = aContactName.AllocLC();
+ MXIMPObjectFactory& ximpObjFact = iConnMan.HandleToHost().ObjectFactory();
+ MXIMPIdentity* contactIdentity = ximpObjFact.NewIdentityLC();
+ MXIMPIdentity* groupIdentity = ximpObjFact.NewIdentityLC();
+ groupIdentity->SetIdentityL ( iConnMan.GroupId());
+ contactIdentity->SetIdentityL(*contactName);
+ //removing from the local copy of the contacts
+ for(TInt i = 0; i<iContacts.Count(); i++)
+ {
+ if (!contactName->Compare(*(iContacts[i])))
+ {
+ iContacts.Remove( i );
+ //give info after removing. to ximp fw and client
+ iConnMan.HandleToHost().ProtocolPresenceDataHost().GroupsDataHost().HandlePresentityGroupMemberRemovedL ( groupIdentity, contactIdentity );
+ break;
+ }
+ }
+ CleanupStack::Pop( 2 ); // contactIdentity , groupIdentity
+ CleanupStack::PopAndDestroy( 1 ); //contactName
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::AddContactToLocalL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::AddContactToLocalL(const TDesC& aContactName)
+ {
+ HBufC* contactName = aContactName.AllocLC();
+ MXIMPObjectFactory& ximpObjFact = iConnMan.HandleToHost().ObjectFactory();
+ MXIMPIdentity* contactIdentity = ximpObjFact.NewIdentityLC();
+ MXIMPIdentity* groupIdentity = ximpObjFact.NewIdentityLC();
+ groupIdentity->SetIdentityL ( iConnMan.GroupId());
+ contactIdentity->SetIdentityL(*contactName);
+ iContacts.AppendL(contactName);
+ groupIdentity->SetIdentityL ( iConnMan.GroupId());
+ contactIdentity->SetIdentityL(*contactName);
+ MPresentityGroupMemberInfo* groupMemberInfo = iConnMan.HandleToHost().ProtocolPresenceDataHost().PresenceObjectFactory().NewPresentityGroupMemberInfoLC();
+ groupMemberInfo->SetGroupMemberIdL ( contactIdentity );
+ groupMemberInfo->SetGroupMemberDisplayNameL ( *contactName );
+ iConnMan.HandleToHost().ProtocolPresenceDataHost().GroupsDataHost().HandlePresentityGroupMemberAddedL ( groupIdentity, groupMemberInfo );
+
+ //set presence as pending for the added contact
+ MPresenceBuddyInfo2* buddyPresInfo = MPresenceBuddyInfo2::NewLC();
+
+ MPresenceCacheWriter2* presenceCacheWriter = MPresenceCacheWriter2::CreateWriterL();
+ CleanupDeletePushL(presenceCacheWriter);
+ HBufC* name = HBufC::NewLC( aContactName.Length() + iConnMan.ServiceName().Length() + KColon().Length() );
+ TPtr namePtr( name->Des() );
+ namePtr.Zero();
+ namePtr.Append(iConnMan.ServiceName() ); // prepend service name
+ namePtr.Append(KColon);
+ namePtr.Append(aContactName );
+ buddyPresInfo->SetIdentityL(namePtr);
+ buddyPresInfo->SetAnyFieldL(KExtensionKey,KPendingRequestExtensionValue());
+ CleanupStack::PopAndDestroy(1);//name
+
+ // Writing into Presence Cache
+ TInt cacheerror = presenceCacheWriter->WritePresenceL(buddyPresInfo);
+ User::LeaveIfError ( cacheerror);
+ CleanupStack::PopAndDestroy(2);//presenceCacheWriter,buddyPresInfo
+ CleanupStack::Pop( 4 ); // contactName, contactIdentity , groupIdentity , groupMemberInfo
+ }
+
+// ---------------------------------------------------------------------------
+// COSSContactManager::RemoveInvitationFromLocalL()
+// ---------------------------------------------------------------------------
+//
+void COSSContactManager::RemoveInvitationFromLocalL(const TDesC& aContactName)
+ {
+ MXIMPObjectFactory& ObjFact = iConnMan.HandleToHost().ObjectFactory();
+ MPresenceObjectFactory& prfwObjFact = iConnMan.HandleToHost().ProtocolPresenceDataHost().PresenceObjectFactory();
+ MXIMPIdentity* authReqIdentity = ObjFact.NewIdentityLC();//1
+ if( authReqIdentity )
+ {
+ authReqIdentity->SetIdentityL(aContactName);
+ for(TInt i = 0; i<iInvitationList.Count(); i++)
+ {
+ HBufC* findInvitation = iInvitationList[i];
+ if ( findInvitation && !aContactName.Compare( *findInvitation) )
+ {
+ iInvitationList.Remove( i );
+ delete findInvitation;
+ findInvitation = NULL;
+ iInvitationList.Compress();
+ iConnMan.HandleToHost().ProtocolPresenceDataHost().AuthorizationDataHost().HandlePresenceGrantRequestObsoletedL(authReqIdentity);
+ CleanupStack::Pop(); //AuthReqIdentity
+ return;
+ }
+ }
+ CleanupStack::PopAndDestroy(); //AuthReqIdentity
+ }
+ }
+// End of File
+
+