diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/server/inc/MSVSTORE.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/inc/MSVSTORE.H Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,298 @@ +// Copyright (c) 1998-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: +// MSVSTORE.H +// +/** + * @file + * @publishedAll + * @released + */ +#if !defined(__MSVSTORE_H__) +#define __MSVSTORE_H__ + +#include +#include +#include + +class CMsvCachedStore; +class CMsvBodyText; +class CMsvAttachment; + +//********************************** +// MMsvStoreObserver +//********************************** +// +// +// + +class MMsvStoreObserver +/** Observer interface to get events relating to a message store. + +This is used in the derivation of CMsvServerEntry and CMsvEntry. + +@publishedAll +@released +*/ + { +public: +/** +Defines message store event types. + +@publishedAll +@released +*/ + enum TMsvStoreEvent { /** A read-only message store was closed. */ + EMsvReadStoreClosed, // read only CMsvStore closed + /** An editable message store was closed. */ + EMsvEditStoreClosed // edit only CMsvStore closed + }; +public: + /** Receives a message store event. + + @param aEvent Event type + @param aId ID of the message to which the event relates + */ + virtual void HandleStoreEvent(TMsvStoreEvent aEvent, TMsvId aId)=0; + }; + + +//********************************** +// CMsvStore +//********************************** +// +// The entry structure that the client uses +// + +/* +Uid which are not needed to be known outside CMsvStore +@publishedAll +@released +*/ +const TUid KMsvEntryRichTextBody={0x10000F70}; + +class MMsvAttachmentManager; +class MMsvAttachmentManagerSync; +class CMsvAttachmentManager; +class MMsvStoreManager; +class CMsvPlainBodyText; + + +class CMsvStore : public CBase +/** Provides an interface over the message store that is associated with a message +entry. It is similar to the dictionary store in supporting the concept of +streams referenced by UID. + +This class is intended for use by MTM implementations. Message client applications +access the store through the higher-level functions provided by Client-side +and User Interface MTMs. + +A CMsvStore object is created by a CMsvEntry object and passed to a client +process. The client process then becomes responsible for deleting the CMsvStore +object. The store can be opened in two modes, read or edit, and only one CMsvStore +object can have edit access to a store. + +CMsvStore provides functions for general manipulation of the store, and for +accessing the standard body text stream. RMsvReadStream and RMsvWriteStream +must be used to access other streams. +@publishedAll +@released +*/ + { +public: + IMPORT_C ~CMsvStore(); + // + IMPORT_C void StoreBodyTextL(const CRichText& aRichTextBody); + + IMPORT_C void RestoreBodyTextL(CRichText& aRichTextBody); + IMPORT_C void RestoreBodyTextL(CRichText& aRichTextBody, TUint aCharsetOverride); + + IMPORT_C void DeleteBodyTextL(); + IMPORT_C TBool HasBodyTextL() const; + // + IMPORT_C void DeleteL(); // deletes the message store + IMPORT_C TInt SizeL(); // the size of the store + // + // The following give the Dictionary store interface + IMPORT_C TBool IsNullL() const; + IMPORT_C TBool IsPresentL(TUid aUid) const; + IMPORT_C void Remove(TUid aUid); + IMPORT_C void RemoveL(TUid aUid); + IMPORT_C void Revert(); + IMPORT_C void RevertL(); + IMPORT_C TInt Commit(); + IMPORT_C void CommitL(); + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + IMPORT_C TBool IsDbStore(); + void CommitHeaderL(); +#endif + + // Attachment Management + IMPORT_C MMsvAttachmentManager& AttachmentManagerL(); + IMPORT_C MMsvAttachmentManagerSync& AttachmentManagerExtensionsL(); + + // APIs to get the CMsvPlainBodyText interface. + IMPORT_C CMsvPlainBodyText* InitialisePlainBodyTextForWriteL(TBool aIs8Bit, TUint aCharsetId, TUint aDefaultCharsetId); + IMPORT_C CMsvPlainBodyText* InitialisePlainBodyTextForReadL(TInt aChunkLength); + + IMPORT_C void CreateShareProtectedAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo); + void Restore8BitBodyTextL(RFileReadStream& aInputStream); +protected: +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + IMPORT_C static CMsvStore* OpenForReadL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId, TUid aMtmId); + IMPORT_C static CMsvStore* OpenForWriteL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId, TUid aMtmId); +#endif + IMPORT_C CMsvStore(MMsvStoreObserver& aObserver, RFs& aFs, TMsvId aId, MMsvStoreManager& aStoreManager); + IMPORT_C static CMsvStore* OpenForReadL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId); + IMPORT_C static CMsvStore* OpenForWriteL(MMsvStoreObserver& aObserver, RFs& aFs, MMsvStoreManager& aStoreManager, TMsvId aId); + +private: + + void ConstructL(TBool aReadOnly); +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + void ConstructDbL(TUid aMtmId,TBool aReadOnly); + void RestoreL(); + void LoadHeaderEntryL(const TUid aMtmId, TBool aUid); +#endif + + //Methods to handle plain bodytext. + void RestorePlainBodyTextL(CRichText& aRichText, TUint aCharsetOverride); + void GetRichTextFrom8BitL(RFile& aBodyTextFile, CRichText& aRichText, TUint aCharSet, TUint aDefaultCharSet); + void GetRichTextFrom16BitL(RFile& aBodyTextFile, CRichText& aRichText); + void Convert8BitToRichTextL(RFile& aBodyTextFile, CRichText& aRichText, TUint aCharSet, TUint aDefaultCharSet); + + void Lock(); + inline const CMsvCachedStore& Store() const; + inline CMsvCachedStore& Store(); +private: + enum {EMsvStoreUnlocked, EMsvStoreLocked} iLockStatus; + + RFs& iFs; + MMsvStoreObserver& iObserver; + + + const TMsvId iId; + CMsvCachedStore* iStore; + TBool iConstructed; + CMsvBodyText* iBodyText; + + MMsvStoreManager& iStoreManager; + CMsvAttachmentManager* iAttachmentManager; + +friend class CMsvEntry; +friend class CMsvServerEntry; +friend class RMsvReadStream; +friend class RMsvWriteStream; +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) +friend class TMsvWriteStore; +friend class TMsvReadStore; +#endif + }; + + +class RMsvReadStream : public RReadStream +/** Accesses the streams in a message store with read access. + +Before it is used, +a CMsvStore must have been opened on the message store with read or read/write +access. + +This class is intended for use by MTM implementations to store MTM-specific +information. Message client applications access the store through the higher-level +functions provided by Client-side and User Interface MTMs. + +Most of its functionality is provided by the base class RReadStream. +@publishedAll +@released +*/ + { +public: + IMPORT_C void OpenL(const CMsvStore& aMsvStore, TUid aUid); + IMPORT_C void OpenLC(const CMsvStore& aMsvStore,TUid aUid); + void OpenLC(CMsvCachedStore& aStore,TUid aUid); + }; + + +class RMsvWriteStream : public RWriteStream +/** Accesses the streams in a message store with write access, or creates new streams. +Before it is used, a CMsvStore must have been opened on the message store +with write access. + +This class is intended for use by MTM implementations to store MTM-specific +information. Message client applications access the store through the higher-level +functions provided by Client-side and User Interface MTMs. + +Most of its functionality is provided by the base class RWriteStream. +@publishedAll +@released +*/ + { +public: + IMPORT_C void AssignLC(CMsvStore &aMsvStore, TUid aUid); + IMPORT_C void AssignL(CMsvStore &aMsvStore, TUid aUid); + void AssignLC(CMsvCachedStore &aStore, TUid aUid); + }; + + + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + +/** Accesses the message store with write access, or creates new header entry. +Before it is used, a CMsvStore must have been opened on the message store +with write access. + +This class is intended for use by MTM implementations to store MTM-specific +information. Message client applications access the store through the higher-level +functions provided by Client-side and User Interface MTMs. + +@publishedAll +@released +*/ +class TMsvWriteStore + { +public: + IMPORT_C TMsvWriteStore(CMsvStore& aMsvStore); + IMPORT_C void AssignL(CHeaderFields* aHeaderFields); + IMPORT_C void CommitL(); +public: + CMsvStore& iMsvStore; + }; + +/** Accesses the a message store with read access. + +Before it is used, +a CMsvStore must have been opened on the message store with read or read/write +access. + +This class is intended for use by MTM implementations to store MTM-specific +information. Message client applications access the store through the higher-level +functions provided by Client-side and User Interface MTMs. + +@publishedAll +@released +*/ + +class TMsvReadStore + { +public: + IMPORT_C TMsvReadStore(CMsvStore& aMsvStore, TUid aUid); + IMPORT_C void LoadL(CHeaderFields*& aHeaderFields); + IMPORT_C void ReadL(CHeaderFields*& aHeaderFields); +public: + CMsvStore& iMsvStore; + TUid iUid; + }; +#endif + +#endif