diff options
Diffstat (limited to 'comm/mailnews/compose/src/nsMsgCompose.h')
-rw-r--r-- | comm/mailnews/compose/src/nsMsgCompose.h | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/comm/mailnews/compose/src/nsMsgCompose.h b/comm/mailnews/compose/src/nsMsgCompose.h new file mode 100644 index 0000000000..fe9b9724c8 --- /dev/null +++ b/comm/mailnews/compose/src/nsMsgCompose.h @@ -0,0 +1,245 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _nsMsgCompose_H_ +#define _nsMsgCompose_H_ + +#include "nsIMsgCompose.h" +#include "nsCOMArray.h" +#include "nsTObserverArray.h" +#include "nsWeakReference.h" +#include "nsMsgCompFields.h" +#include "nsIOutputStream.h" +#include "nsIMsgQuote.h" +#include "nsIMsgCopyServiceListener.h" +#include "nsIBaseWindow.h" +#include "nsIAbDirectory.h" +#include "nsIWebProgressListener.h" +#include "nsIMimeConverter.h" +#include "nsIMsgFolder.h" +#include "mozIDOMWindow.h" +#include "mozilla/dom/Element.h" + +// Forward declares +class QuotingOutputStreamListener; +class nsMsgComposeSendListener; +class nsIEditor; +class nsIArray; +struct nsMsgMailList; + +class nsMsgCompose : public nsIMsgCompose, public nsSupportsWeakReference { + public: + nsMsgCompose(); + + /* this macro defines QueryInterface, AddRef and Release for this class */ + NS_DECL_THREADSAFE_ISUPPORTS + + /*** nsIMsgCompose pure virtual functions */ + NS_DECL_NSIMSGCOMPOSE + + /* nsIMsgSendListener interface */ + NS_DECL_NSIMSGSENDLISTENER + + protected: + virtual ~nsMsgCompose(); + + // Deal with quoting issues... + nsresult QuoteOriginalMessage(); // New template + nsresult SetQuotingToFollow(bool aVal); + nsresult ConvertHTMLToText(nsIFile* aSigFile, nsString& aSigData); + nsresult ConvertTextToHTML(nsIFile* aSigFile, nsString& aSigData); + bool IsEmbeddedObjectSafe(const char* originalScheme, + const char* originalHost, const char* originalPath, + mozilla::dom::Element* element); + nsresult TagEmbeddedObjects(nsIEditor* aEditor); + + nsCString mOriginalMsgURI; // used so we can mark message disposition flags + // after we send the message + + int32_t mWhatHolder; + + nsresult LoadDataFromFile(nsIFile* file, nsString& sigData, + bool aAllowUTF8 = true, bool aAllowUTF16 = true); + + bool CheckIncludeSignaturePrefs(nsIMsgIdentity* identity); + // m_folderName to store the value of the saved drafts folder. + nsCString m_folderName; + MOZ_CAN_RUN_SCRIPT void InsertDivWrappedTextAtSelection( + const nsAString& aText, const nsAString& classStr); + + protected: + nsresult CreateMessage(const nsACString& originalMsgURI, MSG_ComposeType type, + nsIMsgCompFields* compFields); + void CleanUpRecipients(nsString& recipients); + nsresult GetABDirAndMailLists(const nsACString& aDirUri, + nsCOMArray<nsIAbDirectory>& aDirArray, + nsTArray<nsMsgMailList>& aMailListArray); + nsresult ResolveMailList(nsIAbDirectory* aMailList, + nsCOMArray<nsIAbDirectory>& allDirectoriesArray, + nsTArray<nsMsgMailList>& allMailListArray, + nsTArray<nsMsgMailList>& mailListResolved, + nsTArray<nsMsgRecipient>& aListMembers); + void TagConvertible(mozilla::dom::Element* node, int32_t* _retval); + MOZ_CAN_RUN_SCRIPT nsresult MoveToAboveQuote(void); + MOZ_CAN_RUN_SCRIPT nsresult MoveToBeginningOfDocument(void); + MOZ_CAN_RUN_SCRIPT nsresult MoveToEndOfDocument(void); + nsresult ReplaceFileURLs(nsString& sigData); + nsresult DataURLForFileURL(const nsAString& aFileURL, nsAString& aDataURL); + + /** + * Given an nsIFile, attempts to read it into aString. + * + * Note: Use sparingly! This causes main-thread I/O, which causes jank and all + * other bad things. + */ + static nsresult SlurpFileToString(nsIFile* aFile, nsACString& aString); + +// 3 = To, Cc, Bcc +#define MAX_OF_RECIPIENT_ARRAY 3 + typedef nsTArray<nsMsgRecipient> RecipientsArray[MAX_OF_RECIPIENT_ARRAY]; + /** + * This method parses the compose fields and associates email addresses with + * the relevant cards from the address books. + */ + nsresult LookupAddressBook(RecipientsArray& recipientList); + bool IsLastWindow(); + + // Helper function. Parameters are not checked. + bool mConvertStructs; // for TagConvertible + + nsCOMPtr<nsIEditor> m_editor; + mozIDOMWindowProxy* m_window; + nsCOMPtr<nsIDocShell> mDocShell; + nsCOMPtr<nsIBaseWindow> m_baseWindow; + RefPtr<nsMsgCompFields> m_compFields; + nsCOMPtr<nsIMsgIdentity> m_identity; + bool m_composeHTML; + RefPtr<QuotingOutputStreamListener> mQuoteStreamListener; + nsCOMPtr<nsIOutputStream> mBaseStream; + + nsCOMPtr<nsIMsgSend> mMsgSend; // for composition back end + nsCOMPtr<nsIMsgProgress> + mProgress; // use by the back end to report progress to the front end + + // Deal with quoting issues... + nsString mCiteReference; + nsCOMPtr<nsIMsgQuote> mQuote; + bool mQuotingToFollow; // Quoting indicator + MSG_ComposeType mType; // Message type + bool mAutodetectCharset; + bool mDeleteDraft; + nsMsgDispositionState mDraftDisposition; + nsCOMPtr<nsIMsgDBHdr> mOrigMsgHdr; + + nsString mSmtpPassword; + nsCString mHtmlToQuote; + + nsTObserverArray<nsCOMPtr<nsIMsgComposeStateListener> > mStateListeners; + nsTObserverArray<nsCOMPtr<nsIMsgSendListener> > mExternalSendListeners; + + bool mAllowRemoteContent; + MSG_DeliverMode mDeliverMode; // nsIMsgCompDeliverMode long. + + friend class QuotingOutputStreamListener; + friend class nsMsgComposeSendListener; + + private: + void DeleteTmpAttachments(); + bool mTmpAttachmentsDeleted; +}; + +//////////////////////////////////////////////////////////////////////////////////// +// THIS IS THE CLASS THAT IS THE STREAM Listener OF THE HTML OUTPUT +// FROM LIBMIME. THIS IS FOR QUOTING +//////////////////////////////////////////////////////////////////////////////////// +class QuotingOutputStreamListener : public nsIMsgQuotingOutputStreamListener, + public nsSupportsWeakReference { + public: + QuotingOutputStreamListener(nsIMsgDBHdr* origMsgHdr, bool quoteHeaders, + bool headersOnly, nsIMsgIdentity* identity, + nsIMsgQuote* msgQuote, bool quoteOriginal, + const nsACString& htmlToQuote); + + NS_DECL_ISUPPORTS + NS_DECL_NSIREQUESTOBSERVER + NS_DECL_NSISTREAMLISTENER + NS_DECL_NSIMSGQUOTINGOUTPUTSTREAMLISTENER + + nsresult SetComposeObj(nsIMsgCompose* obj); + nsresult ConvertToPlainText(bool formatflowed, bool formatted, + bool disallowBreaks); + MOZ_CAN_RUN_SCRIPT nsresult InsertToCompose(nsIEditor* aEditor, + bool aHTMLEditor); + nsresult AppendToMsgBody(const nsCString& inStr); + + private: + virtual ~QuotingOutputStreamListener(); + nsWeakPtr mWeakComposeObj; + nsString mMsgBody; + nsString mCitePrefix; + nsString mSignature; + bool mQuoteHeaders; + bool mHeadersOnly; + nsCOMPtr<nsIMsgQuote> mQuote; + nsCOMPtr<nsIMimeHeaders> mHeaders; + nsCOMPtr<nsIMsgIdentity> mIdentity; + nsCOMPtr<nsIMsgDBHdr> mOrigMsgHdr; + nsString mCiteReference; + nsCOMPtr<nsIMimeConverter> mMimeConverter; + int32_t mUnicodeBufferCharacterLength; + bool mQuoteOriginal; + nsCString mHtmlToQuote; +}; + +//////////////////////////////////////////////////////////////////////////////////// +// This is the listener class for the send operation. We have to create this +// class to listen for message send completion and eventually notify the caller +//////////////////////////////////////////////////////////////////////////////////// +class nsMsgComposeSendListener : public nsIMsgComposeSendListener, + public nsIMsgSendListener, + public nsIMsgCopyServiceListener, + public nsIWebProgressListener { + public: + nsMsgComposeSendListener(void); + + // nsISupports interface + NS_DECL_ISUPPORTS + + // nsIMsgComposeSendListener interface + NS_DECL_NSIMSGCOMPOSESENDLISTENER + + // nsIMsgSendListener interface + NS_DECL_NSIMSGSENDLISTENER + + // nsIMsgCopyServiceListener interface + NS_DECL_NSIMSGCOPYSERVICELISTENER + + // nsIWebProgressListener interface + NS_DECL_NSIWEBPROGRESSLISTENER + + nsresult RemoveDraftOrTemplate(nsIMsgCompose* compObj, nsCString msgURI, + bool isSaveTemplate); + nsresult RemoveCurrentDraftMessage(nsIMsgCompose* compObj, bool calledByCopy, + bool isSaveTemplate); + nsresult GetMsgFolder(nsIMsgCompose* compObj, nsIMsgFolder** msgFolder); + + private: + virtual ~nsMsgComposeSendListener(); + nsWeakPtr mWeakComposeObj; + MSG_DeliverMode mDeliverMode; +}; + +/****************************************************************************** + * nsMsgMailList + ******************************************************************************/ +struct nsMsgMailList { + explicit nsMsgMailList(nsIAbDirectory* directory); + + nsString mName; + nsString mDescription; + nsCOMPtr<nsIAbDirectory> mDirectory; +}; + +#endif /* _nsMsgCompose_H_ */ |