diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Src/CCALoginPC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiprocess/Src/CCALoginPC.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,438 @@ +/* +* 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: Process Component for Login,Logout +* +*/ + + + +// INCLUDE FILES +#include "CCAEngine.h" +#include "PublicEngineDefinitions.h" +#include "ImpsCSPAllErrors.h" +#include "MCASettings.h" +#include "MCAAccessInterface.h" +#include "SServerPrefers.h" +#include "impsbuilddefinitions.h" +#include "IMUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CCAStorageManagerFactory.h" +#include "MCAStoredContacts.h" +#include "CAUtils.h" + +#include "CCALoginPC.h" +#include "MCABackgroundTaskObserver.h" +#include "CCAMainViewArrayPC.h" +#include "MCALoginRefreshObserverPC.h" + +// The Settings have been moved to Cenrep (also retained in the Resource file), +// so the enums for keys and central repository header is added here +#include "VariantKeys.h" +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CCALoginPC::NewL +// ----------------------------------------------------------------------------- +// +CCALoginPC* CCALoginPC::NewL( CCAEngine& aEngine ) + { + + CCALoginPC* self = new ( ELeave ) CCALoginPC( aEngine ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CCALoginPC::~CCALoginPC() + { + delete iLoggedUserId; + delete iOldLoggedUserId; + delete iMainViewArrayPC; + if ( iLoggedInSap ) + { + delete iLoggedInSap; + iLoggedInSap = NULL; + } + if ( iRefreshObserver ) + { + iRefreshObserver = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::CCALoginPC +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// + +CCALoginPC::CCALoginPC( CCAEngine& aEngine ) + : iEngine( aEngine ) + + { + MCAChatInterface& chatInterface = iEngine.ChatInterface(); + iFirstLogin = ETrue; + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::ConstructL +// Symbian Second Phased Constructor, contain any code that +// might leave. +// ----------------------------------------------------------------------------- +// +void CCALoginPC::ConstructL() + + { + MCAChatInterface& chatInterface = iEngine.ChatInterface(); + iMainViewArrayPC = CCAMainViewArrayPC:: + NewL( iEngine, iEngine.ContactListModel(), chatInterface ); + iLoggedInSap = NULL; + } + + +// ----------------------------------------------------------------------------- +// CCALoginPC::LoginL +// ----------------------------------------------------------------------------- +// + +TBool CCALoginPC::LoginL( TNetworkState aState, CIMPSSAPSettings* aSettings, + CPEngNWSessionSlotID2* aSessionSlotID, + TPEngWVCspServicesTree2 &aImpsServices ) + + { + + HBufC* accessPoint = aSessionSlotID->ServiceAddress().AllocLC(); + HBufC* userId = aSessionSlotID->UserId().AllocLC(); + + TImpsCspIdentifier cspId( *accessPoint, *userId ); + + TRAPD( err, iEngine.GetAccessInterface()->LoginL( cspId, + aSettings->SAPUserPassword(), + aSettings->ClientId(), + aSettings->AccessPoint(), + &aSettings->ServerAuthenticationName(), + &aSettings->ServerAuthenticationPassword() ) ); + if ( err != KErrNone ) + { + return EFalse; + } + + // set logged in user id + MCASettings* settings = iEngine.GetInternalSettingsInterface(); + settings->SetValueL( MCASettings::EOwnWVUserID, *userId ); + settings->SetValueL( MCASettings::EServiceAddress, *accessPoint ); + + CleanupStack::PopAndDestroy( 2, accessPoint ); // userId, accessPoint, sap + + + PerformNetworkStateChangeL( aState, aSessionSlotID, aImpsServices ); + // this is deleted in the destructor and this called + // only when the application is exited. + // so when ever the login/logout is done each time this is created + // but not deleted + + if ( iLoggedInSap ) + { + delete iLoggedInSap; + iLoggedInSap = NULL; + } + + iLoggedInSap = CIMPSSAPSettings::NewL(); + + // this was leaking, changed to NewLC() + CIMPSPresenceConnectionUi* connUI = CIMPSPresenceConnectionUi::NewLC( EIMPSConnClientIM ); + connUI->GetLoggedInSapL( *aSessionSlotID, *iLoggedInSap ); + CleanupStack::PopAndDestroy( connUI ); + + //Store the user id when logged in for the first time. + //here the old user id an new user id will be the same on first login. + if ( iFirstLogin ) + { + iOldLoggedUserId = aSessionSlotID->UserId().AllocL(); + iFirstLogin = EFalse; + iMainViewArrayPC->ResetArray( ETrue ); + iMainViewArrayPC->SetCurrentItemIndexL( ETrue ); + } + //delete the previous login id + delete iLoggedUserId; + iLoggedUserId = NULL; + //Store the currently logged in user id for every login + iLoggedUserId = aSessionSlotID->UserId().AllocL(); + + if ( FreshLoginL() ) + { + iEngine.ChatInterface().CloseAllContainers(); //Only if fresh login + iMainViewArrayPC->ResetArray( ETrue ); + } + else + { + iMainViewArrayPC->ResetArray( EFalse ); + } + iMainViewArrayPC->ResetGroupCountDownOnLogout(); + iMainViewArrayPC->PopulateGroupsListL(); + + + if ( iRefreshObserver ) + { + iRefreshObserver->HandleLoginRefreshCompleteL(); + } + // call back if conveversation view is active + + return ETrue; + + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::PerformNetworkStateChangeL +// ----------------------------------------------------------------------------- +// +void CCALoginPC::PerformNetworkStateChangeL( TNetworkState aState, + CPEngNWSessionSlotID2* aSessionSlotID, + TPEngWVCspServicesTree2 &aImpsServices ) + { + // build up the server preferences structure (variated things to + // pass on to the engine) + + SServerPrefers serverPrefers; + serverPrefers.iUseGrant = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_HAVEGRANT ); + + serverPrefers.iAliasUsed = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_HAVE_ALIAS ); + + serverPrefers.iLocalEchoInGroup = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_LOCAL_ECHO_USED_IN_GROUP ); + + serverPrefers.iReactiveAuthorization = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_REACTIVE_PRESENCE_AUTH ); + + + iEngine.HandleNetworkStateChangeL( aState, &aImpsServices, serverPrefers, + aSessionSlotID ); + + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::GetArrayInterface +// ----------------------------------------------------------------------------- +// + +EXPORT_C MCAMainViewArrayPC* CCALoginPC::GetArrayInterface() const + { + return iMainViewArrayPC; + } + + +// ----------------------------------------------------------------------------- +// CCALoginPC::NotifyEngineForLogoutL +// ----------------------------------------------------------------------------- +// +TBool CCALoginPC::NotifyEngineForLogoutL( TNetworkState aState, + CPEngNWSessionSlotID2* aSessionSlotID, + TPEngWVCspServicesTree2 &aImpsServices ) + { + SServerPrefers serverPrefers; + serverPrefers.iUseGrant = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_HAVEGRANT ); + + serverPrefers.iAliasUsed = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_HAVE_ALIAS ); + + serverPrefers.iLocalEchoInGroup = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_LOCAL_ECHO_USED_IN_GROUP ); + + serverPrefers.iReactiveAuthorization = + IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_REACTIVE_PRESENCE_AUTH ); + + + TRAPD( err, iEngine.HandleNetworkStateChangeL( aState, &aImpsServices, serverPrefers, + aSessionSlotID ) ); + + if ( err != KErrNone ) + { + return EFalse; + } + + + return ETrue; + + } +// ----------------------------------------------------------------------------- +// CCALoginPC::LogoutL +// Once engine has been fully constructed full, invoke logout on the +// AcessInterface reference +// ----------------------------------------------------------------------------- +// +void CCALoginPC::LogoutL() + { + MCAAccessInterface* accessIf = iEngine.GetAccessInterface(); + if ( accessIf ) + { + // the interface exists only if engine had been fully constructed + accessIf->LogoutL(); + iMainViewArrayPC->ResetArray( EFalse ); + iMainViewArrayPC->SetCurrentItemIndexL(); + } + } +// ----------------------------------------------------------------------------- +// CCALoginPC::CancelAllRequests +// ----------------------------------------------------------------------------- +// +void CCALoginPC::CancelAllRequests() + { + iEngine.CancelAllRequests(); + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::ReadyForShutdown() +// ----------------------------------------------------------------------------- +// +TBool CCALoginPC::ReadyForShutdown() + { + return iEngine.ReadyForShutdown(); + } + +// ----------------------------------------------------------------------------- +// CCALoginPC::SetShowNicknameL +// ----------------------------------------------------------------------------- +// +void CCALoginPC::SetShowNicknameL( TBool aShowNickname ) + { + MCAStoredContacts* contacts = + CCAStorageManagerFactory::ContactListInterfaceL(); + contacts->SetShowNickname( aShowNickname ); + + } + + +// ----------------------------------------------------------------------------- +// CCALoginPC::SetAliasL +// ----------------------------------------------------------------------------- +// +void CCALoginPC::SetAliasL( const TDesC& aAlias ) + { + CCAStorageManagerFactory::ContactListInterfaceL()-> + OwnStatus().SetAliasL( aAlias ); + + } + +// --------------------------------------------------------- +// CCALoginPC::FreshLoginL +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CCALoginPC::FreshLoginL( ) + { + if ( !iLoggedInSap ) + { + return EFalse; + } + + TBool isFreshLogin = EFalse; + + // check if iLoggedUserId & iOldLoggedUserId are not null; + if ( iLoggedUserId && iOldLoggedUserId ) + { + if ( CAUtils::NeutralCompare( *iOldLoggedUserId, *iLoggedUserId ) != 0 ) + { + isFreshLogin = ETrue; + if ( iOldLoggedUserId ) + { + delete iOldLoggedUserId; + iOldLoggedUserId = NULL; + } + iOldLoggedUserId = iLoggedUserId->AllocL(); + } + else + { + isFreshLogin = EFalse; + } + } + + return isFreshLogin; + + } + +// --------------------------------------------------------- +// CCALoginPC::AddObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// + +void CCALoginPC::AddObserver( MCALoginRefreshObserverPC *aObserver ) + { + iRefreshObserver = aObserver; + } + +// --------------------------------------------------------- +// CCALoginPC::RemoveObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCALoginPC::RemoveObserver() + { + iRefreshObserver = NULL; + } + + +// --------------------------------------------------------- +// CCALoginPC::RegisterGroupSyncObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// + +void CCALoginPC::RegisterBackGroundTaskObserver( MCABackGroundTaskObserver *aObserver ) + { + iEngine.RegisterBackGroundTaskObserver( aObserver ); + } + +// --------------------------------------------------------- +// CCALoginPC::UnRegisterGroupSyncObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCALoginPC::UnRegisterBackGroundTaskObserver( MCABackGroundTaskObserver *aObserver ) + { + iEngine.UnRegisterBackGroundTaskObserver( aObserver ); + } + +// --------------------------------------------------------- +// CCALoginPC::IsBackgroundTaskPending +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CCALoginPC::IsBackgroundTaskPending() + { + return iEngine.IsBackgroundTaskPending(); + } + +// End of File