--- /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