--- /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__