diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/server/inc/CMsvAttachmentManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/inc/CMsvAttachmentManager.h Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,136 @@ +// Copyright (c) 2004-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 __CMSVATTACHMENTMANAGER_H__ +#define __CMSVATTACHMENTMANAGER_H__ + +#include + +#include +#include +#include + +class CMsvStore; +class MMsvStoreManager; +class CCopyOneFile; +class RFs; +class CMsvAttachmentRename; + +/** +Provides the implementation of the Attachment API. + +The attachment API interface class manages all the attachment management and +uses MMsvStoreManager to provide access to the message store to manage the physical +attachment files and manipulate the attachment stream in the message store. + +@see MMsvAttachmentManager +@internalComponent +*/ +class CMsvAttachmentManager : public CActive, + public MMsvAttachmentManager, + public MMsvAttachmentManagerSync + { +public: + static CMsvAttachmentManager* NewL(CMsvStore& aStore, MMsvStoreManager& aStoreManager, const TMsvId aEntryId, RFs& aFs, TBool aReadOnly); + ~CMsvAttachmentManager(); + + void RestoreL(); + void StoreL(); + void HandleCommitComplete(); + + void CreateShareProtectedAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo); + +private: + CMsvAttachmentManager(CMsvStore& aStore, MMsvStoreManager& aStoreManager, const TMsvId aEntryId, RFs& aFs, TBool aReadOnly); + void ConstructL(); + + TMsvAttachmentId GenerateAttachmentId(); + TInt IndexPositionOfAttachmentL(TMsvAttachmentId aId) const; + void CompleteSelf(); + void CreateAttachmentInStoreLC(TDes& aFileName, RFile& aFile, CMsvAttachment* aAttachmentInfo, TBool aIsShareProtected); + void DoAttachmentRenameL(TInt aIndex, const TDesC& aNewName); + TInt InternaliseRenameLockL(); + void ExternaliseRenameLockL(); + + // from CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + + // from MMsvAttachmentManager + virtual void AddAttachmentL(const TDesC& aFilePath, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual void AddAttachmentL(RFile& aFileHandle, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual void AddLinkedAttachmentL(const TDesC& aFilePath, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual void AddEntryAsAttachmentL(TMsvId aEntryId, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual void CreateAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual void RenameAttachmentL(TInt aIndex, const TDesC& aNewName, TRequestStatus& aStatus); + virtual TInt AttachmentCount() const; + virtual CMsvAttachment* GetAttachmentInfoL(TInt aIndex); + virtual CMsvAttachment* GetAttachmentInfoL(TMsvAttachmentId aId); + virtual void ModifyAttachmentInfoL(CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); + virtual RFile GetAttachmentFileL(TInt aIndex); + virtual RFile GetAttachmentFileL(TMsvAttachmentId aId); + virtual RFile GetAttachmentFileForWriteL(TInt aIndex); + virtual RFile GetAttachmentFileForWriteL(TMsvAttachmentId aId); + virtual void RemoveAttachmentL(TInt aIndex, TRequestStatus& aStatus); + virtual void RemoveAttachmentL(TMsvAttachmentId aId, TRequestStatus& aStatus); + virtual void CancelRequest(); + + // from MMsvAttachmentManagerSync + virtual void CreateAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo); + virtual void RenameAttachmentL(TInt aIndex, const TDesC& aNewName); + virtual void RemoveAttachmentL(TInt aIndex); + virtual void ModifyAttachmentInfoL(CMsvAttachment* aAttachmentInfo); + +private: + /** The message store representing the current message entry. */ + CMsvStore& iStore; + + /** The store manager providing access to the message store. */ + MMsvStoreManager& iStoreManager; + + /** The current message entry that the attachment manages. */ + const TMsvId iEntryId; + + /** A connected file server session. */ + RFs& iFs; + + /** Array of attachments that are associated with the entry. */ + RPointerArray iAttachments; + + /** A persisted value used to generate attachment Ids to assign to new attachments. */ + TUint iIdGenerator; + + /** An array to list the attachments that are due for deletion. */ + RPointerArray iDeletedAttachments; + + /** An array to list the attachment files that have been copied into the store + but not yet commited. */ + RPointerArray iAddedAttachments; + + /** Utility for copying a single file. */ + CCopyOneFile* iCopyOneFile; + + /** Flag indicating whether the store is Read-Only. */ + TBool iReadOnly; + + /** Caller's request status to complete. */ + TRequestStatus* iReportStatus; + + /** An array to manage the renaming of attachments. */ + RPointerArray iRenamed; + }; + +#endif // __CMSVATTACHMENTMANAGER_H__