diff -r 6a20128ce557 -r ebfee66fde93 email/imap4mtm/imapsyncmanager/inc/cimapfolder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapsyncmanager/inc/cimapfolder.h Fri Jun 04 10:25:39 2010 +0100 @@ -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 +#include +#include +#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* iCachedEntryData; + CMsvEntrySelection* iSelection; + CImapFolderInfo* iSessionFolderInfo; + CImapFolderIndex* iFolderIndex; + RArray iMatchingMessageIds; + RArray iDeletedMessageIds; + RArray iMissingMessageIds; + + // List of messages to have Seen FLAG set or clear + RArray* iSetSeenList; + RArray* 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__