--- a/simpledatamodeladapter/simpleimplugin/src/simpleimconversation.cpp Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,487 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-
-#include <ximpobjectfactory.h>
-#include <imobjectfactory.h>
-#include <simplefactory.h>
-#include <imconversationinfo.h>
-#include <utf.h>
-#include <ximpprotocolconnectionhost.h>
-#include <protocolimdatahost.h>
-#include <protocolimconversationdatahost.h>
-#include <spsettings.h>
-#include <cch.h>
-#include <cimcachefactory.h>
-#include <mimcacheupdater.h>
-
-#include "simpleimconversation.h"
-#include "presenceplugincommon.h"
-#include "mpresencepluginconnectionobs.h"
-#include "simpleimplugindefs.h"
-#include "simpleimlogger.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginGroups::CPresencePluginGroups
-// ---------------------------------------------------------------------------
-//
-CSimpleImConversation::CSimpleImConversation(
- MPresencePluginConnectionObs& aObs, MSimpleConnection& aConn,
- TUint aServiceId ):
- iConnectionObs( &aObs ),
- iConnection( &aConn ),
- iServiceId( aServiceId )
- {
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::NewL
-// ---------------------------------------------------------------------------
-//
-CSimpleImConversation* CSimpleImConversation::NewL(
- MPresencePluginConnectionObs& aObs,
- MSimpleConnection& aConn, TUint aServiceId)
- {
- CSimpleImConversation* self =
- new( ELeave ) CSimpleImConversation ( aObs, aConn, aServiceId );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::ConstructL()
- {
- DP_IMP("CSimpleImConversation::ConstructL")
-
- iImHandler = TSimpleFactory::NewInstantMessageL(
- *iConnection, *this );
-
- iImCacheFactory = CIMCacheFactory::InstanceL();
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::~CSimpleImConversation
-// ---------------------------------------------------------------------------
-//
-CSimpleImConversation::~CSimpleImConversation()
- {
- DP_IMP("CSimpleImConversation::~CSimpleImConversation")
-
- if ( iImHandler )
- {
- DP_IMP("Close the msg handler")
- iImHandler->Close();
- }
-
- // Release the imcache, all the conversation will lost here
- if ( iImCacheFactory )
- {
- DP_IMP("Release IM Cache")
- CIMCacheFactory::Release();
- iImCacheFactory = NULL;
- }
-
- iImCacheUpdater = NULL;
- iHost = NULL;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::SetHost
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::SetHost( MProtocolImDataHost& aHost )
- {
- DP_IMP("CSimpleImConversation::SetHost")
-
- iHost = &aHost;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::GetInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CSimpleImConversation::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions )
- {
- DP_IMP("CSimpleImConversation::GetInterface")
-
- if ( MProtocolImConversation::KInterfaceId == aInterfaceId )
- {
- return this;
- }
-
- if ( MXIMPBase::EPanicIfUnknown == aOptions )
- {
- User::Panic( KSimpleImPluginName, KErrExtensionNotSupported );
- }
-
- return NULL;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::GetInterface() const
-// ---------------------------------------------------------------------------
-//
-const TAny* CSimpleImConversation::GetInterface(
- TInt32 aInterfaceId, TIfGetOps aOptions ) const
- {
- DP_IMP("CSimpleImConversation::GetInterface")
-
- if ( MProtocolImConversation::KInterfaceId == aInterfaceId )
- {
- // caller wants this interface
- return const_cast<CSimpleImConversation*>( this );
- }
-
- if ( MXIMPBase::EPanicIfUnknown == aOptions )
- {
- User::Panic( KSimpleImPluginName, KErrExtensionNotSupported );
- }
-
- return NULL;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::GetInterfaceId() const
-// ---------------------------------------------------------------------------
-//
-TInt32 CSimpleImConversation::GetInterfaceId() const
- {
- DP_IMP("CSimpleImConversation::GetInterfaceId")
-
- return MProtocolImConversation::KInterfaceId;
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoSendMessageL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoSendMessageL(
- const MImConversationInfo& aImMessage,
- TXIMPRequestId aReqId )
- {
- DP_IMP( "CSimpleImConversation::DoSendMessageL" )
-
- iCompleted = EFalse;
-
- TPtrC16 msgText16 = aImMessage.TextMessage();
- DP_IMP2( "CSimpleImConversation::DoSendMessageL, CONTENT: %S",
- &msgText16 )
- HBufC8* contentData = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
- msgText16 );
- CleanupStack::PushL( contentData );
-
- const MDesCArray& recipients = aImMessage.RecipientL();
- for ( TInt i = 0; i < recipients.MdcaCount(); i++ )
- {
- TPtrC16 recipientsPtr16 = recipients.MdcaPoint( i );
- HBufC8* recipientsData = CnvUtfConverter::ConvertFromUnicodeToUtf8L(
- recipientsPtr16 );
- CleanupStack::PushL( recipientsData );
- DP_IMP2( "CSimpleImConversation::DoSendMessageL, RECIPIENT: %S",
- &recipientsPtr16 )
-
- TInt result = iImHandler->SendInstantMessage( *contentData,
- *recipientsData );
- CleanupStack::PopAndDestroy( recipientsData );
-
- if ( KErrInUse == result )
- {
- User::Leave( KErrInUse );
- }
- }
-
- CleanupStack::PopAndDestroy( contentData );
- iXimpId = aReqId;
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoForwardMessageL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoForwardMessageL(
- const MImConversationInfo& /*aImMessage*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoForwardMessageL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoSendMessageToGroupL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoSendMessageToGroupL(
- const MImConversationInfo& /*aImMessage*/,
- const TDesC* /*aGroupId*/, TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoSendMessageToGroupL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoBlockUsersL()
-// ---------------------------------------------------------------------------
-//
-TXIMPRequestId CSimpleImConversation::DoBlockUsersL(
- const MDesCArray* /*aUserIds*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoBlockUsersL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- return TXIMPRequestId();
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoUnBlockUsersL()
-// ---------------------------------------------------------------------------
-//
-TXIMPRequestId CSimpleImConversation::DoUnBlockUsersL(
- const MDesCArray* /*aUserIds*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoUnBlockUsersL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- return TXIMPRequestId();
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoGetBlockedListRequestL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoGetBlockedListRequestL(
- const MXIMPIdentity& /*aImMessageId*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoGetBlockedListRequestL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoGetMessageListL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoGetMessageListL(
- const MXIMPIdentity& /*aImMessageId*/,
- const TDesC* /*aGroupId*/,
- const TInt /*aMessageCount*/,
- TBool /*aDeliveryReportWanted*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoGetMessageListL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MProtocolImConversation.
-// CSimpleImConversation::DoRejectMessageL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoRejectMessageL(
- const MXIMPIdentity& /*aImMessageId*/,
- const TDesC& /*aMessageID*/,
- TXIMPRequestId /*aReqId*/ )
- {
- DP_IMP( "CSimpleImConversation::DoRejectMessageL, NOT SUPPORTED" )
-
- User::Leave( KErrNotSupported );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MSimpleInstantMsgObserver.
-// CSimpleImConversation::SendInstantMsgReqComplete()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::SendInstantMsgReqComplete(
- TInt /*aOpid*/, TInt aStatus)
- {
- DP_IMP("CSimpleImConversation::SendInstantMsgReqComplete")
-
- CompleteXimpReq( aStatus );
- }
-
-
-// ---------------------------------------------------------------------------
-// From MSimpleInstantMsgObserver.
-// CSimpleImConversation::HandleReceiveTextMessage()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::HandleReceiveTextMessage(
- TPtrC8 aFrom, TPtrC8 aContent )
- {
- DP_IMP( "CSimpleImConversation::HandleReceiveTextMessage" )
-
- TRAPD( err, DoHandleReceiveTextMessageL( aFrom, aContent ) )
-
- if ( KErrNone != err )
- {
- // Do nothing
- DP_IMP2( "CSimpleImConversation::HandleReceiveTextMessage, ERROR: %i",
- err )
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::CompleteXimpReq()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::CompleteXimpReq( TInt aStatus )
- {
- DP_IMP( "CSimpleImConversation::CompleteXimpReq" )
-
- if ( iCompleted )
- {
- DP_IMP("CSimpleImConversation::CompleteXimpReq return")
- return;
- }
-
- iCompleted = ETrue;
- iConnectionObs->CompleteReq( iXimpId, aStatus );
- iXimpId = TXIMPRequestId();
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::DoHandleReceiveTextMessageL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::DoHandleReceiveTextMessageL( TPtrC8 aFrom,
- TPtrC8 aContent )
- {
- DP_IMP( "CSimpleImConversation::DoHandleReceiveTextMessageL" )
-
- CreateImCacheUpdaterIfNeededL();
-
- if ( iHost )
- {
- MXIMPObjectFactory& objFact = iConnectionObs->Host()->ObjectFactory();
- MImObjectFactory& imObjFact = iHost->ImObjectFactory();
-
- MXIMPIdentity* identity = objFact.NewIdentityLC(); // CS:1
- MImConversationInfo* convinfo = imObjFact.
- NewImConversationInfoLC(); // CS:2
-
- HBufC16* sendername = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
- aFrom );
- CleanupStack::PushL( sendername ); // CS:3
- identity->SetIdentityL( *sendername );
- CleanupStack::PopAndDestroy( sendername ); // CS:2
- convinfo->SetMessageIdL( identity );
-
- HBufC16* messagecontent = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
- aContent );
- CleanupStack::PushL( messagecontent ); // CS:3
- convinfo->SetTextMessageL( *messagecontent );
- CleanupStack::PopAndDestroy( messagecontent ); // CS:2
-
- iHost->ConversationDataHost().HandleNewTextMessageL( convinfo );
- TRAP_IGNORE( iImCacheUpdater->AppendReceiveMessageL(
- identity->Identity(), convinfo->TextMessage() ) );
-
- CleanupStack::Pop(); // CS:1
- CleanupStack::Pop(); // CS:0
- }
- else
- {
- DP_IMP( " --> PROTOCOL IM DATA HOST IS NULL!" )
- }
- }
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::ResolveUsernameL
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::ResolveUsernameL(
- TUint aServiceId, RBuf& aUserName ) const
- {
- DP_IMP( "CSimpleImConversation::ResolveUsernameL" )
-
- CCch* cchApi = CCch::NewLC();
- CCchService* service = cchApi->GetService( aServiceId );
-
- User::LeaveIfError( service->GetConnectionParameter(
- ECCHUnknown, ECchUsername, aUserName ) );
-
- DP_IMP2( "CSimpleImConversation::ResolveUsernameL, USERNAME: %S",
- &aUserName )
-
- CleanupStack::PopAndDestroy( cchApi );
- }
-
-
-// ---------------------------------------------------------------------------
-// CSimpleImConversation::CreateImCacheUpdaterIfNeededL()
-// ---------------------------------------------------------------------------
-//
-void CSimpleImConversation::CreateImCacheUpdaterIfNeededL()
- {
- if ( !iImCacheUpdater )
- {
- DP_IMP( "CSimpleImConversation::CreateImCacheUpdaterIfNeededL," )
- DP_IMP( "CREATING UPDATER" )
-
- RBuf username;
- CleanupClosePushL( username );
- const TInt KMaxUserNameLength = 255;
- username.CreateL( KMaxUserNameLength );
- ResolveUsernameL( iServiceId, username );
-
- iImCacheUpdater =
- iImCacheFactory->CreateUpdaterL( iServiceId, username, EFalse );
- CleanupStack::PopAndDestroy( &username );
- }
- }
-
-// End of file