mmsengine/mmsmessage/inc/mmsmessageoperation.h
changeset 0 72b543305e3a
child 23 238255e8b033
--- /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 <mtclbase.h>   // TMsvPartList
+#include <msvapi.h>     // 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<TMsvId>    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