diff -r 6a20128ce557 -r ebfee66fde93 email/imap4mtm/imapprotocolcontroller/inc/cimapcompoundbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapcompoundbase.h Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,147 @@ +// Copyright (c) 2006-2009 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: +// + +#ifndef __CIMAPCOMPOUNDBASE_H__ +#define __CIMAPCOMPOUNDBASE_H__ + +#include +#include +#include + +class CImapSession; +class CImapSettings; +class CImapSyncManager; +class CMsvServerEntry; +class TImap4CompoundProgress; + +// Operation step identifiers +enum TCompoundStep + { + EFinished = 0, + ESelectSourceMailboxRW = 1, + ESelectSourceMailboxRO = 2, + ESelectDestinationMailboxRW = 3, + ESelectDestinationMailboxRO = 4, + EFetchMessage = 5, + ECopyMessage = 6, + EAppendMessage = 7, + EDeleteMessage = 8, + EDeleteLocalMessage = 9, + EDeleteAllMessages = 10, + ENewSyncFolder = 11, + ESyncFolder = 12, + EInboxDuplicateMove = 13, + EInboxDuplicateCopy = 14, + ECloseFolder = 15, + EDeleteFolder = 16, + ECreate = 17, + ERename = 18, + ECreateSession = 19, + EStartBackgroundSyncOp = 20, + ESelectInboxRW = 21, + EFetchMessageInitialise = 22, + ELocalCopyComplete = 23, + EExpunge = 24, + ESetSourceMailbox = 25, + ESyncTree = 26, + ESyncService = 27, + EDeleteLocalFolder = 28, + EDisconnect = 29, + ESetSource = 30, + EProcessRenameResponse = 31, + ECreateLocal = 32, + ESyncSubscriptions = 33, + EInboxDoneOps = 34, + EFolderDoneOps = 35, + EFolderCheckPendingOPs = 36, + EInboxCheckPendingOps = 37, + EInboxSync = 38, + EInboxEarlyDeletes = 39, + EFolderEarlyDeletes = 40, + EInboxEarlyExpunge = 41, + EFolderEarlyExpunge = 42, + EInboxLateDeletes = 43, + EFolderLateDeletes = 44, + EInboxLateExpunge = 45, + EFolderLateExpunge = 46, + EProcessFetchFlags = 47, + ESelectSyncFolder = 48, + ECheckDestinationMailbox = 49, + ESelectFolderAfterClose = 50, + ESuspendedForMigrate = 51, + ESyncInboxAutoFetch = 52, + ESyncFolderAutoFetchCheck = 53, + ESyncFolderAutoFetch = 54, + ECheckFolderExists = 55, + EProcessFolderCheck = 56, + EUpdateFlag = 57 + }; + +/** +@internalTechnology +@prototype +*/ +class CImapCompoundBase : public CMsgActive + { + +public: + ~CImapCompoundBase(); + + virtual void StartOperation(TRequestStatus& aStatus, CImapSession& aSession) = 0; + virtual void Progress(TImap4CompoundProgress& aCompoundProgress) = 0; + virtual void StopForMigrate(); + void CancelForMigrate(); + virtual void ResumeOperationL(TRequestStatus& aStatus, CImapSession& aSession) = 0; + TBool Suspended(); + + + +protected: + CImapCompoundBase(CImapSyncManager& aSyncManager, CMsvServerEntry& aServerEntry, CImapSettings& aImapSettings); + void DoRunL(); + virtual TBool DoRunLoopL() = 0; + virtual void DoComplete(TInt& aErr); + + TInt ProcessSessionError(); + virtual TInt ProcessNegativeServerResponse() = 0; + + // utility methods: + TInt CheckSelectionL(const CMsvEntrySelection& aSelection, CMsvEntrySelection* aLocalCopy, const TBool aMessages, const TBool aParts, const TBool aFolders, const TBool aIsInService); + TInt CalculateDownloadSizeL(const CMsvEntrySelection& aSelection); + TMsvId FindFolderL(const TMsvId aMessage); + void SetEntryL(const TMsvId aId); + void CompleteSelf(); + void SetCurrentStep(); + void MessageErrorL(const TMsvId aMessageId, const TInt aError); + +protected: + CImapSession* iSession; // not owned by this class + CImapSyncManager& iSyncManager; + + CMsvServerEntry& iServerEntry; + CImapSettings& iImapSettings; + + TCompoundStep iCurrentStep; + TCompoundStep iNextStep; + + TInt iProgressErrorCode; // Is set when an error occur. + TBool iStopForMigrate; // set if stop for migrate requested + TBool iCancelForMigrate; // set if cancelling for migrate + + TImap4GenericProgress::TImap4GenericProgressState iProgressState; + TImap4SyncProgress::TImap4SyncProgressState iSyncProgressState; + }; + +#endif // __CIMAPCOMPOUNDBASE_H__