phonebookui/Phonebook2/ServerApplication/src/CPbk2EntryFetcher.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 85 38bb213f60ba
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2EntryFetcher.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 application server entry fetcher.
+*
+*/
+
+
+#include "CPbk2EntryFetcher.h"
+
+// Phonebook 2
+#include "MPbk2UiServiceObserver.h"
+#include "TPbk2ServerMessageDataRetriever.h"
+#include "CPbk2ServerAppAppUi.h"
+#include "TPbk2TitlePaneOperator.h"
+#include "CPbk2ServerAppStoreManager.h"
+#include "MPbk2ServicePhase.h"
+#include "CPbk2ContactFetchPhase.h"
+#include <CPbk2StoreManager.h>
+#include <Pbk2IPCPackage.h>
+#include <MPbk2ApplicationServices.h>
+
+// Virtual Phonebook
+#include <CVPbkContactStoreUriArray.h>
+#include <MVPbkContactLink.h>
+#include <CVPbkFieldTypeSelector.h>
+#include <CVPbkContactManager.h>
+
+// System includes
+#include <AiwContactSelectionDataTypes.h>
+
+// Debug
+#include <Pbk2Debug.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/**
+ * Sets title pane.
+ *
+ * @param aDataRetriever    Server message data retriever.
+ * @param aFlags            Fetch flags.
+ * @param aMessage          Server message.
+ */
+void SetTitlePaneL
+        ( TPbk2ServerMessageDataRetriever& aDataRetriever, TUint aFlags,
+          const RMessage2& aMessage )
+    {
+    HBufC* titlePaneText = NULL;
+    if ( !( aFlags & ::EUseProviderTitle ) )
+        {
+        titlePaneText = aDataRetriever.GetTitlePaneTextL( aMessage );
+        }
+    TPbk2TitlePaneOperator titlePaneOperator;
+    titlePaneOperator.SetTitlePaneL( titlePaneText ); // takes ownership
+    }
+
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::CPbk2EntryFetcher
+// --------------------------------------------------------------------------
+//
+CPbk2EntryFetcher::CPbk2EntryFetcher
+        ( MPbk2UiServiceObserver& aObserver,
+            TPbk2FetchType aFetchType ) :
+            iObserver( aObserver ),
+            iFetchType( aFetchType )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::CPbk2EntryFetcher()") );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::~CPbk2EntryFetcher
+// --------------------------------------------------------------------------
+//
+CPbk2EntryFetcher::~CPbk2EntryFetcher()
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::~CPbk2EntryFetcher()") );
+
+    delete iStoreUris;
+    delete iPreselectedContacts;
+    delete iContactViewFilter;
+    delete iStoreManager;
+    delete iFetchPhase;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2EntryFetcher::ConstructL( const RMessage2& aMessage )
+    {
+    // Retrieve data from the client-server message
+    CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+        ( *CEikonEnv::Static()->EikAppUi() );
+
+    TPbk2ServerMessageDataRetriever dataRetriever;
+    TUint flags = dataRetriever.FetchFlagsL( aMessage );
+
+    // Set title pane
+    SetTitlePaneL( dataRetriever, flags, aMessage );
+
+    iPreselectedContacts = dataRetriever.GetPreselectedContactLinksL
+        ( aMessage, appUi.ApplicationServices().ContactManager() );
+    iStoreUris = dataRetriever.GetContactStoreUriArrayL
+        ( aMessage, appUi.ApplicationServices().StoreConfiguration(),
+          iPreselectedContacts, iUseDeviceConfig );
+    iContactViewFilter = dataRetriever.GetContactViewFilterL
+        ( aMessage, appUi.ApplicationServices().ContactManager().
+            FieldTypes() );
+    iFetchResId = dataRetriever.GetFetchDialogResourceL( aMessage );
+
+    iStoreManager = CPbk2ServerAppStoreManager::NewL
+        ( appUi.StoreManager(),
+          appUi.ApplicationServices().ContactManager() );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2EntryFetcher* CPbk2EntryFetcher::NewL(
+        const RMessage2& aFetchCompleteMessage,
+        MPbk2UiServiceObserver& aObserver,
+        TPbk2FetchType aFetchType )
+    {
+    CPbk2EntryFetcher* self =
+        new ( ELeave ) CPbk2EntryFetcher( aObserver, aFetchType );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFetchCompleteMessage );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::LaunchServiceL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::LaunchServiceL()
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::LaunchServiceL()") );
+
+    iStoreManager->LoadAndOpenContactStoresL( *iStoreUris, *this, EFalse );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::CancelService
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::CancelService()
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::CancelService()") );
+
+    if ( iFetchPhase )
+        {
+        iFetchPhase->CancelServicePhase();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::AcceptDelayedContactsL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::AcceptDelayedContactsL
+        ( const TDesC8& aContactLinkBuffer )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::AcceptDelayedContactsL()") );
+
+    if ( iFetchPhase )
+        {
+        iFetchPhase->AcceptDelayedL( aContactLinkBuffer );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::DenyDelayedContactsL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::DenyDelayedContactsL
+        ( const TDesC8& aContactLinkBuffer )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::DenyDelayedContactsL()") );
+
+    if ( iFetchPhase )
+        {
+        iFetchPhase->DenyDelayedL( aContactLinkBuffer );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::ExitServiceL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::ExitServiceL( TInt aExitCommandId )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::ExitServiceL(%d)"), aExitCommandId );
+
+    if ( iFetchPhase )
+        {
+        iFetchPhase->RequestCancelL( aExitCommandId );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::ServiceResults
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::ServiceResults(TServiceResults* aResults) const
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::ServiceResults()") );
+
+    if ( iFetchPhase )
+        {
+        aResults->iLinkArray = iFetchPhase->Results();
+        aResults->iExtraData = iFetchPhase->ExtraResultData();
+        aResults->iFieldContent = iFetchPhase->FieldContent();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::NextPhase
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::NextPhase( MPbk2ServicePhase& /*aPhase*/ )
+    {
+    // There is no other phase than fetch, we are done
+    iObserver.ServiceComplete();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PreviousPhase
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::PreviousPhase( MPbk2ServicePhase& /*aPhase*/ )
+    {
+    // Do nothing
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PhaseCanceled
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::PhaseCanceled( MPbk2ServicePhase& /*aPhase*/ )
+    {
+    iObserver.ServiceCanceled();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PhaseAborted
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::PhaseAborted( MPbk2ServicePhase& /*aPhase*/ )
+    {
+    iObserver.ServiceAborted();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PhaseError
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::PhaseError
+        ( MPbk2ServicePhase& /*aPhase*/, TInt aErrorCode )
+    {
+    iObserver.ServiceError( aErrorCode );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PhaseOkToExit
+// --------------------------------------------------------------------------
+//
+TBool CPbk2EntryFetcher::PhaseOkToExit
+        ( MPbk2ServicePhase& /*aPhase*/, TInt aCommandId )
+    {
+    // Deny exit and pass an asynchronous query to the consumer,
+    // which may later approve exit
+    iObserver.CompleteExitMessage( aCommandId );
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::PhaseAccept
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::PhaseAccept
+        ( MPbk2ServicePhase& /*aPhase*/, const TDesC8& aMarkedEntries,
+          const TDesC8& aLinkData )
+    {
+    iObserver.CompleteAcceptMsg( aMarkedEntries, aLinkData );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::ContactUiReadyL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::ContactUiReadyL
+        ( MPbk2StartupMonitor& aStartupMonitor )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::ContactUiReadyL()") );
+
+    aStartupMonitor.DeregisterEvents( *this );
+
+    LaunchFetchPhaseL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::StartupCanceled
+// --------------------------------------------------------------------------
+//
+void  CPbk2EntryFetcher::StartupCanceled( TInt aErrorCode )
+    {
+    PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING
+        ("CPbk2EntryFetcher::StartupCanceled(%d)"), aErrorCode );
+
+    if ( aErrorCode == KErrCancel )
+        {
+        iObserver.ServiceCanceled();
+        }
+    else
+        {
+        iObserver.ServiceError( aErrorCode );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EntryFetcher::LaunchFetchPhaseL
+// --------------------------------------------------------------------------
+//
+void CPbk2EntryFetcher::LaunchFetchPhaseL()
+    {
+    CPbk2FetchDlg::TParams params;
+
+    params.iResId = iFetchResId;
+    params.iMarkedEntries = iPreselectedContacts;
+    params.iFlags = CPbk2FetchDlg::EFetchSingle;
+    if ( iFetchType == EMultipleEntryFetch )
+        {
+        params.iFlags = CPbk2FetchDlg::EFetchMultiple;
+        }
+
+    delete iFetchPhase;
+    iFetchPhase = NULL;
+    iFetchPhase = CPbk2ContactFetchPhase::NewL
+        ( *this, *iStoreManager, params, ETrue,
+          MPbk2FetchDlgObserver::EFetchDelayed, iContactViewFilter,
+          iUseDeviceConfig, iStoreUris );
+
+    CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+        ( *CEikonEnv::Static()->EikAppUi() );
+
+    // Change layout to fetch's layout
+    appUi.ChangeStatuspaneLayoutL(
+        CPbk2ServerAppAppUi::EStatusPaneLayoutUsual );
+
+    iFetchPhase->LaunchServicePhaseL();
+    }
+
+// End of File