diff -r 2b7283837edb -r 3104fc151679 imstutils/imconversationview/imcvuiengine/src/cimcvengine.cpp --- a/imstutils/imconversationview/imcvuiengine/src/cimcvengine.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,867 +0,0 @@ -/* -* 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: engine class -* -*/ - -// INCLUDE FILES -#include "cimcvengine.h" - -#include "cimcvenginechatcontainer.h" -#include "cimcvenginemessagehandler.h" -#include "cimcvenginemessagecreator.h" -#include -#include -#include -//ximp includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// local includes -#include "cimcvenginecontextobserver.h" -#include "cimcvenginechatcontainer.h" -#include "imcvlogger.h" -#include "imcvuiliterals.h" -//settings -#include -#include -#include - -#include "cimcvengineopenchats.h" -#include "cimcvenginecchhandler.h" -#include "conversations.h" - -#include -//branding related header files -#include -#include -#include -#include -#include - -#define KMAX_SMILEY_COUNT 20 - -// ================= MEMBER FUNCTIONS ======================= - -// Two-phased constructor. - CIMCVEngine* CIMCVEngine::NewL(TInt aServiceId, MIMCVEngineMessageCreator& aMessageCreater, - CBSFactory& aBrandingFactory ) - { - IM_CV_LOGS(TXT("CIMCVAppView::CIMCVEngine::NewL() start") ); - CIMCVEngine* self = new ( ELeave ) CIMCVEngine(aServiceId,aBrandingFactory); - - CleanupStack::PushL( self ); - self->ConstructL(aMessageCreater ); - CleanupStack::Pop( self ); - IM_CV_LOGS(TXT("CIMCVAppView::CIMCVEngine::NewL() end") ); - return self; - } - - -// --------------------------------------------------------- -// CIMCVEngine::~CIMCVEngine() -// Note the destruction order of objects. -// --------------------------------------------------------- -// - CIMCVEngine::~CIMCVEngine() - { - IM_CV_LOGS(TXT("CIMCVEngine destructor START") ); - if( iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - Cancel(); - delete iCCHHandler; - iAcceptedEventTypes.Reset(); - iAcceptedEventTypes.Close(); - - delete iOwnUserId; - delete iServiceName; - delete iBrandId; - - if(iPresenceContext) - { - iPresenceContext->UnregisterObserver( *iContextEventObserver ); - delete iPresenceContext; - iPresenceContext = NULL; - } - if(iClient) - { - delete iClient; - iClient = NULL; - } - if(iContextEventObserver) - { - iContextEventObserver->UnRegisterObserver(iMessageHandler); - delete iContextEventObserver; - iContextEventObserver = NULL; - } - if(iMessageHandler) - { - delete iMessageHandler; - iMessageHandler = NULL; - } - delete iChatInterface; - - if( iBrandingAccess ) - { - iBrandingAccess->Close(); - iBrandingAccess = NULL; - } - IM_CV_LOGS(TXT("CIMCVEngine destructor END") ); - -#if 0 - if( iSmileyArrayOwned ) - { - IM_CV_LOGS(TXT("CIMCVEngine::deleting icon STRING array owned") ); - iSmileyArray.ResetAndDestroy(); - } - IM_CV_LOGS(TXT("CIMCVEngine::RESETTING icon STRING array ") ); - iSmileyArray.Reset(); - - if( iSmileyDlgIconArrayOwned ) - { - IM_CV_LOGS(TXT("CIMCVEngine::deleting icon array owned") ); - iSmileyDlgIconArray.ResetAndDestroy(); - } - IM_CV_LOGS(TXT("CIMCVEngine::deleting icon array ") ); - iSmileyDlgIconArray.Reset(); -#endif - IM_CV_LOGS(TXT("CIMCVAppViewContainer::SendMessageL() start") ); - - } - -// --------------------------------------------------------- -// CIMCVEngine::CIMCVEngine() -// C++ default constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------- -// -CIMCVEngine::CIMCVEngine(TInt aServiceId,CBSFactory& aBrandingFactory) : -CActive( CActive::EPriorityStandard ), -iServiceId( aServiceId ), -iBrandingFactory( aBrandingFactory ), -iSmileyArrayOwned( ETrue ), -iSmileyDlgIconArrayOwned( ETrue ) - { - iOwnUserId = NULL; - CActiveScheduler::Add( this ); - } -// --------------------------------------------------------- -// CIMCVEngine::ConstructL() -// Symbian OS default constructor can leave. -// --------------------------------------------------------- -// -void CIMCVEngine::ConstructL(MIMCVEngineMessageCreator& aMessageCreater) - { - IM_CV_LOGS(TXT("CIMCVAppView::CIMCVEngine::ConstructL() start") ); - iClient = MXIMPClient::NewClientL(); - //Create new sink to receive ximp context events - iContextEventObserver = CIMCVEngineContextObserver::NewL(); - - iChatInterface = CIMCVEngineChatContainer::NewL( iServiceId ); - //Read the logged in status from CCH True/False - TBool isCchEnebled = EFalse; - iCCHHandler = CIMCVEngineCchHandler::NewL(iServiceId, *this); - isCchEnebled = iCCHHandler->IsServiceLoggedIn(); - - // Read User Id from CCH - iOwnUserId = HBufC::NewL(KMAXUSERIDLENGTH); - TPtr owndataPtr = iOwnUserId->Des(); - GetUserIdL(owndataPtr ) ; - - //Read Servicename from CCH - iServiceName = HBufC::NewL(KMAXUSERIDLENGTH); - TPtr srvNamePtr( iServiceName->Des() ); - GetServiceNameL( iServiceId, srvNamePtr ); - - //Read the service state from CCH - TCCHSubserviceState serviceState = ECCHUninitialized; - TInt error = iCCHHandler->GetServiceState( - serviceState ); - - if ( ECCHEnabled == serviceState || isCchEnebled ) - { - // register this to prsence context - LoginL(); - } - // Read the BrandId from SPsettings - iBrandId = HBufC8::NewL( KVIMPSTUISPSMaxPropertyLength ); - TPtr8 brandidPtr(iBrandId->Des()); - GetBrandIdL( iServiceId, brandidPtr ); - - //Read BrandLanguage id from SPsettings - iLanguageId = PropertyBrandLanguageL(iServiceId); - - ConstructBrandL(); - - if ( ECCHEnabled == serviceState || isCchEnebled ) - { - iMessageHandler = CIMCVEngineMessageHandler::NewL( *iChatInterface, - aMessageCreater, - iPresenceContext, - iServiceId, - owndataPtr ); - } - else - { - iMessageHandler = CIMCVEngineMessageHandler::NewL( *iChatInterface, - aMessageCreater, - NULL, - iServiceId, - owndataPtr ); - - } - - iContextEventObserver->RegisterObserver(iMessageHandler); - IM_CV_LOGS(TXT("CIMCVAppView::CIMCVEngine::ConstructL() end") ); - } - -// --------------------------------------------------------- -// CIMCVEngine::ConstructBrandL() -// --------------------------------------------------------- -// -void CIMCVEngine::ConstructBrandL() - { - if(iBrandingAccess) - { - iBrandingAccess->Close(); - iBrandingAccess = NULL; - } - iBrandingAccess = iBrandingFactory.CreateAccessL( GetBrandId(), (TLanguage)GetLanguageId() ); - if(iBrandingAccess) - { - TInt totalCount = iBrandingAccess->GetIntL(KSmileycount); - - // Restricting the maximum number of smileys to KMAX_SMILEY_COUNT. - if( totalCount > KMAX_SMILEY_COUNT ) - totalCount = KMAX_SMILEY_COUNT; - HBufC* allSmileyString = iBrandingAccess->GetTextL(KSmileytext); - CleanupStack::PushL(allSmileyString); - allSmileyString->Des().Delete(0, 1); - allSmileyString->Des().Delete(((allSmileyString->Length())-1), 2); - ParseAllSmileyStringL(totalCount, *allSmileyString); - CleanupStack::PopAndDestroy(allSmileyString); - - TInt iconCount = iSmileyArray.Count(); - CGulIcon* icon = NULL; - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - HBufC* iconString = NULL; - TInt err = KErrNotFound; - for( TInt index = 0; index< iconCount; index++ ) - { - iconString = iSmileyArray[index]; - TPtrC iconStringPtr = iconString->Des(); - TBuf8<16> aUtf8; // - CnvUtfConverter::ConvertFromUnicodeToUtf8(aUtf8, iconStringPtr); - iBrandingAccess->GetBitmapL(aUtf8, bitmap, mask ); - CleanupStack::PushL( bitmap ); - CleanupStack::PushL( mask ); - icon = CGulIcon::NewL( bitmap, mask ); - CleanupStack::Pop( 2 ); // bitmap ,mask - - err = iSmileyDlgIconArray.Append( icon ); - - if( err < 0) - { - delete icon; - icon = NULL; - } - } - } - } - -// --------------------------------------------------------- -// CIMCVEngine::GetSmileStringArray() -// --------------------------------------------------------- -// -EXPORT_C RPointerArray CIMCVEngine::GetSmileStringArray() - { - iSmileyArrayOwned = EFalse; - return iSmileyArray;// ownership transfered - } - -// --------------------------------------------------------- -// CIMCVEngine::ParseAllSmileyStringL() -// --------------------------------------------------------- -// -EXPORT_C RPointerArray CIMCVEngine::GetSmileyIconArray( ) - { - iSmileyDlgIconArrayOwned = EFalse; - return iSmileyDlgIconArray; // ownership transfered - } -// --------------------------------------------------------- -// CIMCVEngine::ParseAllSmileyStringL() -// --------------------------------------------------------- -// -void CIMCVEngine::ParseAllSmileyStringL(TInt aTotalCount , const TDesC& aAllSmileyString) - { - TInt location = KErrNotFound; - HBufC* string = aAllSmileyString.AllocLC(); - TPtr mainBufferPtr = string->Des(); - //make sure everything is fresh - iSmileyArray.ResetAndDestroy(); - for(TInt i=0; iGetBitmapL(aIconid, bitmap, mask ); - CleanupStack::PushL( bitmap ); - CleanupStack::PushL( mask ); - icon = CGulIcon::NewL( bitmap, mask ); - CleanupStack::Pop( 2 ); // bitmap ,mask - return icon; - } -// --------------------------------------------------------- -// CIMCVEngine::CreateConnectionL() -// --------------------------------------------------------- -// -void CIMCVEngine::CreateConnectionL() - { - iPresenceContext = iClient->NewPresenceContextLC(); - // ignore code scanner warning, it gives panic - CleanupStack::Pop();// because of LC method - // Read the ximpfw adaptation uid from SPsettings - TInt protocolUidValue = iCCHHandler->GetAdapterUidL(); ; - // filter the event from ximpfw ,interested only login and request complete - iAcceptedEventTypes.Reset(); - iAcceptedEventTypes.AppendL( MXIMPRequestCompleteEvent::KInterfaceId ); - iAcceptedEventTypes.AppendL( MXIMPContextStateEvent::KInterfaceId ); - - TArray< TInt32 > eventFilterArray = iAcceptedEventTypes.Array(); - // register this to prsence context - iPresenceContext->RegisterObserverL( *iContextEventObserver, &eventFilterArray ); - TUid protocolUid =TUid::Uid( protocolUidValue ); - iContextEventObserver->GetConnectedSessionL(*iPresenceContext,iServiceId, protocolUid ); - } -// --------------------------------------------------------- -// CIMCVEngine::ChatInterface() -// --------------------------------------------------------- -// -EXPORT_C MIMCVEngineChatInterface& CIMCVEngine::ChatInterface() const - { - return *iChatInterface; - } - -// --------------------------------------------------------- -// CIMCVEngine::ChatInterface() -// --------------------------------------------------------- -// -EXPORT_C MIMCVEngineMessageHandler& CIMCVEngine::MessageHandler() const - { - return *iMessageHandler; - } - -// --------------------------------------------------------- -// CIMCVEngine::ReadyForShutdown() -// --------------------------------------------------------- -// -EXPORT_C TBool CIMCVEngine::ReadyForShutdown() - { - return !iContextEventObserver->IsLoggedIn(); - } - -// --------------------------------------------------------- -// CIMCVEngine::IsLoggedIn() -// --------------------------------------------------------- -// -EXPORT_C TBool CIMCVEngine::IsLoggedIn() const - { - return iContextEventObserver->IsLoggedIn(); - } - -// --------------------------------------------------------- -// CIMCVEngine::GetLoggedInUserId() -// --------------------------------------------------------- -// -EXPORT_C const TDesC& CIMCVEngine::GetLoggedInUserId() - { - if(iOwnUserId) - { - return *iOwnUserId; - } - return KNullDesC; - } -// --------------------------------------------------------- -// CIMCVEngine::ReleaseConnectionL() -// --------------------------------------------------------- -// -EXPORT_C void CIMCVEngine::ReleaseConnectionL() - { - if (iPresenceContext) - { - iContextEventObserver->ReleaseConnectionL(*iPresenceContext); - } - } - -// --------------------------------------------------------- -// CIMCVEngine::DeleteContextL() -// --------------------------------------------------------- -// -void CIMCVEngine::DeleteContextL() - { - if(iPresenceContext) - { - iPresenceContext->UnregisterObserver( *iContextEventObserver ); - delete iPresenceContext; - iPresenceContext = NULL; - - } - - } - -// --------------------------------------------------------- -// CIMCVEngine::CreateContextL() -// --------------------------------------------------------- -// -void CIMCVEngine::CreateContextL() - { - if(!iPresenceContext) - { - CreateConnectionL(); - iMessageHandler->ResetContextL(iPresenceContext); - } - } -// --------------------------------------------------------- -// CIMCVEngine::GetLoggedInUserId() -// --------------------------------------------------------- -// -EXPORT_C const TDesC8& CIMCVEngine::GetBrandId() - { - if(iBrandId) - { - return *iBrandId; - } - return KNullDesC8; - } -// --------------------------------------------------------- -// CIMCVEngine::GetLoggedInUserId() -// --------------------------------------------------------- -// -EXPORT_C TInt CIMCVEngine::GetLanguageId() - { - return iLanguageId; - } - - -// --------------------------------------------------------- -// CIMCVEngine::CCHHandler() -// --------------------------------------------------------- -// -EXPORT_C MIMCVEngineCchHandler& CIMCVEngine::CCHHandler() - { - return *iCCHHandler; - } - -// --------------------------------------------------------- -// CIMCVEngine::ServiceName() -// --------------------------------------------------------- -// -EXPORT_C const TDesC& CIMCVEngine::ServiceName() - { - return *iServiceName; - } - - -// --------------------------------------------------------- -// CIMCVEngine::GetLoggedInUserId() -// --------------------------------------------------------- -// - -EXPORT_C MIMCVEngineOpenChats& CIMCVEngine::OpenChats() - { - return iMessageHandler->OpenChats(); - } - - -// --------------------------------------------------------- -// CIMCVEngine::GetServiceId() -// --------------------------------------------------------- -// -EXPORT_C TInt CIMCVEngine::GetServiceId() - { - return iServiceId; - } - -// --------------------------------------------------------------------------- -// CIMCVEngine::GetServiceNameL() -// --------------------------------------------------------------------------- -// -void CIMCVEngine::GetServiceNameL( - TUint32 aServiceId, TDes& aServiceName ) - { - - CSPSettings* settings = CSPSettings::NewLC(); - CSPEntry* entry = CSPEntry::NewLC(); - TRAPD( err, settings->FindEntryL( aServiceId, *entry ) ); - if ( !err ) - { - aServiceName = entry->GetServiceName(); - } - - CleanupStack::PopAndDestroy( 2 ); - } -// --------------------------------------------------------------------------- -// CIMCVEngine::IsVoipServiceL() -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CIMCVEngine::IsVoipServiceL() - { - TBool isvoipservice = EFalse; - CSPSettings* settings = CSPSettings::NewLC(); - CSPProperty* property = CSPProperty::NewLC(); - settings->FindPropertyL(iServiceId, ESubPropertyVoIPEnabled, *property); - if (property) - { - isvoipservice = ETrue; - } - CleanupStack::PopAndDestroy(2); //property,settings - return isvoipservice; - } - - - -// --------------------------------------------------------------------------- -// CIMCVEngine::GetBrandIdL() -// --------------------------------------------------------------------------- -// -void CIMCVEngine::GetBrandIdL( - TUint32 aServiceId, TDes8& aBrandId ) - { - HBufC* ret = HBufC::NewL( KVIMPSTUISPSMaxPropertyLength ); - CleanupStack::PushL( ret ); - TPtr retPtr( ret->Des() ); - - CSPSettings* settings = CSPSettings::NewLC(); - CSPProperty* property = CSPProperty::NewLC(); - settings->FindPropertyL( aServiceId, - EPropertyBrandId, - *property ); - if ( property ) - { - property->GetValue( retPtr ); - aBrandId.Copy( retPtr ); - } - CleanupStack::PopAndDestroy( 3 ); //property,settings,ret - } - - - -// --------------------------------------------------------------------------- -// CIMCVEngine::PropertyBrandLanguageL() -// --------------------------------------------------------------------------- -// -TLanguage CIMCVEngine::PropertyBrandLanguageL( - TUint32 aServiceId ) - { - - // default to english - TInt brandLanguage = ELangInternationalEnglish; - CSPSettings* settings = CSPSettings::NewLC(); - CSPProperty* property = CSPProperty::NewLC(); - settings->FindPropertyL( aServiceId, - EPropertyBrandLanguage, - *property ); - if ( property ) - { - property->GetValue( brandLanguage ); - } - CleanupStack::PopAndDestroy( 2 ); // property,settings - - return ((TLanguage) (brandLanguage) ); - } - - - -// --------------------------------------------------------------------------- -// CIMCVEngine::PropertySettingsIdL() -// --------------------------------------------------------------------------- -// -TInt CIMCVEngine::PropertySettingsIdL( - TUint32 aServiceId ) - { - - // default to english - TInt settingsId = 0; - CSPSettings* settings = CSPSettings::NewLC(); - CSPProperty* property = CSPProperty::NewLC(); - settings->FindPropertyL( aServiceId, - ESubPropertyIMSettingsId, - *property ); - if ( property ) - { - property->GetValue( settingsId ); - } - CleanupStack::PopAndDestroy( 2 ); // property,settings - - return (settingsId); - } - - -// --------------------------------------------------------------------------- -// CIMCVEngine::ResolveServiceStateL() -// --------------------------------------------------------------------------- -// -EXPORT_C void CIMCVEngine::ResolveServiceStateL() - { - - if ((!IsLoggedIn()) && (iCCHHandler->IsServiceLoggedIn())) - { - IM_CV_LOGS(TXT("CIMCVEngine::ResolveServiceState() NOT LOGGED IN") ); - iChatInterface->CloseAllContainers(); - CreateContextL(); - } - - } -// --------------------------------------------------------------------------- -// CIMCVEngine::GetUserIdL() -// --------------------------------------------------------------------------- -// -void CIMCVEngine::GetUserIdL(TPtr& aUserId ) - { - - HBufC* userId = iCCHHandler->GetUserIdL(); - - if(userId) - { - TPtr userIdPtr( userId->Des() ); - - aUserId.Copy( userIdPtr ); - } - delete userId; - - } - - -// --------------------------------------------------------------------------- -// CIMCVEngine::LoginL() -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CIMCVEngine::LoginL() - { - if (!IsLoggedIn()) - { - iState = ELogin; - IssueRequest(); - // ignore codescanner warning ignored. - if( !iWait.IsStarted() ) - { - // Code scanner warning "active object called without checking - // whether it is active or cancelling it first" ignored because - // CActiveSchedulerWait is not an active object - iWait.Start(); // CSI: 10 # See above - } - - if ( EOperationInComplete == iState ) - { - return KErrGeneral; - } - } - return KErrNone; - } - - -// -------------------------------------------------------------------------- -// CIMCVEngine::RunL -// -------------------------------------------------------------------------- -// -void CIMCVEngine::RunL() - { - switch( iState ) - { - case ELogin: - { - //cch is not logged in - if (!iCCHHandler->IsServiceLoggedIn()) - { - TInt error = iCCHHandler->EnableService(); - if (KErrNone != error) - { - iState = EOperationInComplete; - IssueRequest(); - } - else - { - iCCHHandler->RegisterObserver(this); - } - } - else - { - //cch logged in but the ximp context is not logged in - if (!IsLoggedIn()) - { - TRAPD(err,CreateConnectionL()); - if(KErrNone == err ) - { - iState = EOperationComplete; - } - else - { - iState = EOperationInComplete; - } - IssueRequest(); - } - } - break; - } - - case EOperationInComplete: - { - iCCHHandler->UnRegisterObserver(); - if( iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - break; - } - - case EOperationComplete: - { - iCCHHandler->UnRegisterObserver(); - if( iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - break; - } - - default: - { - // Do nothing - break; - } - } - } - -// -------------------------------------------------------------------------- -// CIMCVEngine::DoCancel -// -------------------------------------------------------------------------- -// -void CIMCVEngine::DoCancel() - { - } - -// -------------------------------------------------------------------------- -// CIMCVEngine::RunError -// -------------------------------------------------------------------------- -// -TInt CIMCVEngine::RunError( TInt /*aError*/ ) - { - return KErrNone; - } - - -// -------------------------------------------------------------------------- -// CIMCVEngine::IssueRequest -// -------------------------------------------------------------------------- -// -void CIMCVEngine::IssueRequest() - { - if (IsActive()) - { - Cancel(); - } - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - } - - -// -------------------------------------------------------------------------- -// CIMCVEngine::ServiceStatusChanged -// -------------------------------------------------------------------------- -// -void CIMCVEngine::ServiceStatusChanged( TInt /*aServiceId*/, - TServiceState aServiceStatus ) - { - - switch(aServiceStatus) - { - case MIMCVEngineCCHObserver::ENotLoggedIn: - { - iState = EOperationInComplete; - IssueRequest(); - break; - } - case MIMCVEngineCCHObserver::EConnecting: - { - //Nothing to be done - break; - } - case MIMCVEngineCCHObserver::ELogin: - { - iState = EOperationComplete; - IssueRequest(); - break; - } - case MIMCVEngineCCHObserver::EDisconnecting: - { - //nothing to be done - break; - } - - default: - { - break; - } - } - } -// -------------------------------------------------------------------------- -// CIMCVEngine::CloseAllOpenChatsL -// -------------------------------------------------------------------------- -// -void CIMCVEngine::CloseAllOpenChatsL() - { - IM_CV_LOGS(TXT("CIMCVEngine::CloseAllOpenChatsL() ***************************** START") ); - iMessageHandler->CloseAllConversationL(); - IM_CV_LOGS(TXT("CIMCVEngine::CloseAllOpenChatsL() ***************************** END") ); - } - -// End of File