diff -r 000000000000 -r 72b543305e3a mmsengine/mmsmessage/inc/mmsmessageoperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsengine/mmsmessage/inc/mmsmessageoperation.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,341 @@ +/* +* Copyright (c) 2002-2005 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: +* CMsvOperation class for MMS message creation. +* +*/ + + + +#ifndef CMMSMESSAGEOPERATION_H +#define CMMSMESSAGEOPERATION_H + +// INCLUDES +#include // TMsvPartList +#include // CMsvOperation etc + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class TRequestStatus; +class CMmsHeaders; +class CMmsSettings; + +// CLASS DECLARATION + +/** +* CMsvOperation class for MMS message creation. +* +* Currently this supports creation of Reply, Forward and New message entry +* to the desired destination folder. This class is used by MMS Client MTM, +* but can be used by other client application modules too. +* +* CMmsMessageOperation is derived from CMsvOperation class and can therefore +* supply progress information to a caller while the asynchronous operation is +* being carried out. +* +* The progress information provides the id of the created message when the +* message has been created in a 8-bit descriptor. While the operation is in +* progress the package will contain a null id (KMsvNullIndexEntryId). +* If there was an error while creating the message, then the message will be +* deleted and the package will contain null id. +* +* The progress will be packaged into an 8-bit descriptor in the normal manner, +* as described by the CMsvOperation API. +*/ +class CMmsMessageOperation :public CMsvOperation + { + public: // Constructors and destructor + + /** + * Destructor. + */ + IMPORT_C ~CMmsMessageOperation(); + + public: // New functions + + /** + * Crete new message entry. + * @param aObserverRequestStatus observer's request status. + * @param aMsvSession message server session. + * @param aDestination destination folder id. + * @param aServiceId MMS service id. + * @param aVisible if the new entry is visible. + * @param aInPreparation if the new entry is left under construction. + * @return this message operation object. + */ + IMPORT_C static CMmsMessageOperation* CreateNewL( + TRequestStatus& aObserverRequestStatus, + CMsvSession& aMsvSession, + TMsvId aDestination, + TMsvId aServiceId, + TBool aVisible = EFalse, + TBool aInPreparation = ETrue ); + + /** + * Crete new reply message entry. + * @param aObserverRequestStatus observer's request status. + * @param aMsvSession message server session. + * @param aMessageId original message id + * @param aDestination destination folder id + * @param aPartList message part list included in the new entry + * @param aServiceId MMS service id + * @param aVisible if the new entry is visible. + * @param aInPreparation if the new entry is left under construction. + * @return this message operation object. + */ + IMPORT_C static CMmsMessageOperation* CreateReplyL( + TRequestStatus& aObserverRequestStatus, + CMsvSession& aMsvSession, + TMsvId aMessageId, + TMsvId aDestination, + TMsvPartList aPartList, + TMsvId aServiceId, + TBool aVisible = EFalse, + TBool aInPreparation = ETrue ); + + /** + * Crete new forward message entry. + * @param aObserverRequestStatus observer's request status. + * @param aMsvSession message server session. + * @param aMessageId original message id + * @param aDestination destination folder id + * @param aPartList message part list included in the new entry + * @param aServiceId MMS service id + * @param aVisible if the new entry is visible. + * @param aInPreparation if the new entry is left under construction. + * @return this message operation object. + */ + IMPORT_C static CMmsMessageOperation* CreateForwardL( + TRequestStatus& aObserverRequestStatus, + CMsvSession& aMsvSession, + TMsvId aMessageId, + TMsvId aDestination, + TMsvPartList aPartList, + TMsvId aServiceId, + TBool aVisible = EFalse, + TBool aInPreparation = ETrue ); + + /** + * Crete new forward without retrieval entry. + * This function is used only for forwarding a message based on a received + * notification without fetching the whole message into the terminal. + * This is a static and synchronous function. + * @param aMsvSession message server session. + * @param aContentLocation of the related notification + * @param aRelatedEntry entryId of the notification that this forward refers to + * @param aDestination destination folder id + * @param aServiceId MMS service id + * @param aVisible if the new entry is visible. + * @param aInPreparation if the new entry is left under construction. + * @return entry id of the newly created entry + */ + IMPORT_C static TMsvId CreateForwardWithoutRetrievalL( + CMsvSession& aMsvSession, + const CMmsHeaders& aNotificationHeaders, + const TMsvId aRelatedEntry, + const TMsvId aDestination, + TMsvId aServiceId, + TBool aVisible = EFalse, + TBool aInPreparation = ETrue ); + + /** + * This returns the id of the created message if a message was created + * packaged into an 8-bit descriptor. If there was an error while creating + * the message, then the message will be deleted and the package will + * contain a null id. + * @return the id of the created message packaged into an 8-bit descriptor. + */ + IMPORT_C const TDesC8& FinalProgress(); + + public: // Functions from base classes + + /** + * Active object completion + */ + void RunL(); + + /** + * Active object cancellation + */ + void DoCancel(); + + /** + * Use this function to get information on the progress of the operation. + * @return descriptor holding progress information (message id). + */ + const TDesC8& ProgressL(); + + protected: // New functions + + protected: // Functions from base classes + + private: + + // Different operations that this class is able to perform + // NOTE: Forward without retrieval operation is not in this list + // because it is a static and syncronous operation. + enum TMmsOperation + { + ENew, + EReply, + EForward + }; + + // Possible states + // NOTE: forward without retrieval operation is synchronous and + // is not related to these + enum TMmsOperationState + { + ECreateMmsHeaders, + ECreateMessageEntry, + EStoreMmsHeaders, + ECopyAttachments, + ECompleteMessage, + EFinished + }; + + /** + * Symbian OS constructor is private. + * @param aMessageId original message id + * @param aOperation what to do. + */ + void ConstructL( + TMsvId aMessageId, + TMmsOperation aOperation ); + + /** + * C-style constructor. + * @param aObserverRequestStatus observer's request status + * @param aMsvSession message server session + * @param aDestination destination folder id + * @param aPartList message part list included in the new entry + * @param aServiceId MMS service id + * @param aVisible if the new entry is visible. + * @param aInPreparation if the new entry is left under construction. + */ + CMmsMessageOperation( + TRequestStatus& aObserverRequestStatus, + CMsvSession& aMsvSession, + TMsvId aDestination, + TMsvPartList aPartList, + TMsvId aServiceId, + TBool aVisible, + TBool aInPreparation ); + + /** + * Tidy up environment after error, and free memory. + * @param aError error code to be returned + */ + void ErrorRecovery( TInt aError ); + + /** + * Change the state of this operation. + */ + void ChangeStateL(); + + /** + * Select the next state of this operation. + */ + void SelectNextStateL(); + + /** + * Do the operations and change the state. + */ + void SelectAndChangeToNextStateL(); + + /** + * Signal the completion of a request. ( one step ) + */ + void RequestComplete( TInt aError ); + + /** + * Create MMS headers. Set default values from MMS service entry. + */ + void CreateNewMmsHeaderL(); + + /** + * Create new message entry. + */ + void CreateMessageEntryL(); + + /** + * Store MMS headers of the message + */ + void StoreMmsHeadersL(); + + /** + * Copy attachments entries and binary files from original message entry. + */ + void CopyAttachmentsL(); + + /** + * Complete the message. Count the message size and set flags. + */ + void CompleteMessageL(); + + /** + * Count the total size of attachments + */ + void AttachmentsSizeL(); + + public: // Data + + protected: // Data + + private: // Data + TInt iState; + TPckgBuf iDataMember; + TMsvId iNewMessageId; + CMsvOperation* iMsvOperation; + TMsvId iDestinationId; + TMsvPartList iPartList; + TMsvId iOrigMessageId; + TMmsOperation iOperation; + TMsvId iServiceId; + CMmsSettings* iSettings; + CMmsHeaders* iNewMmsHeaders; + TBool iVisible; + TBool iInPreparation; + TInt iAttachmentsSize; + TInt iMmsHeaderSize; + HBufC* iDescription; // message description + TMsvAttachmentId iOriginalRoot; // to retain root when forwarding + TInt iNewRoot; // index of root in new entry + // Separate source and target entry and store are needed + // for hanling attachments using the new attachment manager. + CMsvStore* iSourceStore; // need to keep open to copy attachments + CMsvStore* iTargetStore; // need to keep open to copy attachments + CMsvEntry* iSourceEntry; + CMsvEntry* iTargetEntry; + TInt iAttachmentCount; //number of attachments to be handled + TInt iCurrentAttachment; // index of attachmnet being handled + + public: // Friend classes + + protected: // Friend classes + + private: // Friend classes + + }; + +#endif // CMMSMESSAGEOPERATION_H + +// End of File