--- a/uiservicetab/vimpstengine/src/cvimpstengineimsubservice.cpp Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,630 +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: Class that capsulates single service data members
-*
-*/
-
-
-// INCLUDES
-#include "cvimpstengineimsubservice.h"
-
-#include "cvimpstenginecchhandler.h"
-#include "cvimpstengineservicetablefetcher.h"
-#include "mvimpstengineimsubserviceeventobserver.h"
-#include "mvimpstengineserviceconnectioneventobserver.h"
-
-#include <e32std.h>
-#include <barsc.h>
-#include <gulutil.h>
-#include <coemain.h>
-#include <e32base.h>
-
-#include "tvimpstconsts.h"
-
-// imcache related headers
-#include "cimcachefactory.h"
-#include "mimcacheaccessor.h"
-
-#include "uiservicetabtracer.h"
-
-//system includes
-#include <e32property.h>
-
-// ================= MEMBER FUNCTIONS =======================
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::NewL
-//
-// ---------------------------------------------------------
-CVIMPSTEngineIMSubService* CVIMPSTEngineIMSubService::NewL(
- TUint aServiceId,
- CVIMPSTEngineCchHandler& aCchHandler,
- CVIMPSTEngineServiceTableFetcher& aTableFetcher,
- MVIMPSTEngineServiceConnectionEventObserver& aObserver
- )
- {
- TRACER_AUTO;
- TRACE( "ServiceId: %d", aServiceId );
-
- CVIMPSTEngineIMSubService* self = CVIMPSTEngineIMSubService::NewLC(
- aServiceId,
- aCchHandler,
- aTableFetcher,
- aObserver );
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::NewLC
-//
-// ---------------------------------------------------------
-
-CVIMPSTEngineIMSubService* CVIMPSTEngineIMSubService::NewLC(
- TUint aServiceId,
- CVIMPSTEngineCchHandler& aCchHandler,
- CVIMPSTEngineServiceTableFetcher& aTableFetcher,
- MVIMPSTEngineServiceConnectionEventObserver& aObserver
- )
- {
- TRACER_AUTO;
- TRACE( "ServiceId: %d", aServiceId );
-
- CVIMPSTEngineIMSubService* self = new (ELeave) CVIMPSTEngineIMSubService(aServiceId,
- aCchHandler, aTableFetcher,
- aObserver );
- CleanupStack::PushL( self );
- self->ConstructL();
-
- return self;
- }
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::~CVIMPSTEngineIMSubService
-//
-// ---------------------------------------------------------
-
-CVIMPSTEngineIMSubService::~CVIMPSTEngineIMSubService()
- {
- TRACER_AUTO;
-
- iChatObserver.Reset();
- iChatObserver.Close();
-
- iCchHandler.UnRegisterCchObserver(ECCHIMSub);
-
- ReleaseIMCacheAccessor();
-
- }
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::ConstructL
-//
-// ---------------------------------------------------------
-
-void CVIMPSTEngineIMSubService::ConstructL()
- {
-
- TRACER_AUTO;
- TCCHSubserviceState serviceState = ECCHUninitialized;
- TInt error = iCchHandler.GetServiceState(
- iServiceId, ECCHIMSub, serviceState );
-
- iServiceState = ResolveServiceStateL(serviceState, error);
-
- iCchHandler.RegisterCchObserverL(this,ECCHIMSub);
-
- TRACE( "ResolveServiceStateL returned ServiceState: %d", iServiceState );
-
-
- }
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::CVIMPSTEngine
-//
-// ---------------------------------------------------------
-
-CVIMPSTEngineIMSubService::CVIMPSTEngineIMSubService( TUint aServiceId,
- CVIMPSTEngineCchHandler& aCchHandler,
- CVIMPSTEngineServiceTableFetcher& aTableFetcher,
- MVIMPSTEngineServiceConnectionEventObserver& aObserver) :
- iServiceId(aServiceId),
- iCchHandler(aCchHandler),
- iTableFetcher(aTableFetcher),
- iObserver(aObserver),
- iType (TVIMPSTEnums::EIM)
- {
- }
-
-
-
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::RegisterChatObserver
-//
-// ---------------------------------------------------------
-
-void CVIMPSTEngineIMSubService::RegisterChatObserver(MVIMPSTEngineIMSubServiceEventObserver* aObserver)
- {
- TRACER_AUTO;
- if (aObserver)
- {
- TInt index = iChatObserver.Find(aObserver);
- if( index == KErrNotFound )
- {
- iChatObserver.Append( aObserver );
- }
- }
-
- }
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::UnRegisterChatObserver
-//
-// ---------------------------------------------------------
-
-void CVIMPSTEngineIMSubService::UnRegisterChatObserver(MVIMPSTEngineIMSubServiceEventObserver* aObserver)
- {
- TRACER_AUTO;
-
- if (aObserver)
- {
-
- TInt index = iChatObserver.Find(aObserver);
-
- if( index >=0 )
- {
- iChatObserver.Remove( index );
- iChatObserver.Compress();
- }
-
-
- }
-
- }
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::HandleIMCacheEventL
-// ( Other items commented in header )
-//-----------------------------------------------------------------------------
-
-void CVIMPSTEngineIMSubService::HandleIMCacheEventL(TIMCacheEventType aEventType, TAny* aChatMessage )
- {
- TRACER_AUTO;
- TRACE( "TIMCacheEventType: %d", aEventType );
-
- switch( aEventType )
- {
- case EIMCacheUnreadMessage :
- {
- if (!aChatMessage)
- {
- return;
- }
- SIMCacheMessageData* chatData = static_cast<SIMCacheMessageData*>( aChatMessage ) ;
- // check that buddy id exists
- if ( chatData->iBuddyId )
- {
- TPtrC buddyId = chatData->iBuddyId->Des();
- TRACE( "EIMCacheUnreadMessage for %S", &buddyId );
- NotifyObserversL(TVIMPSTEnums::EIMUnreadMessage,buddyId);
- }
- break;
- }
- case EIMCacheUnreadChange :
- {
- TRACE( "EIMCacheUnreadChange");
- if (!aChatMessage)
- {
- return;
- }
- SIMCacheChatItem* chatItem = static_cast<SIMCacheChatItem*>( aChatMessage ) ;
- if( iServiceId != chatItem->iServiceId )
- {
- return;
- }
- TPtrC buddyId = chatItem->iBuddyId->Des();
- TRACE( "EIMCacheChatClosed for %S", &buddyId );
- NotifyObserversL(TVIMPSTEnums::EIMUnreadChange, buddyId ); // ETrue for Closed conversation
- break;
- }
- case EIMCacheChatStarted :
- {
- if (!aChatMessage)
- {
- return;
- }
- SIMCacheChatItem* chatItem = static_cast<SIMCacheChatItem*>( aChatMessage ) ;
- if( iServiceId != chatItem->iServiceId )
- {
- return;
- }
- TPtrC buddyId = chatItem->iBuddyId->Des();
- TRACE("EIMCacheChatClosed for %S", &buddyId );
- NotifyObserversL(TVIMPSTEnums::EIMChatStarted, buddyId ); // ETrue for Closed conversation
- break;
- }
- case EIMCacheChatClosed:
- {
- if (!aChatMessage)
- {
- return;
- }
- SIMCacheChatItem* chatItem = static_cast<SIMCacheChatItem*>( aChatMessage ) ;
- if( iServiceId != chatItem->iServiceId )
- {
- return;
- }
- TPtrC buddyId = chatItem->iBuddyId->Des();
- TRACE( "EIMCacheChatClosed for %S", &buddyId );
- NotifyObserversL(TVIMPSTEnums::EIMChatClosed, buddyId );
- break;
- }
- case EIMCacheAllChatClosed:
- {
- NotifyObserversL(TVIMPSTEnums::EIMAllChatClosed, KNullDesC );
- break;
- }
- case EIMCacheRequestCompleted:
- {
- NotifyObserversL(TVIMPSTEnums::EIMRequestCompleted, KNullDesC );
- break;
- }
- default:
- {
- break;
- }
- }
-
-
- }
-
-//-----------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::GetUnreadCountL
-// ( Other items commented in header )
-//-----------------------------------------------------------------------------
-TInt CVIMPSTEngineIMSubService::GetUnreadCountL(const TDesC& aBuddyId )
- {
- TRACER_AUTO;
- TRACE( " ServiceId: %d BuddyId: %S", iServiceId, &aBuddyId );
-
- TInt count = 0;
- if( iIMCacheAccessor )
- {
- count = iIMCacheAccessor->GetUnreadMessageCountL(aBuddyId);
- TRACE( "iIMCacheAccessor returns with %d", count );
- }
-
- return count;
- }
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineIMSubService::SubServiceState
-// ---------------------------------------------------------------------------
-//
-TVIMPSTEnums::TVIMPSTRegistrationState CVIMPSTEngineIMSubService::SubServiceState() const
- {
- TRACER_AUTO;
- TRACE( "ServiceId: %d ServiceState: %d",iServiceId, iServiceState );
- return iServiceState;
- }
-
-
-
-//-----------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::IsConversationExistL
-// ( Other items commented in header )
-//-----------------------------------------------------------------------------
-TBool CVIMPSTEngineIMSubService::IsConversationExistL(const TDesC& aBuddyId) const
- {
- TRACER_AUTO;
- TRACE( "Buddy Id : %S", &aBuddyId );
-
- TInt exist = EFalse;
-
- if( iIMCacheAccessor )
- {
- exist = iIMCacheAccessor->IsConversationExistL( aBuddyId );
- TRACE( "iIMCacheAccessor returns with %d", exist );
- }
-
- TRACE( "Exist: %d", exist );
- return exist;
- }
-
-//-----------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::CloseConversationL
-// ( Other items commented in header )
-//-----------------------------------------------------------------------------
-void CVIMPSTEngineIMSubService::CloseConversationL( const TDesC& aContactId )
- {
- TRACER_AUTO;
- TRACE( "Buddy Id : %S", &aContactId );
-
- if( IsConversationExistL(aContactId) )
- {
- TRACE( "iIMCacheAccessor CloseConversationL to be called" );
- iIMCacheAccessor->CloseConversationL( aContactId );
- TRACE( "iIMCacheAccessor CloseConversationL Done" );
- }
-
- }
-//-----------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::GetOpenChatListL
-// ( Other items commented in header )
-//-----------------------------------------------------------------------------
-RArray<SIMCacheChatItem> CVIMPSTEngineIMSubService::GetOpenChatListL()
- {
- TRACER_AUTO;
- RArray<SIMCacheChatItem> item;
- if(iIMCacheAccessor)
- {
- item = iIMCacheAccessor->GetChatListL( iServiceId );
- }
- return item;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::ResolveServiceStateL
-// ---------------------------------------------------------------------------
-//
-TVIMPSTEnums::TVIMPSTRegistrationState CVIMPSTEngineIMSubService::ResolveServiceStateL(
- TCCHSubserviceState aState,
- TInt aServiceError )
- {
- TRACER_AUTO;
-
- TVIMPSTEnums::TVIMPSTRegistrationState state = TVIMPSTEnums::ESVCENotRegistered;
-
-
- TRACE( "iServiceId: %d, ServiceState: %d", iServiceId, aState );
-
- TBool handleServiceStates = ETrue;
- if ( aServiceError && ECCHDisabled != aState )
- {
- //Only if the Service supports ALR, the state can goto WaitingForNetwork
- //Still API from CCH is required to know whether ALR is supported or not
- if ( (KCCHErrorInvalidSettings != aServiceError) && (ECCHConnecting == aState) )
- {
- TRACE("ESVCEWaitingForNetwork" );
- handleServiceStates = EFalse;
- state = TVIMPSTEnums::ESVCEWaitingForNetwork;
- }
- }
-
- if ( handleServiceStates )
- {
- switch ( aState )
- {
- case ECCHEnabled:
- {
- TRACE( "ESVCERegistered" );
- CreateIMCacheAccessorL();
- state = TVIMPSTEnums::ESVCERegistered;
- }
- break;
-
- case ECCHDisconnecting:
- {
- TRACE( "ESVCENetworkDisConnecting" );
- state = TVIMPSTEnums::ESVCENetworkDisConnecting;
- }
- break;
-
- case ECCHUninitialized:
- case ECCHDisabled:
- {
- TRACE( "ESVCENotRegistered" );
- ReleaseIMCacheAccessor();
- state = TVIMPSTEnums::ESVCENotRegistered;
- }
- break;
-
- case ECCHConnecting:
- {
- TRACE( "ESVCENetworkConnecting" );
- state = TVIMPSTEnums::ESVCENetworkConnecting;
- }
- break;
-
- default:
- break;
- }
- }
-
-
- return state;
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::Type
-// ---------------------------------------------------------------------------
-//
-TVIMPSTEnums::SubServiceType CVIMPSTEngineIMSubService::Type() const
- {
- TRACER_AUTO;
- TRACE("SubServiceType() Type : %d", iType );
- TRACE("CVIMPSTEngineIMSubService: [0x%x]", this );
- return iType;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::CchEventOccuredL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineIMSubService::CchEventOccuredL(
- TUint /*aServiceId*/,
- TCCHSubserviceState aState,
- TInt aServiceError )
- {
- TRACER_AUTO;
- TRACE( "TCCHSubserviceState : %d, ServiceErr: %d", aState, aServiceError );
-
- if ( aServiceError && ECCHDisabled != aState )
- {
- //we might even end up in waiting for connection state for all
- //those service which are ALR enabled
- //So better check here if you get any CCH errors
- iServiceState = ResolveServiceStateL( aState, aServiceError );
- iObserver.HandleServceConnectionEventL();
- DoHandleCchErrorL( aServiceError );
- }
- else
- {
- iServiceState = ResolveServiceStateL( aState, aServiceError );
- iObserver.HandleServceConnectionEventL();
- }
-
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::DoHandleCchErrorL()
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineIMSubService::DoHandleCchErrorL(
- TInt aServiceError )
- {
- TRACER_AUTO;
- TRACE( "ServiceErr: %d", aServiceError );
-
- switch ( aServiceError )
- {
- case KCCHErrorNetworkLost:
- case KCCHErrorBandwidthInsufficient:
- case KCCHErrorInvalidIap:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
-
- case KCCHErrorAuthenticationFailed:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
-
- case KCCHErrorLoginFailed:
- case KCCHErrorServiceNotResponding:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
-
- case KCCHErrorInvalidSettings:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
-
- case KCCHErrorAccessPointNotDefined:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
-
- default:
- {
- //Should be fwded to CCHUI to show the appropriate Notes
- //TBD
- }
- break;
- }
-
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::CreateIMCacheAccessorL()
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineIMSubService::CreateIMCacheAccessorL()
- {
- TRACER_AUTO;
- if (!iIMCacheFactory)
- {
- HBufC* ownData = iCchHandler.GetConParametersL(ECchUsername);//
- CleanupStack::PushL(ownData);
- TPtr ownDataPtr = ownData->Des();
- TRACE( "ServiceErr: %S",&ownDataPtr );
- // im cache factory
- iIMCacheFactory = CIMCacheFactory::InstanceL();
-
- // im cache update interface
- if (!iIMCacheAccessor)
- {
- iIMCacheAccessor = iIMCacheFactory->CreateAccessorL(iServiceId, *ownData );
-
- iIMCacheAccessor->RegisterObserverL(*this);
- }
-
- CleanupStack::PopAndDestroy(ownData);
- }
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::ReleaseIMCacheAccessor()
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineIMSubService::ReleaseIMCacheAccessor()
- {
- TRACER_AUTO;
-
- if( iIMCacheAccessor )
- {
- iIMCacheAccessor->UnRegisterObserver(*this);
- }
-
- if( iIMCacheFactory )
- {
- CIMCacheFactory::Release();
- iIMCacheAccessor = NULL;
- iIMCacheFactory = NULL;
- }
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineIMSubService::NotifyObserversL()
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineIMSubService::NotifyObserversL( TVIMPSTEnums::TIMEventType aEventType ,const TDesC& aBuddyId )
- {
- TRACER_AUTO;
- TInt count = iChatObserver.Count();
- for (TInt index=0; index<count; index++)
- {
- iChatObserver[index]->HandleChatMessageEventL(aEventType ,aBuddyId );
- }
- }
-
-// End of File
-