diff -r 000000000000 -r 72b543305e3a email/imum/Mtms/Src/Imap4FetchOp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Mtms/Src/Imap4FetchOp.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,286 @@ +/* +* 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: +* Populate a selection of incomplete remote messages +* +*/ + + +// INCLUDES +#include +#include +#include +#include + +#include "Imap4FetchOp.h" +#include "EmailMsgSizerOperation.h" +#include "EmailUtils.H" +#include "ImumDisconnectOperation.h" +#include "IMAPPRGR.H" +#include "ImumMtmLogging.h" +#include "ImumPanic.h" +#include "ImapPopulateOperation.h" + +// CONSTANTS + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::NewL() +// ---------------------------------------------------------------------------- +// +CImap4FetchOp* CImap4FetchOp::NewL( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + MMsvProgressReporter& aReporter, + TMsvId aService, + TInt aFunctionId, + const TImImap4GetMailInfo& aGetMailInfo, + const CMsvEntrySelection& aSel ) + { + IMUM_STATIC_CONTEXT( CImap4FetchOp::NewL, 0, mtm, KImumMtmLog ); + IMUM_IN(); + + __ASSERT_DEBUG(aSel.Count(), + User::Panic(KImumMtmUiPanic,EPanicSelectionEmpty)); + if ( aSel.Count() == 0 ) + { + User::Leave( KErrNotSupported ); + } + CImap4FetchOp* op = new(ELeave) CImap4FetchOp( + aMailboxApi, aObserverRequestStatus, aReporter, + aService, aFunctionId, aGetMailInfo); + CleanupStack::PushL(op); + op->ConstructL(aSel); + CleanupStack::Pop(); + IMUM_OUT(); + return op; + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::NewL() +// ---------------------------------------------------------------------------- +// +CImap4FetchOp* CImap4FetchOp::NewL( + CImumInternalApi& aMailboxApi, + TRequestStatus& aObserverRequestStatus, + MMsvProgressReporter& aReporter, + TMsvId aService, + TInt aFunctionId, + const TImImap4GetPartialMailInfo& aPartialGetMailInfo, + const CMsvEntrySelection& aSel ) + { + IMUM_STATIC_CONTEXT( CImap4FetchOp::NewL, 0, mtm, KImumMtmLog ); + IMUM_IN(); + + __ASSERT_DEBUG(aSel.Count(), + User::Panic(KImumMtmUiPanic,EPanicSelectionEmpty)); + if ( aSel.Count() == 0 ) + { + User::Leave( KErrNotSupported ); + } + CImap4FetchOp* op = new(ELeave) CImap4FetchOp( + aMailboxApi, aObserverRequestStatus, aReporter, + aService, aFunctionId, aPartialGetMailInfo ); + CleanupStack::PushL(op); + op->ConstructL(aSel); + CleanupStack::Pop(); + IMUM_OUT(); + return op; + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::~CImap4FetchOp()() +// ---------------------------------------------------------------------------- +// +CImap4FetchOp::~CImap4FetchOp() + { + IMUM_CONTEXT( CImap4FetchOp::~CImap4FetchOp, 0, KImumMtmLog ); + IMUM_IN(); + + delete iSelection; + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::CImap4FetchOp() +// ---------------------------------------------------------------------------- +// +CImap4FetchOp::CImap4FetchOp( + CImumInternalApi& aMailboxApi, + TRequestStatus& aStatus, + MMsvProgressReporter& aReporter, + TMsvId aServiceId, + TInt aFunctionId, + const TImImap4GetMailInfo& aGetMailInfo ) + : + CImap4ConnectedOp(aMailboxApi, aStatus, aReporter, aServiceId), + iFunctionId(aFunctionId), + iGetMailInfo( aGetMailInfo ), + iPopulate( EFalse ) + { + IMUM_CONTEXT( CImap4FetchOp::CImap4FetchOp, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::CImap4FetchOp() +// ---------------------------------------------------------------------------- +// +CImap4FetchOp::CImap4FetchOp( + CImumInternalApi& aMailboxApi, + TRequestStatus& aStatus, + MMsvProgressReporter& aReporter, + TMsvId aServiceId, + TInt aFunctionId, + const TImImap4GetPartialMailInfo& aPartialGetMailInfo ) + : + CImap4ConnectedOp( aMailboxApi, aStatus, aReporter, aServiceId ), + iFunctionId(aFunctionId), + iGetMailInfo( aPartialGetMailInfo ), + iPartialGetMailInfo( aPartialGetMailInfo ), + iPopulate( ETrue ) + { + IMUM_CONTEXT( CImap4FetchOp::CImap4FetchOp, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::ConstructL() +// ---------------------------------------------------------------------------- +// +void CImap4FetchOp::ConstructL( const CMsvEntrySelection& aSel ) + { + IMUM_CONTEXT( CImap4FetchOp::ConstructL, 0, KImumMtmLog ); + IMUM_IN(); + + iSelection = aSel.CopyL(); + iSelection->InsertL(0, iService); + // For Get Mail API, first selection element must be service. + CImap4ConnectedOp::ConstructL( iFunctionId ); + if ( iFunctionId != KIMAP4MTMCopyMailSelectionWhenAlreadyConnected && + iFunctionId != KIMAP4MTMMoveMailSelectionWhenAlreadyConnected ) + { + iDisconnect = EFalse; + } + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::DoConnectedOpL() +// ---------------------------------------------------------------------------- +// +void CImap4FetchOp::DoConnectedOpL() + { + IMUM_CONTEXT( CImap4FetchOp::DoConnectedOpL, 0, KImumMtmLog ); + IMUM_IN(); + + iStatus = KRequestPending; + if ( iPopulate ) + { + delete iOperation; + iOperation = NULL; + DoPopulateL(); + } + else + { + TPckg param( iGetMailInfo ); + delete iOperation; + iOperation = NULL; + InvokeClientMtmAsyncFunctionL( + iFunctionId, *iSelection, iService, param); + } + SetActive(); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::ConnectedOpErrorProgressL() +// ---------------------------------------------------------------------------- +// +const TDesC8& CImap4FetchOp::ConnectedOpErrorProgressL(TInt aError) + { + IMUM_CONTEXT( CImap4FetchOp::ConnectedOpErrorProgressL, 0, KImumMtmLog ); + IMUM_IN(); + + TImap4CompoundProgress& prog = iProgressBuf(); + prog.iGenericProgress.iOperation = TImap4GenericProgress::EPopulate; + prog.iGenericProgress.iState = TImap4GenericProgress::EFetching; + prog.iGenericProgress.iErrorCode = aError; + IMUM_OUT(); + return iProgressBuf; + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::DoPopulateL() +// ---------------------------------------------------------------------------- +// +void CImap4FetchOp::DoPopulateL() + { + IMUM_CONTEXT( CImap4FetchOp::DoPopulateL, 0, KImumMtmLog ); + IMUM_IN(); + + TPckg param( iPartialGetMailInfo ); + + CMsvEntry* cEntry = iMsvSession.GetEntryL(iService); + CleanupStack::PushL( cEntry ); + + CMsvEntrySelection* selection = new(ELeave) CMsvEntrySelection; + CleanupStack::PushL( selection ); + selection->AppendL( iService ); + + TMsvId inbox = FindInboxL( *cEntry ); + selection->AppendL( inbox ); + + InvokeClientMtmAsyncFunctionL( + KIMAP4MTMPopulateNewMailWhenAlreadyConnected, + //KIMAP4MTMPopulateAllMailWhenAlreadyConnected, + *selection, + iService, + param); + + CleanupStack::PopAndDestroy( 2, cEntry ); // CSI: 47 # selection, centry + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImap4FetchOp::FindInboxL() +// ---------------------------------------------------------------------------- +// +TMsvId CImap4FetchOp::FindInboxL( CMsvEntry& aEntry ) + { + IMUM_CONTEXT( CImap4FetchOp::FindInboxL, 0, KImumMtmLog ); + IMUM_IN(); + + TMsvId inboxId = KErrNotFound; + TMsvEntry child; + const TInt count = aEntry.Count(); + _LIT( KTMceUiInboxName, "INBOX"); + for (TInt loop = 0; loop < count && inboxId == KErrNotFound; loop++) + { + child = (aEntry)[loop]; + if ( child.iType == KUidMsvFolderEntry && + child.iDetails.CompareF( KTMceUiInboxName ) == 0 ) + { + inboxId = child.Id(); + } + } + IMUM_OUT(); + + return inboxId; + } + +