--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/imapservermtm/inc/IMAPSYNC.H Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,226 @@
+// Copyright (c) 1998-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:
+// CImImap4Synchronise header
+//
+//
+
+#if !defined(__IMAPSYNC_H__)
+#define __IMAPSYNC_H__
+
+#include <mentact.h>
+#include <msventry.h>
+#include <imapset.h>
+
+// Forward declarations
+class CImImap4Session;
+class CImImap4FolderSync;
+class CImap4OffLineControl;
+class CImap4Utils;
+
+// List of folders to be synchronised
+class TImImap4SyncList
+/**
+@internalComponent
+@released
+*/
+ {
+public:
+ TMsvId iFolder;
+ TTime iLastSync;
+ TBool iNotSelectable;
+ };
+
+class CImImap4Synchronise : public CMsgActive
+/**
+@internalComponent
+@released
+*/
+ {
+public:
+// States
+enum TSynchroniseState
+ {
+ ESyncStateIdle=1,
+ EInboxSelect,
+ EInboxPendingOps,
+ EInboxSync,
+ ESynchroniseFolderTree, // this must be in the correct place
+ ECheckRemoteSubscription,
+ EProcessRemoteSubscription,
+ EUpdateRemoteSubscription,
+ EFolderSelect,
+ EFolderPendingOps,
+ EFolderSynchronise,
+ EInboxEarlyDeletes,
+ EFolderEarlyDeletes,
+ EFolderEarlyExpunge,
+ EEndSelectInbox,
+ EInboxLateExpunge,
+ EFolderLateDeletes,
+ EFolderLateExpunge,
+ EInboxLogMessage,
+ EFolderLogMessage,
+ EStartIdle,
+ ESynchronise,
+ ESynchroniseTree,
+ ESynchroniseDeletes
+ };
+
+public:
+ ~CImImap4Synchronise();
+ static CImImap4Synchronise* NewLC(CImImap4Session *aSession);
+ static CImImap4Synchronise* NewL(CImImap4Session *aSession);
+ void ConstructL(CImImap4Session *aSession);
+
+ // Mirror folder tree of remote server
+ void SynchroniseL(TRequestStatus& aStatus, TMsvId aRoot, TBool aNewInvisible, TBool aPerformDeletes, TBool aConnectAndSync = EFalse);
+ void SynchroniseDeletesL(TRequestStatus& aStatus, TMsvId aServiceId);
+ void SynchroniseTreeL(TRequestStatus& aStatus, TMsvId aServiceId, TBool aNewFoldersAreInvisible);
+
+ // Set serverentry to use
+ void SetEntry(CMsvServerEntry* aEntry);
+
+ // set OffLineControl to use
+ void SetOffLineControl(CImap4OffLineControl *aOffLine);
+ void SetUtils(CImap4Utils *aUtils);
+
+ // Progress
+ TImap4SyncProgress Progress();
+
+private:
+ CImImap4Synchronise();
+ void DoRunL();
+ void DoCancel();
+ void DoComplete(TInt& aStatus);
+
+ // once round the state machine, returns whether to go round again
+ TBool DoRunLoopL();
+
+ // 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 );
+
+ // Add folders to 'to do' list according to prevailing strategy
+ void AddLocalFoldersL(const TMsvId aFolder);
+
+ // helper function for AddLocalFolders
+ void AddIfNotThereL(TMsvId aFolder, CArrayFix<TImImap4SyncList>* aFolderList);
+
+ // Sort to-do list
+ void SortFolderListL();
+
+ // Set entry, leave if error (not related to setentry() which sets iEntry)
+ void SetEntryL(const TMsvId aId);
+
+ // Change entry, leave if error
+ void ChangeEntryL(const TMsvEntry& aEntry);
+
+ // Change entry in bulk mode (i.e. no index file commit), leave if error
+ void ChangeEntryBulkL(const TMsvEntry& aEntry);
+
+ // Get children, leave if error
+ void GetChildrenL(CMsvEntrySelection& aSelection);
+
+ // make aId and its parents visible
+ void MakeVisibleL(TMsvId aId);
+
+ // get the offlineOpArray from the id and set up iOutstandingOps and Folder
+ TBool RefreshOutstandingOpsL(TMsvId aId);
+
+ void ResetStats();
+ void GetInboxL();
+
+private:
+ // IMAP4 session to use
+ CImImap4Session* iSession;
+
+ // Folder tree synchronisation
+ CImImap4FolderSync* iFolderSync;
+
+ // Compound operation used for multi-step IMAP operations
+ CImImap4Compound* iCompound;
+
+ // Synchronisation state
+ TSynchroniseState iState;
+ TMsvId iServiceId;
+ TMsvId iFolderId;
+ TMsvId iInbox;
+ TBool iNewFoldersAreInvisible;
+ TBool iPerformDeletes;
+
+ // Folders to synchronise
+ TFolderSyncType iSynchroniseStrategy;
+ TFolderSubscribeType iSubscribeStrategy;
+ CArrayFix<TImImap4SyncList>* iFolderList;
+ // temporary list of folders to be added to iFolderList at end
+ CArrayFix<TImImap4SyncList>* iFolderListDest;
+
+ // List of folders to subscribe or unsubscribe from
+ CArrayFix<TMsvId>* iSubscribeList;
+ CArrayFix<TMsvId>* iUnsubscribeList;
+
+ // List of outstanding operations on inbox/other folder
+ CImOffLineOperationArray* iOutstandingOps;
+ // current folder p=being processed
+ TMsvId iOutstandingOpsFolder;
+
+ // list of ids that need to be deleted because they were the
+ // source of a move
+ CArrayFix<TMsvId>* iOutstandingMoveTypeDeletes;
+ CArrayFix<TMsvId>* 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;
+
+ // Access to message database
+ CMsvServerEntry* iEntry;
+
+ // Timer for new mail check
+ RTimer iCheckMailbox;
+
+ // Current request status
+ TRequestStatus* iRequestStatus;
+
+ // pointer to offline control object held by MTM
+ CImap4OffLineControl* iOffLineControl;
+
+ TImap4SyncProgress iProgress;
+
+ CImap4Utils* iUtils;
+
+ TBool iIdleBeforeCommand;
+
+ // Flag to indicate Pending Operation/s are done on folder, need to sync Inbox
+ TBool iPendingOpOnFolder;
+
+ };
+
+#endif