email/imap4mtm/imapsyncmanager/inc/cimapfolder.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imap4mtm/imapsyncmanager/inc/cimapfolder.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,197 @@
+// 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:
+// CImapFolder header
+// 
+//
+
+#if !defined(__CIMAPFOLDER_H__)
+#define __CIMAPFOLDER_H__
+
+#include <f32file.h>
+#include <mentact.h>
+#include <msventry.h>
+#include "cimapsyncmanager.h"	// forward declaration is not possible because of embedded enum
+#include "cimapfetchresponse.h"
+
+// Forward declarations
+class CImapSession;
+class CImapFolderIndex;
+class CImapFolderInfo;
+class CImConvertCharconv;
+class CCnvCharacterSetConverter;
+class CImConvertHeader;
+
+// Modes updating Seen flag
+enum TSeenFlagUpdateMode
+	{
+	EClearSeenFlag=0,
+	ESetSeenFlag
+	};
+
+//cached TMsvEntry data
+class TMsvCacheData
+/**
+@internalComponent
+@prototype
+*/
+	{
+public:
+	TBool iOrphan;
+	TUint32 iUid;
+	};
+	
+class CImapFolder : public CMsgActive, public MImapFetchStructureObserver
+/**
+The IMAP Folder Component shall encapsulate a folder on the IMAP service. 
+Folder objects shall be created for subscribed folders, and will contain information about the remote folder 
+and the local mirror of that folder that allows the IMAP Server MTM to determine if the folders require synchronisation.
+@internalComponent
+@prototype
+*/
+	{
+public:
+	~CImapFolder();
+	// Class contructors
+	IMPORT_C static CImapFolder* NewLC(CImapSyncManager& aSyncMan, CMsvServerEntry& aServerEntry, TMsvEmailEntry& aEmailEntry, CImapSettings& aImapSettings, const TDesC& aFullFolderPath);
+	IMPORT_C static CImapFolder* NewL(CImapSyncManager& aSyncMan, CMsvServerEntry& aServerEntry, TMsvEmailEntry& aEmailEntry, CImapSettings& aImapSettings, const TDesC& aFullFolderPath);
+	IMPORT_C static void DoQuoteL(HBufC16*& aBuffer);
+
+	// Mirror folder tree of remote server
+	IMPORT_C TBool Changed(CImapSession& aSession);
+	IMPORT_C void SynchroniseL(TRequestStatus& aStatus, CImapSession& aSession, TBool aNewOnly, TInt  aDeleteOption);
+	IMPORT_C void SyncDeletesL(TRequestStatus& aStatus, CImapSession& aSession);
+	IMPORT_C void SelectL(TRequestStatus& aStatus, CImapSession& aSession, TBool aSelectInbox = ETrue );
+	IMPORT_C void ExamineL(TRequestStatus& aStatus, CImapSession& aSession);
+	IMPORT_C void UpdateSessionFolderInfoL(CImapSession& aSession);
+	
+	// Get Mailbox name and Id
+	IMPORT_C TDesC& FullFolderPathL();
+	IMPORT_C TMsvId MailboxId();
+
+	IMPORT_C void DeleteMessageL(const TMsvId aMessage);
+
+	IMPORT_C void AppendSetSeenL(const TUint32 aMessage);
+	IMPORT_C void AppendClearSeenL(const TUint32 aMessage);
+
+	void SetFullFolderPathL(const TDesC& aFullFolderPath);
+	void SetParentId(TMsvId aParentId);
+
+	void OnFetchLD(CImapFetchResponse* aImapFetchResponse);
+	void OnFetchCommit();
+	
+	IMPORT_C HBufC16* MakePathL(const TBool aIncludeLeaf);
+	
+	// Getting the progress updates
+	IMPORT_C void Progress(TImap4SyncProgress& aProgress);
+	
+	// Returns selection of messages to auto-fetch
+	IMPORT_C TInt GetFetchMessageChildrenL(CMsvEntrySelection& aSelection);
+
+	void SetFolderMatched(TBool aFolderMatched);
+	TBool FolderMatched();
+
+	static TInt CompareByFolderName(const CImapFolder& aFirst, const CImapFolder& aSecond);
+
+private:
+	CImapFolder(CImapSyncManager& aSyncMan,CMsvServerEntry& aServerEntry, CImapSettings& aImapSettings);
+	void ConstructL(CMsvServerEntry& aServerEntry, TMsvEmailEntry& aEmailEntry, const TDesC& aFullFolderPath);
+	void DoRunL();
+	void DoCancel();
+	void DoComplete(TInt& aStatus);
+	void CompleteSelf();
+
+	TBool CheckAndProgressMessageSyncL();
+	TInt  GetSyncThreshold();
+	void  CheckMessagesInRangeL(TInt aSyncThreshold);
+	TBool CreateAndSendUIDSearchStringL(TRequestStatus& aStatus);
+	void CheckForMissingMessagesUidsL();
+	
+	void SetEntryL(const TMsvId aId);
+	void ChangeEntryL(const TMsvEntry& aEntry);
+	void ChangeEntryBulkL(const TMsvEntry& aEntry);
+
+	void SynchroniseNewL();
+	void SynchroniseRangeL(const TUint32 aLowUid, const TUint32 aHighUid);
+	void ClearChangeCounts();
+
+	void GetChildrenL(CMsvEntrySelection& aSelection);
+	void GetMessageChildrenL(const TMsvId aFolder, CMsvEntrySelection* aChildren);
+	void SyncCompleteL();
+	void ResetSubscriptionFlagsL(const TMsvId aFolder);
+	void MakeSortedFolderIndexL(TBool aUseCachedEntryData);
+	TBool ProcessSeenFlagsL(TSeenFlagUpdateMode aUpdateMode);
+	void SetMessageFlagsL(TMsvEmailEntry& aEntry, CImapBodyStructure* aBodyStructure);
+	void GetFlagsForBodyStructurePart(CImapBodyStructure* aBodyStructure,
+	                                  TBool& aHasAttachments, TBool& aHasHtml,
+	                                  TBool& aAfterRelated, TBool& aAfterAlternative,
+	                                  TBool& aHtmlAfterAltRel, TBool& aHasICalendar,
+	                                  TBool& aHasVCalendar, TInt& aSize);
+	void ClearNewFlagsIfRequiredL();
+
+private:
+	// External data objects owned by the object creator
+	CImapSyncManager& 	iSyncManager; 
+	CMsvServerEntry& 	iServerEntry;
+	CImapSettings& 		iImapSettings;
+	CImapSession*		iSavedSession; 
+	
+	// Folder data members
+	TMsvId 		iMailboxId;
+	TInt 		iMailboxSize;
+	TInt		iMailboxRecent;
+	RBuf	 	iFullFolderPath;
+
+	// Progress and Sync states
+	CImapSyncManager::TSynchroniseState	iSyncState;
+	CImapSyncManager::TSynchroniseState	iNextAction;
+	TBool 								iSyncDoSingleStep;
+	
+	// Synchronisation process objects
+	RArray<TMsvCacheData>* iCachedEntryData;
+	CMsvEntrySelection*		iSelection;
+	CImapFolderInfo* 		iSessionFolderInfo;
+	CImapFolderIndex* 		iFolderIndex;
+	RArray<TUint> 			iMatchingMessageIds;
+	RArray<TUint> 			iDeletedMessageIds;
+	RArray<TUint> 			iMissingMessageIds;
+
+	// List of messages to have Seen FLAG set or clear
+	RArray<TUint>*		 	iSetSeenList;
+	RArray<TUint>*			iClearSeenList;
+
+	// Flags and data members to manage the sync process
+	RArrayMessageFlagInfo	iMessageFlagInfoArray;
+	TBool					iSomeUnread;
+	TInt					iHeadersFetched;
+	TInt					iOrphanedMessages;
+	TInt					iRemoteMessagesDeleteTagged;
+	TInt					iMsgsDone;
+	TInt 					iMsgsToDo;
+	TInt					iFolderPosition;
+	TInt					iSyncLimit;
+	TInt					iHighestUid;
+	TInt					iMissingUidLow;
+	TInt					iMissingUidHigh;
+	TInt					iDeleteOption;
+	TBool					iFlagChangedOnly;
+
+	// Character set conversion
+	CImConvertHeader& iHeaderConverter;
+
+	// General flag used by operations to indicate that this folder has been
+	// matched against some other list of folders
+	TBool iFolderMatched;
+	};
+
+#endif // __CIMAPFOLDER_H__