diff -r 2fe1408b6811 -r e1b950c65cb4 epoc32/include/mw/cmsvplainbodytext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/mw/cmsvplainbodytext.h Wed Mar 31 12:27:01 2010 +0100 @@ -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 the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __CMSVPLAINBODYTEXT_H__ +#define __CMSVPLAINBODYTEXT_H__ + + +#include +#include +#include + +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 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__