diff -r 2b7283837edb -r 3104fc151679 imstutils/imconversationview/imcvuiengine/src/cimcvengineopenchats.cpp --- a/imstutils/imconversationview/imcvuiengine/src/cimcvengineopenchats.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,386 +0,0 @@ -/* -* Copyright (c) 2006 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: Implementation for Open ConversationList -* -*/ - - -// INCLUDE FILES - -#include "cimcvengineopenchats.h" -#include "cimcvenginemessagehandler.h" -#include "mimcvenginechatinterface.h" -#include "mimcvenginemessagecontainerinfo.h" - -#include -#include -#include "imcvuiliterals.h" -#include "imcvlogger.h" - - -// ============================ MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats : Ctor -// -// ----------------------------------------------------------------------------- -// -CIMCVEngineOpenChats::CIMCVEngineOpenChats(CIMCVEngineMessageHandler& aMessageHandler, - MIMCVEngineChatInterface& aChatInterface) : - iActiveItem(-1), - iMessageHandler(aMessageHandler), - iChatInterface(aChatInterface) - { - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats : NewL -// -// ----------------------------------------------------------------------------- -// -CIMCVEngineOpenChats* CIMCVEngineOpenChats::NewL(CIMCVEngineMessageHandler& aMessageHandler, - MIMCVEngineChatInterface& aChatInterface,TInt aServiceId ) - { - CIMCVEngineOpenChats* self = new ( ELeave ) CIMCVEngineOpenChats(aMessageHandler, aChatInterface); - self->ConstructL(aServiceId); - return self; - } - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats : Destructor -// -// ----------------------------------------------------------------------------- -// -CIMCVEngineOpenChats::~CIMCVEngineOpenChats() - { - iChatInterface.UnregisterNewMsgObserver(); - iChatInterface.UnregisterChatListObserver(this); - iOpenChatsArray.Reset(); - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: GetDisplayNameL -// ----------------------------------------------------------------------------- -// -TPtrC CIMCVEngineOpenChats::GetDisplayNameL(TInt aIndex) const - { - if ( (aIndex >= iOpenChatsArray.Count()) || (aIndex <0) ) - { - User::LeaveIfError(KErrArgument); - } - else - { - - MIMCVEngineMessageReadInterface* arrayItem = - (MIMCVEngineMessageReadInterface*) iOpenChatsArray[aIndex]; - - if (arrayItem) - { - return arrayItem->Name(); - } - } - - return TPtrC(KNullDesC); - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: GetTargetIdL -// ----------------------------------------------------------------------------- -// -const TDesC& CIMCVEngineOpenChats::GetTargetIdL(TInt aIndex) const - { - if ( ( aIndex < iOpenChatsArray.Count() ) && (aIndex >= 0 ) ) - { - MIMCVEngineMessageReadInterface* arrayItem = - (MIMCVEngineMessageReadInterface *)iOpenChatsArray[aIndex]; - if (arrayItem) - { - return arrayItem->TargetId().Target(); - } - } - return (KNullDesC); - } - - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: FindIndexL -// ----------------------------------------------------------------------------- -// -TInt CIMCVEngineOpenChats::FindIndexL(const TDesC& aItem) - { - - HBufC* decodedItemId = EscapeUtils::EscapeDecodeL( aItem ); - - // Create custom collation method to ignore punctuations - // index 0 gets the default method - TCollationMethod collation = - *Mem::CollationMethodByIndex( 0 ); - - collation.iFlags |= TCollationMethod::EIgnoreNone; - - for (TInt index=0; indexDes() ); - - // domains are compared only when it is really needed - // check if userid part is the same in both ids - TInt idResult = ptrId1.CompareC( ptrId2, KCollationLevel, &collation ); - - if( !idResult ) - { - delete decodedItemId; - return index; - } - } - - delete decodedItemId; - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: Count -// ----------------------------------------------------------------------------- -// -TInt CIMCVEngineOpenChats::Count() const - { - return iOpenChatsArray.Count(); - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: SetActiveItemL -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::SetActiveItemL( const TInt aIndex ) - { - - if ( (aIndex >= iOpenChatsArray.Count()) || (aIndex <0) ) - { - User::LeaveIfError(KErrArgument); - } - - iActiveItem = aIndex; - - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: GetActiveItem -// ----------------------------------------------------------------------------- -// -const TDesC& CIMCVEngineOpenChats::GetActiveItem() const - { - - if ( (iActiveItem < iOpenChatsArray.Count()) && (iActiveItem >= 0) ) - { - MIMCVEngineMessageReadInterface *arrayItem = - (MIMCVEngineMessageReadInterface *)iOpenChatsArray[iActiveItem]; - if (arrayItem) - { - return arrayItem->TargetId().Target(); - } - } - return (KNullDesC); - - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: IsMsgPendingL -// ----------------------------------------------------------------------------- -// -TBool CIMCVEngineOpenChats::IsMsgPendingL( const TInt aIndex ) const - { - if(aIndex >= (iOpenChatsArray.Count()) || aIndex <0) - { - User::LeaveIfError(KErrArgument); - } - else - { - MIMCVEngineMessageReadInterface *arrayItem = - (MIMCVEngineMessageReadInterface *)iOpenChatsArray[aIndex]; - if (arrayItem) - { - return arrayItem->UnreadCount(); - } - } - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: ConstructL -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::ConstructL( TInt aServiceId ) - { - IM_CV_LOGS(TXT("CIMCVEngineOpenChats ::CONSTRUCTL () ") ); - iChatInterface.RegisterNewMsgObserver( this ); - iChatInterface.RegisterChatListObserver( this ); - - RArray chatItem = iMessageHandler.GetChatListL( aServiceId ); - IM_CV_LOGS(TXT("CIMCVEngineOpenChats :: CHAT ITEMS COUNT %d"), chatItem.Count () ); - - for (int index=0; indexHandleChangeL(iMessageHandler.ServiceId(), iOpenChatsArray.Count()-1, ENewChat) ); - } - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: RemoveL -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::RemoveL( MIMCVEngineMessageReadInterface& aContainerInfo ) - { - TInt index = FindIndexL(aContainerInfo.TargetId().Target()); - - if (KErrNotFound != index) - { - iOpenChatsArray.Remove(index); - iOpenChatsArray.Compress(); - if (iChatObserver) - { - iChatObserver->HandleChangeL(iMessageHandler.ServiceId(), index, EChatClosed); - } - } - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: RegisterObserver -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::RegisterObserver(MIMCVEngineOpenChatsObserver* aChatObserver) - { - iChatObserver = aChatObserver; - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: UnRegisterObserver -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::UnRegisterObserver() - { - iChatObserver = NULL; - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: HandleChatEventL -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::HandleChatEventL( TChatEventType /*aEvent*/, - MIMCVEngineMessage* aMessage /*= NULL*/ ) - { - if (aMessage) - { - TInt index = KErrNotFound; - - index = FindIndexL(aMessage->Recipient()) ; - - if (KErrNotFound != index) - { - MIMCVEngineMessageReadInterface *arrayItem = - (MIMCVEngineMessageReadInterface *)iOpenChatsArray[index]; - if (arrayItem && iChatObserver) - { - TInt serviceId = iMessageHandler.ServiceId(); - iChatObserver->SetStatusMsgL(serviceId, index,aMessage->Text()); - iChatObserver->HandleChangeL(serviceId, index, EUnReadCountChanged); - } - } - } - } - - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: HandleChatListEvent -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::HandleChatListEvent( TInt aServiceId ,TChatListEventType aEvent, - MIMCVEngineMessageReadInterface* aContainerInfo - ) - { - - switch (aEvent) - { - case EChatItemAdded: - { - Insert(aContainerInfo); - break; - } - - case EChatItemDeleted: - { - TRAP_IGNORE(RemoveL(*aContainerInfo)); - break; - } - case EChatAllItemDeleted: - { - // not owns - iOpenChatsArray.Reset(); - if (iChatObserver) - { - TRAP_IGNORE( iChatObserver->HandleChangeL( aServiceId, KErrNotFound, EChatAllClosed ) ); - } - } - default: - break; - } - - } - -// ----------------------------------------------------------------------------- -// CIMCVEngineOpenChats: ResetL -// ----------------------------------------------------------------------------- -// -void CIMCVEngineOpenChats::ResetL() - { - iOpenChatsArray.Reset(); - iActiveItem = -1; - } - -// End of File -