williamr@2: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@4: // MIUTMSG.H williamr@2: // williamr@2: williamr@2: #ifndef __MIUTMSG_H__ williamr@2: #define __MIUTMSG_H__ williamr@2: williamr@2: #include williamr@2: #include // TMsvEntry, CMsvOperation etc williamr@2: #include // CMsgActive williamr@2: #include // CImHeader, CImMimeHeader williamr@2: #include // CRichText etc williamr@2: #include // CImHeader, CImMimeHeader williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include // TImMessageField williamr@2: williamr@2: #include // RResourceFile williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: williamr@2: //#include williamr@2: #include williamr@2: williamr@2: //Content-Transfer-Encoding: types williamr@2: _LIT8(KMimeQuotedPrintable, " quoted-printable"); williamr@2: _LIT8(KMimeApplOctet, " application/octet-stream"); williamr@2: _LIT8(KMime7Bit, " 7-bit"); williamr@2: _LIT8(KMimeBase64, " base64"); williamr@2: _LIT8(KMimeMime, "MIME*"); williamr@2: // Content-Disposition: types williamr@2: _LIT8(KMimeInline, "inline"); williamr@2: _LIT8(KMimeAttachment, "attachment"); williamr@2: // Content-Type: types williamr@2: _LIT8(KMimeMultipart, "multipart"); williamr@2: _LIT8(KMimeText, "text"); williamr@2: _LIT8(KMimeImage, "image"); williamr@2: _LIT8(KMimeAudio, "audio"); williamr@2: _LIT8(KMimeVideo, "video"); williamr@2: _LIT8(KMimeApplication, "application"); williamr@2: _LIT8(KMimeMessage, "message"); williamr@2: // Content-Type: Multipart types williamr@2: _LIT8(KMimeMixed, "mixed"); williamr@2: _LIT8(KMimeRelated, "related"); williamr@2: _LIT8(KMimeAlternative, "alternative"); williamr@2: _LIT8(KMimeEncrypted, "encrypted"); williamr@2: _LIT8(KMimeParallel, "parallel"); williamr@2: _LIT8(KMimeDigest, "digest"); williamr@2: _LIT8(KMimeSigned, "signed"); williamr@2: // Content-Type: Text types williamr@2: _LIT8(KMimeHtml, "html"); williamr@2: _LIT8(KMimePlain, "plain"); williamr@2: _LIT8(KMimeDirectory, "directory"); williamr@2: // Content-Type: Message types williamr@2: _LIT8(KMimePartial, "partial"); williamr@2: _LIT8(KMimeExternal, "external-body"); williamr@2: _LIT8(KMimeRfc822, "rfc822"); williamr@2: // Content-Type: Directory types williamr@2: _LIT8(KMimeProfile, "profile"); williamr@2: _LIT(KMimeVCardExtension, ".vcf"); williamr@2: _LIT8(KMimeVCalender, "vcalendar"); williamr@2: // Content-Type: Image, Audio, Video, Application types williamr@2: _LIT8(KMimeBmp, "bmp"); williamr@2: _LIT8(KMimeGif, "gif"); williamr@2: _LIT8(KMimeJpeg, "jpeg"); williamr@2: _LIT8(KMimeTiff, "tiff"); williamr@2: _LIT8(KMimeWav, "wav"); williamr@2: _LIT8(KMimeZip, "x-gzip"); williamr@2: _LIT(KMimeHtmlExtension, ".html"); williamr@2: _LIT(KMiutMsgDefaultHtmlFileName, "attachment.html"); williamr@2: const TUid KUidMimeHeaders = {0x10204281}; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include "cimmessagepart.h" williamr@4: #endif williamr@4: williamr@2: class CImHtmlConverter; williamr@2: williamr@2: class CImAttachmentManager; williamr@2: class CMsvMimeHeaders; williamr@2: class CImPlainBodyText; williamr@2: williamr@2: // Mixin provides interface to Browser control to resolve MHTML URIs. williamr@2: williamr@2: class MImURITranslator williamr@2: /** Translates a URI in an MHTML message into a message body part file name. williamr@2: williamr@2: MHTML messages may contain multiple HTML body parts. Each of these body parts williamr@2: is able to reference another body part within the same multipart structure, williamr@2: or a body part within a parent multipart structure [RFC2110]. These references williamr@2: are called URI's. williamr@2: williamr@2: When an MHTML message is parsed by the message engine, the HTML body of each williamr@2: part is stored as a binary file. This interface provides a means of finding williamr@2: the file name of the body part that corresponds to a given a URI. williamr@2: williamr@2: The URI resolving process has the potential to become time consuming, therefore williamr@2: it is broken into two steps: williamr@2: williamr@2: Resolve asynchronously the relative URI into an absolute URI. The message williamr@2: body parts are recursively searched in order to find an absolute base for williamr@2: the relative URI [RFC2110, RFC1808]. williamr@2: williamr@2: Once a relative URI has been resolved in to an absolute URI, then the message williamr@2: is searched for a body part that corresponds to it [RFC2110]. williamr@2: williamr@2: If no matching body part can be found, then the absolute URI is returned to williamr@2: the caller in place of the filename. This absolute URI should be used to search williamr@2: for the required data externally, for example by using HTTP. williamr@2: williamr@2: @see CImEmailMessage williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** Starts an asynchronous operation to resolve a specified URI. williamr@2: williamr@2: @param aMessageId The ID of the body part containing the URI which is to be williamr@2: resolved. CImEmailMessage::FindFirstHTMLPageL() can be used to find the aMessageId williamr@2: parameter for the first HTML page in a message. williamr@2: @param rBase The base parameter from the HTML part that contains the URI to williamr@2: be resolved. If there is no base parameter in the HTML, then an empty descriptor williamr@2: should be passed in. williamr@2: @param rURI The URI to be resolved. williamr@2: @param aStatus Asynchronous status word */ williamr@2: virtual void FindUniversalResourceIdentifierL(TMsvId aMessageId, const TDesC& rBase, const TDesC& rURI, TRequestStatus &aStatus) = 0; williamr@2: williamr@2: /** Gets the results after a search. williamr@2: williamr@2: @param aLinkedEntryId On return, the message ID of the linked body part, providing williamr@2: one is found. Note that you should keep a record of the returned message ID williamr@2: as it is required for resolving any URI's that may be found in the linked williamr@2: body part. williamr@2: @param aFileFound On return, true if a linked body part has been found. It williamr@2: is set to false otherwise. williamr@2: @return If successful, the filename that corresponds to the URI, or the absolute williamr@2: URI if no matching file can be found. If failed, NULL. */ williamr@2: virtual HBufC* GetUniversalResourceIdentifierL(TMsvId& aLinkedEntryId, TBool& aFileFound) const = 0; williamr@2: williamr@2: /** Starts an asynchronous operation to resolve a specified URI. williamr@2: williamr@2: @param aMessageId The ID of the body part containing the URI which is to be williamr@2: resolved. CImEmailMessage::FindFirstHTMLPageFileHandleL() can be used to find the aMessageId williamr@2: parameter for the first HTML page in a message. williamr@2: @param aBase The base parameter from the HTML part that contains the URI to williamr@2: be resolved. If there is no base parameter in the HTML, then an empty descriptor williamr@2: should be passed in. williamr@2: @param aURI The URI to be resolved. williamr@2: @param aStatus Asynchronous status word */ williamr@2: virtual void FindUniversalResourceIdentifierFileHandleL(TMsvId aMessageId, const TDesC& aBase, const TDesC& aURI, TRequestStatus &aStatus) = 0; williamr@2: williamr@2: /** Gets the results after a search. williamr@2: williamr@2: @param aLinkedEntryId On return, the message ID of the linked body part, providing williamr@2: one is found. Note that you should keep a record of the returned message ID williamr@2: as it is required for resolving any URI's that may be found in the linked williamr@2: body part. williamr@2: williamr@2: @param aFile On return, the file handle corresponding to the URI if successful. williamr@2: If not successful, then this is not valid. williamr@2: williamr@2: @return KErrNone if successful and therefore aFile contains the filehandle williamr@2: that corresponds to the URI. An error code if unsuccessful and therefore williamr@2: aFile is not valid. */ williamr@2: virtual TInt GetUniversalResourceIdentifierFileHandle(TMsvId& aLinkedEntryId, RFile& aFile) const = 0; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: class CImMhtmlUriResolver; williamr@2: class CImRemoveMessagePart; williamr@2: class CImStoreMessagePart; williamr@2: class CImMimeHeader; williamr@2: williamr@2: class CImEmailMessage : public CMsgActive , public MImURITranslator williamr@2: /** williamr@2: This class can be used to manipulate new emails that williamr@2: have been created using CImEmailOperation when composing a message. williamr@2: williamr@2: Use an instance of this class to add attachments, MHTML parts, body williamr@2: text, and existing messages to a new message before it is to be sent. williamr@2: williamr@2: This class can also be used to retrieve the body text, list of attachments, williamr@2: and embedded messages from emails that have been downloaded and stored within williamr@2: the message store. williamr@2: williamr@2: If the store_8bit_body_text flag in imcm.rss is enabled, an instance of this class williamr@2: can be used to retrieve the original body text character set for a particular message. williamr@2: It can also be used to override the original body text character set so it will williamr@2: be decoded in a new character set next time it is viewed. williamr@2: williamr@2: @see CImEmailOperation williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** Flags that specify to process on any messages embedded in this message. */ williamr@2: enum TImEmailEntryType williamr@2: { williamr@2: /** Do not process embedded messages. */ williamr@2: EThisMessageOnly, williamr@2: /** Process embedded messages. */ williamr@2: EThisMessageAndEmbeddedMessages // i.e messages with in a message williamr@2: }; williamr@2: /** Flags to specify types of attachment. */ williamr@2: enum TImAttachmentType williamr@2: { williamr@2: /** All attachments. */ williamr@2: EAllAttachments=0, // all attachment files contained within this message (but not inside messages within this message) williamr@2: /** VCards. */ williamr@2: EVCards, williamr@2: /** VCalendars. */ williamr@2: EVCalendars, williamr@2: /** VCards, VCalendars and ICalendars. */ williamr@2: EVEntries, // ie VCards, VCalendars or ICalendars (or all three) williamr@2: /** Encrypted. */ williamr@2: EEncrypted, williamr@2: /** Signed. */ williamr@2: ESigned, williamr@2: /** Secure. */ williamr@2: ESecure, // ie Encrypted or signed (or both) williamr@2: /** ICalendars. */ williamr@2: EICalendars williamr@2: //.. add new items here williamr@2: }; williamr@2: public: williamr@2: IMPORT_C static CImEmailMessage* NewL(CMsvEntry& aEntry); williamr@2: IMPORT_C static CImEmailMessage* NewLC(CMsvEntry& aEntry); williamr@2: IMPORT_C ~CImEmailMessage(); williamr@2: williamr@2: IMPORT_C void GetAttachmentsListL(TRequestStatus& aStatus, TMsvId aMessageId, TImAttachmentType aAttachmentType,TImEmailEntryType aEntryType); williamr@2: IMPORT_C void GetAttachmentsListL(TMsvId aMessageId, TImAttachmentType aAttachmentType,TImEmailEntryType aEntryType); williamr@2: void DoGetAttachmentsListL(TMsvId aMessageId, TImAttachmentType aAttachmentType,TImEmailEntryType aEntryType); williamr@2: williamr@2: IMPORT_C void FindFirstHTMLPageL(TMsvId aMessageId, TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C const CMsvEntrySelection& Selection() const; // return selection williamr@2: IMPORT_C const TDesC8& ProgressL() const; williamr@2: williamr@2: IMPORT_C void GetBodyTextL(TRequestStatus& aStatus, TMsvId aMessageId, TImEmailEntryType aEntryType, CRichText& aRichText,CParaFormatLayer& aParaLayer,CCharFormatLayer& aCharLayer); williamr@2: IMPORT_C void GetBodyTextL(TMsvId aMessageId, TImEmailEntryType aEntryType, CRichText& aRichText,CParaFormatLayer& aParaLayer,CCharFormatLayer& aCharLayer); williamr@2: void DoGetBodyTextInitL(TMsvId aMessageId, TImEmailEntryType aEntryType, CRichText& aRichText,CParaFormatLayer& aParaLayer, CCharFormatLayer& aCharLayer); williamr@2: williamr@2: IMPORT_C void GetBodyTextEntryIdL(TRequestStatus& aStatus, TMsvId aMessageId, TImEmailEntryType aEntryType); williamr@2: IMPORT_C void GetBodyTextEntryIdL(TMsvId aMessageId, TImEmailEntryType aEntryType); williamr@2: williamr@2: IMPORT_C CImPlainBodyText* OpenPlainBodyTextForWriteL(); williamr@2: williamr@2: IMPORT_C CImPlainBodyText* OpenPlainBodyTextForReadL(TImEmailEntryType aEntryType, TInt aChunkLength); williamr@2: williamr@2: IMPORT_C virtual void FindUniversalResourceIdentifierL(TMsvId aMessageId, const TDesC& aBase, const TDesC& aURI, TRequestStatus &aStatus); williamr@2: IMPORT_C virtual HBufC* GetUniversalResourceIdentifierL(TMsvId& aLinkedEntryId, TBool& aFileFound) const; williamr@2: IMPORT_C void FindUniversalResourceIdentifierFileHandleL(TMsvId aMessageId, const TDesC& aBase, const TDesC& aURI, TRequestStatus &aStatus); williamr@2: IMPORT_C void FindFirstHTMLPageFileHandleL(TMsvId aMessageId, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual TInt GetUniversalResourceIdentifierFileHandle(TMsvId& aLinkedEntryId, RFile& aFile) const; williamr@2: IMPORT_C MMsvAttachmentManager& AttachmentManager() const; williamr@2: void AddAttachmentL(const TDesC& aFilePath, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); williamr@2: void AddAttachmentL(RFile& aFileHandle, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); williamr@2: void AddLinkedAttachmentL(const TDesC& aFilePath, CMsvAttachment* aAttachmentInfo,TRequestStatus& aStatus); williamr@2: void AddEntryAsAttachmentL(TMsvId aAttachmentEntryId, CMsvAttachment* aAttachmentInfo,TRequestStatus& aStatus); williamr@2: const RPointerArray& AttachmentInfoSelection() const; williamr@2: void RemoveAttachmentL(TMsvAttachmentId aAttachmentId,TRequestStatus& aStatus) ; williamr@2: void RemoveAttachedMessageL(TMsvAttachmentId aAttachmentId,TRequestStatus& aStatus) ; williamr@2: void CreateAttachmentL(const TDesC& aFileName, RFile& aAttachmentFile, CMsvAttachment* aAttachmentInfo, TRequestStatus& aStatus); williamr@2: void CheckEntryAndResetStoreMessageL(TMsvId aMessageId); williamr@2: void CheckEntryAndResetRemoveMessageL(TMsvId aMessageId); williamr@2: void DoSetActive(TRequestStatus& aStatus); williamr@2: CImMimeHeader* ConvertToImMimeHeadersL(CMsvMimeHeaders* aMimeHeaders); williamr@2: CMsvMimeHeaders* ConvertToMsvMimeHeadersL(CImMimeHeader* aMimeHeader); williamr@2: void AppendEntryAttachmentInfoL(); williamr@2: IMPORT_C void AddRelatedPartL(TMsvId aMessageId, const TDesC& aAttachmentFullName, TRequestStatus& aStatus, TMsvId aRelatedPartId, const TDesC8& aContentId); williamr@2: IMPORT_C void StoreBodyTextL(TMsvId aMessageId, CRichText& aRichText, TRequestStatus& aStatus); williamr@2: IMPORT_C void StoreBodyTextL(TMsvId aMessageId, CRichText& aRichText, TRequestStatus& aStatus, TBool aUsePlainTextStorage); williamr@2: IMPORT_C void GetMessageDigestEntriesL(TRequestStatus& aStatus, TMsvId aMessageId); williamr@2: IMPORT_C void GetCharacterSetL(TMsvId aMessageId, TUint& aCharacterSetId, TBool& aOverride); williamr@2: IMPORT_C void SetCharacterSetL(TMsvId aMessageId, TUint aCharacterSetId); williamr@2: IMPORT_C void StoreBodyTextWithMimeHeaderL(TMsvId aMessageId, CRichText& aRichText, const CImMimeHeader& aMimeHeader, TRequestStatus& aStatus); williamr@2: williamr@2: TMsvId EmailEntryId(); williamr@2: williamr@2: private: williamr@2: void DoRunL(); williamr@2: void DoCancel(); williamr@2: CImEmailMessage(CMsvEntry& aEntry); williamr@2: void ConstructL(); williamr@2: void DoComplete(TInt&); williamr@2: void DoStateL(); williamr@2: williamr@2: void Start(TRequestStatus& aStatus); williamr@2: void StartL(); williamr@2: williamr@2: void Reset(); williamr@2: void ChangeMessageContextL(); williamr@2: void CompareChildrenAndPopulateSelL(); williamr@2: void AttachmentInfoL(); williamr@2: void AssembleBodyTextL(); williamr@2: void CheckAndInitialiseL(TMsvId aMessageId); williamr@2: williamr@2: void AppendAttachmentL(); williamr@2: TBool MessageDigestEntry(); williamr@2: TBool HandleDifferentFolderTypesL(); williamr@2: void GetTextForAlternateFolderL(); williamr@2: void GetTextForRelatedFolderL(); williamr@2: void GetAttachmentsForRelatedFolderL(); williamr@2: TBool GetBodyTextCharacterSetL(); williamr@2: TUint GetOverrideCharacterSetL(); williamr@2: TInt FindFilename(const CImMimeHeader& aMimeInfo, TPtrC8& aFilename); williamr@2: void FindFilenameDecodeL( williamr@2: const CImMimeHeader& aMimeInfo, TFileName& aFileName, TUint aCharset); williamr@2: void AppendAttachmentNameL(); williamr@2: void SetBodyTextCharacterSetL(TMsvId aEntryId, TUint8 aNewCharacterSetId); williamr@2: void FindFirstBodyTextPartL(TMsvId aEntryId, TBool& found); williamr@2: williamr@2: CImMimeHeader* FindAttachmentMimeHeaderL(); williamr@2: TMsvEntry FindIdEntryL(TMsvId aMessageId); williamr@2: williamr@2: void DoGetBodyTextEntryIdL(TMsvId aMessageId, TImEmailEntryType aEntryType); williamr@2: williamr@2: williamr@2: enum TImEmailMessageStates williamr@2: { williamr@2: EIdle=0, williamr@2: ETextForThisMsg, williamr@2: ETextForMsgDigest, williamr@2: ETextEntryIdForThisMsg, williamr@2: ETextEntryIdMsgDigest, williamr@2: ETextForThisMsgGetCharacterSet, williamr@2: EAttachmentsForThisMsg, williamr@2: EAttachmentsForMsgDigest, williamr@2: EMsgDigestEntries, williamr@2: EResolveURI, williamr@2: EStoreMessagePart, williamr@2: ERemoveMessagePart, williamr@2: EFinished williamr@2: }; williamr@2: CMsvEntry& iClientEntry; williamr@2: CMsvEntrySelection* iCompleteSel; williamr@2: CMsvEntrySelection* iResultSel; williamr@2: williamr@2: CRichText* iRichText; williamr@2: CParaFormatLayer* iParaLayer; williamr@2: CCharFormatLayer* iCharLayer; williamr@2: TMsvId iParentMsgId; // the Id passed into Getxxx() function representing the 'parent' message ID williamr@2: TImEmailMessageStates iState; williamr@2: TImAttachmentType iAttachmentType; williamr@2: TMsvEmailEntry iEntry; williamr@2: CImMhtmlUriResolver* iUriResolver; williamr@2: TBool iUriFileFound; williamr@2: CImStoreMessagePart* iStoreMessagePart; williamr@2: CImRemoveMessagePart* iRemoveMessagePart; williamr@2: TPckgBuf iProgress; williamr@2: TImEmailEntryType iEntryType; williamr@2: TBool iIsAMHTMLmessage; williamr@2: TUint iCharacterSetId; williamr@2: RFs iFs; williamr@2: CDesCArray* iAttachmentNameList; williamr@2: CImAttachmentManager* iAttachmentManager; williamr@2: CMsvStore* iStore; williamr@2: williamr@2: // This is the entry Id using which the CImEmailMessage was created. williamr@2: // store this , so that when the message id to which attachment is williamr@2: // retrieved then the CIMEmailMessage is reset with this Id. williamr@2: TMsvId iEmailEntryId; williamr@2: enum TImAttachmentStates williamr@2: { williamr@2: ENoAttachment=0, williamr@2: EAddAttachment, williamr@2: EDeleteAttachment, williamr@2: ECreateAttachment williamr@2: }; williamr@2: TInt iAttachmentState; williamr@2: williamr@2: }; williamr@2: williamr@2: class CImEmailOperation : public CMsvOperation williamr@2: /** Provides simple email messages creation functions, including creation of new williamr@2: messages, replies, forwarded messages, and receipts. williamr@2: williamr@2: Both plain-text and HTML messages, with or without attachments, can be created. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CImEmailOperation* CreateNewL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateNewL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aDestination, TMsvId aSmtpServiceId, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority = EPriorityStandard); williamr@2: williamr@2: IMPORT_C static CImEmailOperation* CreateNewL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aDestination, TMsvId aSmtpServiceId, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority , TBool aUsePlainTextStorage); williamr@2: williamr@2: IMPORT_C static CImEmailOperation* CreateReplyL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TDesC& aFormatString, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateReplyL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateReplyL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority); williamr@2: IMPORT_C static CImEmailOperation* CreateReplyL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority, TBool aUsePlainTextStorage); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TDesC& aFormatString, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvId aSmtpServiceId, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority = EPriorityStandard); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvId aSmtpServiceId, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority, TBool aUsePlainTextStorage); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardAsAttachmentL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateForwardAsAttachmentL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aSmtpServiceId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority = EPriorityStandard); williamr@2: IMPORT_C static CImEmailOperation* CreateReceiptL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TDesC& aFormatString, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateReceiptL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: IMPORT_C static CImEmailOperation* CreateReceiptL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority); williamr@2: IMPORT_C static CImEmailOperation* CreateReceiptL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority, TBool aUsePlainTextStorage); williamr@2: IMPORT_C ~CImEmailOperation(); williamr@2: IMPORT_C const TDesC8& FinalProgress(); williamr@2: void DoCancel(); williamr@2: void RunL(); williamr@2: const TDesC8& ProgressL(); williamr@2: williamr@2: static CImEmailOperation* CreateCopyL(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aMessageId, TMsvId aDestination, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType); williamr@2: williamr@2: private: williamr@2: enum TImEmailOperation williamr@2: { williamr@2: ENew = 0, williamr@2: EReply = 1, williamr@2: EForward = 2, williamr@2: EReceipt = 3, williamr@2: EDeletingBadEmail = 4, williamr@2: ECopy = 5, williamr@2: EAttachOriginal = 0x80, williamr@2: EForwardAsAttachment = EForward | EAttachOriginal, williamr@2: EReplyAsAttachment = EReply | EAttachOriginal williamr@2: }; williamr@2: williamr@2: private: williamr@2: CImEmailOperation(TRequestStatus& aObserverRequestStatus, CMsvSession& aMsvSession, TMsvId aDestination, TMsvId aSmtpServiceId, TMsvPartList aPartList, const TMsvEmailTypeList& aMsvEmailTypeList, TUid aMsgType, TInt aPriority, TBool aUsePlainTextStorage); williamr@2: void ConstructL(TMsvId aMessageId, const TDesC& aFormatString, TImEmailOperation aOperation); williamr@2: void ConstructL(TMsvId aMessageId, TImEmailOperation aOperation); williamr@2: void ConstructL(TImEmailOperation aOperation); williamr@2: void OpenAndReadResourceFileL(); williamr@2: void SetSmtpServiceFromDefaultsL(); williamr@2: void SetSmtpServiceFromOriginalMessageL(); williamr@2: void ErrorRecovery(TInt error); williamr@2: void SelectNextStateL(); williamr@2: void ProcessStateL(); williamr@2: void SelectAndProcessNextStateL(); williamr@2: void RequestComplete(TInt aError); williamr@2: void CreateNewHeaderL(); williamr@2: void GetBodyTextL(); williamr@2: TInt RemoveIncompleteAttachments(); williamr@2: void CreateEntryDetails(TMsvEmailEntry& aMsvEmailEntry); williamr@2: void CreateNewMessageL(TMsvId aDestinationId); williamr@2: void CreateMultipartMixedFolderEntryL(); williamr@2: void CreateTextEntryL(TMsvId aFolderId); williamr@2: void StoreBodyL(); williamr@2: void StorePlainBodyL(); williamr@2: void CheckForSignatureOrVCardL(); williamr@2: void CreateAttachmentEntryL(); williamr@2: void StoreAttachmentL(); williamr@2: void CreateMultipartAlternativeFolderEntryL(); williamr@2: void AppendHtmlAttachmentL(); williamr@2: void AttachOriginalMessageToNewMessageL(); williamr@2: void CompleteEmailOperationL(); williamr@2: void CreateHTMLEntryL(); williamr@2: void PrepareToStoreHTMLEntryTextL(); williamr@2: void StoreHTMLEntryTextL(); williamr@2: void CreateVCardAttachmentL(); williamr@2: void AddVCardAttachmentL(); williamr@2: void AddMessageAsAttachmentL(); williamr@2: TPtrC GetDefaultAttachmentName(); williamr@2: void RestoreSmtpSettingsL(); williamr@2: TMsvId ServiceId(); williamr@2: TBool NeedMultipartMixedFolder() const; williamr@2: void ReadDefaultHtmlAttachmentNameL(TDes& aFileName); williamr@2: void CreateDefaultAttachmentL(); williamr@2: void AddMessageAttachmentInfoL(TMsvId aAttachmentMessageId); williamr@2: void ResetStoreL(); williamr@2: void CreateAddressListStringL(HBufC*& aListBuffer, const CDesCArray& aAddressArray); williamr@2: void RestoreOriginalHeaderL(); williamr@2: void SetBodyHeaderFormatL(); williamr@2: static void ClosePlainBodyTextArray(TAny* aPtr); williamr@2: void StorePlainTextL(); williamr@2: TInt GetPlainBodyTextSizeL(); williamr@2: williamr@2: private: williamr@2: enum TImEmailOperationState williamr@2: { williamr@2: ECreateNewHeader, williamr@2: EGetBodyText, williamr@2: EGetAttachmentList, williamr@2: EGetMessageDigest, williamr@2: ECreateNewMessageEntry, williamr@2: ECheckMultipartMixedFolderRequired, williamr@2: ECreateMultipartMixedFolderEntry, williamr@2: ECheckMultipartAlternativeFolderRequired, williamr@2: ECreateMultipartAlternativeFolderEntry, williamr@2: ECheckTextEntryRequired, williamr@2: ECreateTextEntry, williamr@2: EStoreBody, williamr@2: ECheckVCardRequired, williamr@2: ECreateVCardAttachment, williamr@2: EAddVCardAttachment, williamr@2: ECheckHTMLEntryRequired, williamr@2: ECreateHTMLEntry, williamr@2: EPrepareToStoreHTMLEntryText, williamr@2: EStoreHTMLEntryText, williamr@2: ECheckAttachOriginalMessageRequired, williamr@2: EAttachOriginalMessage, williamr@2: ECheckHTMLPageRequired, williamr@2: EFindHTMLPage, williamr@2: ECopyHTMLPartToAttachment, williamr@2: ECheckAttachmentsRequired, williamr@2: ECreateAttachmentEntry, williamr@2: EStoreAttachment, williamr@2: ECheckEmbeddedMessagesRequired, williamr@2: EAddEmbeddedMessagesAsAttachments, williamr@2: ECompleteEmailOperation, williamr@2: EFinished williamr@2: ,ECreateDefaultHtmlAttachment, williamr@2: EStoreHTMLTextInEntry, williamr@2: EAddMessageAttachmentInfo williamr@2: }; williamr@2: williamr@2: // Flags specifying format of body header information to include williamr@2: // in reply and forwarded email addresses williamr@2: enum TImBodyHeaderFormat williamr@2: { williamr@2: ENoToCcInfo=0, williamr@2: EToOnly, williamr@2: ECcOnly, williamr@2: EToAndCc williamr@2: }; williamr@2: williamr@2: CMsvEntry* iMsvEntry; williamr@2: CMsvOperation* iMsvOperation; williamr@2: williamr@2: CImHeader* iNewHeader; williamr@2: CParaFormatLayer* iParaLayer; williamr@2: CCharFormatLayer* iCharLayer; williamr@2: CRichText* iRichText; williamr@2: CImEmailMessage* iEmailMessage; williamr@2: HBufC* iFormatString; williamr@2: CFileMan* iFileMan; williamr@2: CImSmtpSettings* iSmtpSettings; williamr@2: TInt iState; williamr@2: TImEmailOperation iOperation; williamr@2: TMsvId iDestinationId; williamr@2: TMsvId iMultipartMixedId; williamr@2: TMsvId iMultipartAlternativeId; williamr@2: TMsvId iOrigMessageId; williamr@2: TMsvId iNewMessageId; williamr@2: TMsvId iSmtpServiceId; williamr@2: TMsvId iAttachedMessageId; williamr@2: TUid iMsgType; williamr@2: TMsvPartList iPartList; williamr@2: TMsvEmailTypeList iMsvEmailTypeList; williamr@2: TInt iAttachmentCount; williamr@2: TInt iTotalAttachments; williamr@2: TPckgBuf iDataMember; williamr@2: HBufC* iBodyHeaderFormatString; williamr@2: HBufC* iBodyHeaderDateTimeFormatString; williamr@2: HBufC* iBodyHeaderToString; williamr@2: HBufC* iBodyHeaderCcString; williamr@2: HBufC* iBodyHeader; williamr@2: HBufC* iUserEmailAddress; williamr@2: TInt iRichTextSize; williamr@2: TInt iVCardAndHtmlSize; williamr@2: TBool iOrigMessageHtml; williamr@2: TBool iHtmlNoTextAlt; williamr@2: TInt iEmbeddedMessagesToProcess; williamr@2: TImMessageField iMessageField; williamr@2: williamr@2: // for MIME messages: williamr@2: TBool iCreateHtmlMessage; williamr@2: TBool iMultipartMixedFolderCreated; williamr@2: TBool iMultipartAlternativeFolderCreated; williamr@2: TMsvId iTextId; williamr@2: TMsvId iHtmlId; williamr@2: TMsvId iVcardId; williamr@2: williamr@2: // Used when converting rich text to html williamr@2: CImHtmlConverter* iHtmlConverter; williamr@2: TBool iFinishedConvertingHTML; williamr@2: williamr@2: // Relating to adding Signature and/or Vcard to an email williamr@2: TBool iNeedToAddVCardAttachment; williamr@2: HBufC* iDefaultVCardNameFormatString; williamr@2: TStreamId iVcardStoreId; williamr@2: CStreamStore* iVcardStore; williamr@2: CRichText* iSignatureText; williamr@2: TFileName iFileName; williamr@2: TImAttachmentFile iAttachmentFile; williamr@2: williamr@2: // PCMail williamr@2: TMsvId iPCMailServiceId; williamr@2: RPointerArray iAttachmentInfoList; williamr@2: // set this anytime during the object life cycle attachment manager was used williamr@2: TBool iAttachmentMgrUsed; williamr@2: CMsvStore* iStore; williamr@2: RFile iFile; williamr@2: williamr@2: TImBodyHeaderFormat iBodyHeaderFormat; williamr@2: CImHeader* iOriginalHeader; williamr@2: /** Indicates if the body text entry is plain text */ williamr@2: TBool iUsePlainTextStorage; williamr@2: // The error value returned when CRichText is populated with message body text. williamr@2: TInt iRestoreErr; williamr@2: }; williamr@2: williamr@2: #endif // __MIUTMSG_H__