diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapprotocolcontroller/inc/cimapcompoundsyncservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapprotocolcontroller/inc/cimapcompoundsyncservice.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,130 @@ +// 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 __CIMAPCOMPOUNDSYNCSERVICE_H__ +#define __CIMAPCOMPOUNDSYNCSERVICE_H__ + +#include "cimapcompoundbase.h" +#include "cimapofflinecontrol.h" + +// Forward declarations +class CImapFolder; +class CImapSession; +class CImapMailStore; +class CImOffLineOperation; + + +/** +Compound operation object for performing the necessary sequence of commands +to synchronise the local mirror of the remote mailbox tree and the contents +of mailboxes that are subscribed according to settings. + +@internalTechnology +@prototype +*/ +class CImapCompoundSyncService : public CImapCompoundBase + { +public: + ~CImapCompoundSyncService(); + + static CImapCompoundSyncService* NewL(CImapSyncManager& aSyncManager, CMsvServerEntry& aServerEntry, CImapSettings& aImapSettings, CImapMailStore& aImapMailStore, CImapOfflineControl& aImapOfflineControl, TBool aDoLateDeletes); + virtual void StartOperation(TRequestStatus& aStatus, CImapSession& aSession); + virtual void Progress(TImap4CompoundProgress& aCompoundProgress); + + // Support for Bearer Mobility + virtual void ResumeOperationL(TRequestStatus& aStatus, CImapSession& aSession); + virtual void StopForMigrate(); + + // remove messages from the download rules based fetch + void RemoveFromSelectionL(CMsvEntrySelection& aDeleteSel); + +private: + CImapCompoundSyncService(CImapSyncManager& aSyncManager, CMsvServerEntry& aServerEntry, CImapSettings& aImapSettings,CImapMailStore& aImapMailStore, CImapOfflineControl& aImapOfflineControl ,TBool aDoLateDeletes); + void ConstructL(); + + TBool DoRunLoopL(); + void DoCancel(); + + virtual TInt ProcessNegativeServerResponse(); + + // get the offlineOpArray from the id and set up iOutstandingOps and Folder + TBool RefreshOutstandingOpsL(TMsvId aId); + + // do the appropriate offline operation + void DoOpL(const CImOffLineOperation& aOp); + + // finish up the op just done (send log message, append delete + // etc.) + void DonePendingOpL(); + + // process the next one in the outstanding ops list. Returns ETrue + // if finished + TBool NextPendingOpL(); + + // process pending deletes of the type given in the given + // folder. Returns ETrue if any items were deleted + TBool MatchDeleteOp(const CImOffLineOperation& aOp, TBool aMoveDeletesOnly); + TBool ProcessPendingDeleteOpsL(TMsvId aFolder, TBool aMoveDeletesOnly); + TBool ProcessPendingDeleteOpsListL(TBool aMoveDeletesOnly); + + // make aId and its parents visible + void ChangeEntryL(const TMsvEntry& aEntry); + void DoComplete(TInt& aErr); + +private: + // Sync subscriptions folders progess + TMsvId iNextFolderSync; + + // List of outstanding operations on inbox/other folder + CImOffLineOperationArray* iOutstandingOps; + + // current folder being processed + TMsvId iOutstandingOpsFolder; + + // list of ids that need to be deleted because they were the + // source of a move + CArrayFix* iOutstandingMoveTypeDeletes; + CArrayFix* iOutstandingLocalDeletes; + + // source id of current operation if it was a move and so should + // be deleted afterwards + TMsvId iMovedId; + + // shadow id of current operation - to be deleted when op finishes + TMsvId iShadowId; + + // pointer to offline control object held by MTM + CImapOfflineControl& iImapOfflineControl; + + CImapCompoundBase* iImapCompound; + TInt iFoldersNotFound; + TInt iMsgsToDo; + TInt iMsgsDone; + CImapMailStore& iImapMailStore; + TBool iPerformDeletes; + TBool iDoLateDeletes; + + // download rules + TImImap4GetPartialMailInfo iMailInfo; + TInt32 iFolderSyncCount; + CMsvEntrySelection* iDoNotFetchSel; + + // Folder that we are currently performing an operation on. + // The class does not take ownership of the folder, so it should not + // be deleted. + CImapFolder* iFolder; + }; + +#endif // __CIMAPCOMPOUNDSYNCSERVICE_H__