email/pop3andsmtpmtm/clientmtms/inc/CACHEMAN.H
changeset 0 72b543305e3a
child 76 60a8a215b0ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/inc/CACHEMAN.H	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,143 @@
+// Copyright (c) 1999-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:
+// CACHEMAN.H
+//
+/**
+ * @file 
+ * @publishedAll
+ * @released
+ */
+#if !defined (__CACHEMAN_H__)
+#define __CACHEMAN_H__
+
+#include <mentact.h>
+#include <msvstd.h>
+#include <msvapi.h>
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS  
+#include <cimprunemessage.h>
+#include "cimfinder.h"
+#endif
+
+class CImMessageFinder;
+class CImMessageCounter;
+
+struct TImCacheManagerProgress
+/** Holds progress of a cache management cleanup operation.
+
+@see CImCacheManager::ProgressL() 
+@publishedAll
+@released
+*/
+	{
+public:
+	/** Total number of messages to process.
+	
+	Note that, immediately after a CImCacheManager object is started, the progress 
+	operation may return 1 for iTotalMessages and 0 for iMessagesProcessed, regardless 
+	of the total number of messages. This is because the counter for the iTotalMessages 
+	operates asynchronously and may not have counted all of the messages at that 
+	time. */
+	TInt iTotalMessages;
+	/** Number of messages processed so far. */
+	TInt iMessagesProcessed;
+	};
+
+class CImCacheManager : public CMsvOperation
+/** Provides management of the local cache of messages in remote mailboxes.
+
+A mailbox that is being used in disconnected mode allows the user access to 
+message data by opening the message directly from the remote mailbox. If the 
+required message has been downloaded previously, then it will not necessarily 
+need to be downloaded again. This functionality is achieved by preserving 
+the message data locally, under the remote service entry. The preserved message 
+data acts as a cache to allow the user access to the message without the need 
+for it to be downloaded every time. 
+
+The cache management functionality is required to reduce the amount of memory 
+that is consumed by the message cache. CImCacheManager provides a mechanism 
+for asynchronously traversing a message tree and for removing text and attachment 
+data from messages. Deleting more message data will free up more memory but 
+there is a higher chance that a user will need to download a message for a 
+second time. 
+
+CImCacheManager is an abstract base class, which can be specialised to implement 
+a filter (Filter()) that decides if data for a message shoulded be deleted: 
+for example, deletion could be restricted to 'all read messages over a week 
+old,' or, 'all read messages, over 20K in size which are also over a day old.' 
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C void StartL(TMsvId aRootEntry, TRequestStatus &aStatus);
+	IMPORT_C void StartL(const CMsvEntrySelection& aSelection, TRequestStatus &aStatus);
+	IMPORT_C ~CImCacheManager();
+	IMPORT_C const TDesC8& ProgressL();
+	IMPORT_C void DoCancel();
+
+protected:
+	IMPORT_C void ConstructL();
+	IMPORT_C CImCacheManager(CMsvSession& aSession, TRequestStatus& aObserverRequestStatus);
+
+	IMPORT_C void RunL();
+
+private:
+	// Override this function to filter the currently selected message (iCurrentEntry).
+	// Return TRUE if the current entry is to be pruned.
+	/** Tests if cache cleanup should be performed on a message entry.
+	
+	After StartL() has been called, this is called once for each message entry. 
+	It should return true if the body text and attachment data belonging to the 
+	current message, as held in iCurrentEntry, should be deleted, or false if 
+	the message should be left unchanged.
+	
+	This function must be implemented in any classes derived from CImCacheManager.
+	
+	@return True to clean the entry, false to leave it unchanged */
+	virtual TBool Filter() const = 0;
+
+	void DoRunL();
+
+	// Remove the store from the currently selected entry
+	inline void PruneMessageL();
+	
+protected:
+	/** Message entry currently being processed. */
+	CMsvEntry* iCurrentEntry;
+
+private:
+	CMsvSession& iSession;
+	CImMessageFinder* iMessageFinder;
+	CImMessageCounter* iMessageCounter;
+	CMsvOperation* iDeleteOperation;
+
+	TImCacheManagerProgress iProgress;
+	TRequestStatus* iReport;
+
+	enum TImcmState
+		{
+		EImcmLookingForMessage,
+		EImcmPruningMessages,
+		EImcmCountingMessages,
+		EImcmSkippingPrune
+		};
+
+	TMsvId iRootEntry;
+	TImcmState iState;
+	TPckgBuf<TImCacheManagerProgress> iProgressBuf;
+
+	CMsvEntrySelection* iMessagesToPrune;
+	};
+
+#endif