wvuing/wvuiprocess/Src/CCALoginPC.cpp
changeset 0 094583676ce7
--- /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 <chatng.rsg>
+#include <CPEngNWSessionSlotID2.h>
+#include <CIMPSSAPSettingsStore.h>
+#include <CIMPSSAPSettings.h>
+#include <CIMPSSAPSettingsList.h>
+#include <WVSettingsSharedDataNG.h>
+#include <IMPSServiceSettingsUINGInternalCRKeys.h>
+#include <aknenv.h>
+#include <barsread.h>
+#include <CPEngNWSessionSlotID2.h>
+#include <CPEngNWSessionSlot2.h>
+#include <cimpspresenceconnectionuing.h>
+#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