--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/Imap4FetchAttachmentOp.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,174 @@
+/*
+* 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:
+* Fetch attachments
+*
+*/
+
+
+#include <eikenv.h>
+#include <eikrutil.h>
+
+#include "Imap4FetchAttachmentOp.h"
+#include "EmailMsgSizerOperation.h"
+#include "EmailUtils.H"
+#include "ImumDisconnectOperation.h"
+#include <imapcmds.h>
+#include "IMAPPRGR.H"
+#include "ImumMtmLogging.h"
+#include "ImumPanic.h"
+
+
+CImap4FetchAttachmentOp* CImap4FetchAttachmentOp::NewL(
+ CImumInternalApi& aMailboxApi,
+ TRequestStatus& aStatus,
+ MMsvProgressReporter& aReporter,
+ TMsvId aService,
+ const CMsvEntrySelection& aSel)
+ {
+ IMUM_STATIC_CONTEXT( CImap4FetchAttachmentOp::NewL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ CImap4FetchAttachmentOp* op = new(ELeave) CImap4FetchAttachmentOp(
+ aMailboxApi, aStatus, aReporter, aService);
+ CleanupStack::PushL(op);
+ op->ConstructL(aSel);
+ CleanupStack::Pop();
+ IMUM_OUT();
+ return op;
+ }
+
+CImap4FetchAttachmentOp::~CImap4FetchAttachmentOp()
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::~CImap4FetchAttachmentOp, 0, KImumMtmLog );
+ IMUM_IN();
+ IMUM_OUT();
+
+ delete iSelection;
+ }
+
+void CImap4FetchAttachmentOp::DoConnectedOpL()
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::DoConnectedOpL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ delete iOperation;
+ iOperation = NULL;
+ // iOperation is set in base class function InvokeClientMtmAsyncFunctionL
+ TPckgBuf<TImImap4GetMailInfo> optionsBuf;
+ TImImap4GetMailInfo& options = optionsBuf();
+ options.iMaxEmailSize = KMaxTInt32;
+ options.iGetMailBodyParts = EGetImap4EmailAttachments;
+ options.iDestinationFolder = 0; // not used with fetch attachment operation
+ InvokeClientMtmAsyncFunctionL(
+ KIMAP4MTMPopulate, *iSelection, iService, optionsBuf);
+ SetActive();
+ IMUM_OUT();
+ }
+
+const TDesC8& CImap4FetchAttachmentOp::ConnectedOpErrorProgressL(TInt aError)
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::ConnectedOpErrorProgressL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ __ASSERT_DEBUG(iState==EStateDoingOp || iState==EStateIdle,
+ User::Panic(KImumMtmUiPanic,EPanicWrongStateForOpErrorProgress));
+ iUiProgress().iError=aError;
+ IMUM_OUT();
+ return iUiProgress;
+ }
+
+const TDesC8& CImap4FetchAttachmentOp::ProgressL()
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::ProgressL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if(iState!=EStateDoingOp)
+ {
+ IMUM_OUT();
+ return CImap4ConnectedOp::ProgressL();
+ }
+ else
+ {
+ TPckgBuf<TImap4CompoundProgress> fetchProgressBuf;
+ fetchProgressBuf.Copy(iOperation->ProgressL());
+ const TImap4CompoundProgress& opProgress=fetchProgressBuf();
+ TImap4UiProgress& uiProgress=iUiProgress();
+ uiProgress.iBytesToDo=opProgress.iGenericProgress.iBytesToDo;
+ uiProgress.iBytesDone=opProgress.iGenericProgress.iBytesDone;
+ uiProgress.iError=fetchProgressBuf().iGenericProgress.iErrorCode;
+ IMUM_OUT();
+ return iUiProgress;
+ }
+ }
+
+CImap4FetchAttachmentOp::CImap4FetchAttachmentOp(
+ CImumInternalApi& aMailboxApi,
+ TRequestStatus& aStatus,
+ MMsvProgressReporter& aReporter,
+ TMsvId aService)
+ :
+ CImap4ConnectedOp(aMailboxApi, aStatus, aReporter, aService)
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::CImap4FetchAttachmentOp, 0, KImumMtmLog );
+ IMUM_IN();
+
+ iConnectionCompletionState = CImapConnectionOp::ECompleteAfterConnect;
+ // Don't do a sync.
+ TImap4UiProgress uiProgress;
+ uiProgress.iUiOperation=TImap4UiProgress::EFetchingAttachment;
+ // Used during fetch stage to differentiate from
+ iUiProgress()=uiProgress;
+ // standard message fetch.
+ IMUM_OUT();
+ }
+
+void CImap4FetchAttachmentOp::ConstructL(const CMsvEntrySelection& aSel)
+ {
+ IMUM_CONTEXT( CImap4FetchAttachmentOp::ConstructL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ __ASSERT_DEBUG(aSel.Count(),
+ User::Panic(KImumMtmUiPanic,EPanicSelectionEmpty));
+ if ( aSel.Count() == 0 )
+ {
+ User::Leave( KErrNotSupported );
+ }
+ iSelection = aSel.CopyL();
+ BaseConstructL(KUidMsgTypeIMAP4);
+
+ // Get message size.
+ CMsvEntry* centry = iMsvSession.GetEntryL(aSel[0]);
+ TInt32 msgSize = centry->Entry().iSize;
+ delete centry;
+
+ // Check message size.
+ if ( MsvEmailMtmUiUtils::CheckAvailableDiskSpaceForDownloadL(
+ msgSize, *iEikEnv, iMsvSession ) )
+ {
+ StartL();
+ }
+ else
+ {
+ // Not enough disk space or memory.
+ // User already notified, so 'this' op completes without error.
+ CompleteThis();
+ iState = EStateDisconnecting;
+
+ SetActive();
+ }
+ IMUM_OUT();
+ }
+
+