messagingfw/msgsrvnstore/server/inc/CMsvPlainBodyText.h
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/inc/CMsvPlainBodyText.h	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,156 @@
+// CMSVPLAINBODYTEXT.H
+
+// Copyright (c) 2007-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:
+//
+
+#ifndef __CMSVPLAINBODYTEXT_H__
+#define __CMSVPLAINBODYTEXT_H__
+
+
+#include <msvstore.h>
+#include <mentact.h>
+#include <charconv.h>
+
+class CMsvStore;
+class CRichText;
+class CParaFormatLayer;
+class CCharFormatLayer;
+class CCnvCharacterSetConverter;
+
+/**
+This class encapsulates plainbody text information for storage within the
+Message Store.It also populates a CRichText object with the 8 bit data
+decoded to the specified character set.If a character set is not specified,
+then the default character set is used.
+
+@publishedAll
+@released
+*/
+class CMsvPlainBodyText : public CMsgActive
+	{
+public:
+	static CMsvPlainBodyText* NewL(MMsvStoreManager& aMsvStoreManager, CMsvStore& aStore, TBool aIs8Bit, TUint aCharsetId, TUint aDefaultCharsetId, TMsvId aMessageId, RFs& aFs);
+	static CMsvPlainBodyText* NewL(MMsvStoreManager& aMsvStoreManager, CMsvStore& aStore, TMsvId aMessageId, RFs& aFs, TInt aChunkLength);
+
+	IMPORT_C ~CMsvPlainBodyText();
+
+	IMPORT_C void StoreChunkL(const TDesC8& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void StoreChunkL(const TDesC8& aChunk);
+
+	IMPORT_C void StoreChunkL(const TDesC16& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void StoreChunkL(const TDesC16& aChunk);
+
+	IMPORT_C void StoreRichTextAsPlainTextL(CRichText& aRichText);
+
+	IMPORT_C void CommitL();
+
+	IMPORT_C void NextChunkL(TDes8& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void NextChunkL(TDes8& aChunk);
+
+	IMPORT_C void NextChunkL(TDes16& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void NextChunkL(TDes16& aChunk);
+
+	IMPORT_C void PreviousChunkL(TDes8& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void PreviousChunkL(TDes8& aChunk);
+
+	IMPORT_C void PreviousChunkL(TDes16& aChunk, TRequestStatus& aStatus);
+	IMPORT_C void PreviousChunkL(TDes16& aChunk);
+
+
+	IMPORT_C void SetCharacterSetL(const TUint aCharset);
+	IMPORT_C TUint CharacterSet();
+	IMPORT_C TUint DefaultCharacterSet();
+
+ 	IMPORT_C TInt Size();
+
+private:
+	CMsvPlainBodyText(MMsvStoreManager& aMsvStoreManager, CMsvStore& aStore, TBool aIs8Bit, TUint aCharsetId, TUint aDefaultCharsetId, TMsvId aMessageId, RFs& aFs);
+	void ConstructWriteL();
+
+	CMsvPlainBodyText(MMsvStoreManager& aMsvStoreManager, CMsvStore& aStore,TMsvId aMessageId, RFs& aFs,TInt aChunkLength);
+	void ConstructReadL();
+
+	void PrepareToConvertL();
+	void ConvertChunkToUnicodeForStoreL(const TDesC8& aChunk);
+	TInt ConvertChunkToUnicodeForRestoreL();
+	void ExtractNextChunkFromRichText(TDes16& aChunk);
+	void ExtractPreviousChunkFromRichText(TDes16& aChunk);
+	void RevertL();
+	void DoRunL();
+	void DoComplete();
+	void DoCancel();
+
+private:
+	/** To access APIs related to RFile operations.*/
+	MMsvStoreManager& 			  iMsvStoreManager;
+	CMsvStore& 					  iStore;
+	/** Indicates whether to store text as 8 bit or 16 bit.*/
+	TBool 						  iIs8Bit;
+	/** The charset of the body text*/
+	TUint 						  iCharsetId;
+ 	TUint 					 	  iDefaultCharsetId;
+
+ 	/** The RFile Path.*/
+	HBufC*	 					  iFilePath;
+  	TMsvId 						  iMessageId;
+	RFs& 						  iFSession;
+
+	/** The RFile to which body text is written.*/
+	RFile 						  iFile;
+	/** Character converter for 8 to 16 bit conversion.*/
+	CCnvCharacterSetConverter* 	  iConverter;
+	CRichText* 					  iRichText;
+	CParaFormatLayer* 			  iParaLayer;
+	CCharFormatLayer* 			  iCharLayer;
+	TInt 						  iReadChunkLength;
+	/** Temporary buffer created to Store chunk while it is being written aynchronously.*/
+	RBuf16	 					  iTempChunk16;
+	/** Buffer used to read data from RFile.*/
+	RBuf8 						  iRfileReadBuf8;
+	/** Pointer to 8-bit buffer that needs to be written to RFile.*/
+	TPtrC8 						  iRfileWritePtr8;
+	/** The position from where to extract data in CRichText*/
+	TInt 						  iPos;
+	/** Contains the size of the chunk that will be read or write in the RFile*/
+	TInt 					 	  iChunkMaxLength;
+	/** Contains the remaining unconverted Unicode Data*/
+	HBufC8* 					  iRemainingUnConvertedData;
+	/** Array that stores the start positions of each chunk,in Rfile*/
+	RArray<TInt> 			 	  iStartPosOfEachChunkInFile;
+	/** Contains the start position of the next chunk*/
+	TInt 						  iStartPosOfNextChunk;
+	/** Contains the remaining converted Unicode Data*/
+	RBuf16						  iRemainingConvertedData;
+	/** Pointer to a 16 bit chunk that is being read from the store.*/
+	TDes16*	 					  iChunk16;
+	/** Pointer to a 8 bit chunk that is being read from the store.*/
+	TDes8* 						  iChunk8;
+	/** Indicates whether the Rfile is commited or not.*/
+	TBool 						  iIsCommitted;
+
+	/** Indicates whether the chunk being read is last.*/
+	TBool 						  iIsLastChunk;
+	/** Indicates whether call to DoRunl was initiated by PreviousChunkL method.*/
+	TBool 						  iPrevChunk;
+	/** Indicates whether call to DoRunl was initiated by 8 bit PreviousChunkL and NextChunkL methods.*/
+	TBool 						  iRetrieving8bit;
+	/** Enum indicating if RFile is being written or read */
+	enum {EMsvFileReading, EMsvFileWriting} iMsvFileStatus;
+	CCnvCharacterSetConverter::TAvailability iAvailable;
+	//Containes current position of the Rfile
+	TInt 						 iCurrentFilePos;
+	};
+
+#endif//__CMSVPLAINBODYTEXT_H__