/* -*- 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 _MsgCompFields_H_ #define _MsgCompFields_H_ #include "nsIMsgCompFields.h" #include "msgCore.h" #include "nsIAbCard.h" #include "nsIAbDirectory.h" #include "nsTArray.h" #include "nsCOMArray.h" #include "nsCOMPtr.h" #include "nsStringGlue.h" struct nsMsgRecipient { nsString mName; nsString mEmail; nsCOMPtr mCard; nsCOMPtr mDirectory; }; /* Note that all the "Get" methods never return NULL (except in case of serious error, like an illegal parameter); rather, they return "" if things were set to NULL. This makes it real handy for the callers. */ class nsMsgCompFields : public nsIMsgCompFields { public: nsMsgCompFields(); /* this macro defines QueryInterface, AddRef and Release for this class */ NS_DECL_THREADSAFE_ISUPPORTS NS_FORWARD_MSGISTRUCTUREDHEADERS(mStructuredHeaders->) NS_FORWARD_MSGIWRITABLESTRUCTUREDHEADERS(mStructuredHeaders->) NS_DECL_NSIMSGCOMPFIELDS // Allow the C++ utility methods for people who use a concrete class instead // of the interfaces. using msgIStructuredHeaders::GetAddressingHeader; using msgIWritableStructuredHeaders::SetAddressingHeader; typedef enum MsgHeaderID { MSG_FROM_HEADER_ID = 0, MSG_REPLY_TO_HEADER_ID, MSG_TO_HEADER_ID, MSG_CC_HEADER_ID, MSG_BCC_HEADER_ID, MSG_FCC_HEADER_ID, MSG_FCC2_HEADER_ID, MSG_NEWSGROUPS_HEADER_ID, MSG_FOLLOWUP_TO_HEADER_ID, MSG_SUBJECT_HEADER_ID, MSG_ORGANIZATION_HEADER_ID, MSG_REFERENCES_HEADER_ID, MSG_NEWSPOSTURL_HEADER_ID, MSG_PRIORITY_HEADER_ID, MSG_CHARACTER_SET_HEADER_ID, MSG_MESSAGE_ID_HEADER_ID, MSG_X_TEMPLATE_HEADER_ID, MSG_DRAFT_ID_HEADER_ID, MSG_CONTENT_LANGUAGE_ID, MSG_CREATOR_IDENTITY_KEY_ID, MSG_MAX_HEADERS //Must be the last one. } MsgHeaderID; nsresult SetAsciiHeader(MsgHeaderID header, const char *value); const char* GetAsciiHeader(MsgHeaderID header); //just return the address of the internal header variable, don't dispose it nsresult SetUnicodeHeader(MsgHeaderID header, const nsAString &value); nsresult GetUnicodeHeader(MsgHeaderID header, nsAString &_retval); /* Convenience routines to get and set header's value... IMPORTANT: all routines const char* GetXxx(void) will return a pointer to the header, please don't free it. */ nsresult SetFrom(const char *value) {return SetAsciiHeader(MSG_FROM_HEADER_ID, value);} const char* GetFrom(void) {return GetAsciiHeader(MSG_FROM_HEADER_ID);} nsresult SetReplyTo(const char *value) {return SetAsciiHeader(MSG_REPLY_TO_HEADER_ID, value);} const char* GetReplyTo() {return GetAsciiHeader(MSG_REPLY_TO_HEADER_ID);} nsresult SetTo(const char *value) {return SetAsciiHeader(MSG_TO_HEADER_ID, value);} const char* GetTo() {return GetAsciiHeader(MSG_TO_HEADER_ID);} nsresult SetCc(const char *value) {return SetAsciiHeader(MSG_CC_HEADER_ID, value);} const char* GetCc() {return GetAsciiHeader(MSG_CC_HEADER_ID);} nsresult SetBcc(const char *value) {return SetAsciiHeader(MSG_BCC_HEADER_ID, value);} const char* GetBcc() {return GetAsciiHeader(MSG_BCC_HEADER_ID);} nsresult SetFcc(const char *value) {return SetAsciiHeader(MSG_FCC_HEADER_ID, value);} const char* GetFcc() {return GetAsciiHeader(MSG_FCC_HEADER_ID);} nsresult SetFcc2(const char *value) {return SetAsciiHeader(MSG_FCC2_HEADER_ID, value);} const char* GetFcc2() {return GetAsciiHeader(MSG_FCC2_HEADER_ID);} nsresult SetNewsgroups(const char *aValue) {return SetAsciiHeader(MSG_NEWSGROUPS_HEADER_ID, aValue);} const char* GetNewsgroups() {return GetAsciiHeader(MSG_NEWSGROUPS_HEADER_ID);} nsresult SetFollowupTo(const char *aValue) {return SetAsciiHeader(MSG_FOLLOWUP_TO_HEADER_ID, aValue);} const char* GetFollowupTo() {return GetAsciiHeader(MSG_FOLLOWUP_TO_HEADER_ID);} nsresult SetSubject(const char *value) {return SetAsciiHeader(MSG_SUBJECT_HEADER_ID, value);} const char* GetSubject() {return GetAsciiHeader(MSG_SUBJECT_HEADER_ID);} nsresult SetOrganization(const char *value) {return SetAsciiHeader(MSG_ORGANIZATION_HEADER_ID, value);} const char* GetOrganization() {return GetAsciiHeader(MSG_ORGANIZATION_HEADER_ID);} const char* GetReferences() {return GetAsciiHeader(MSG_REFERENCES_HEADER_ID);} const char* GetNewspostUrl() {return GetAsciiHeader(MSG_NEWSPOSTURL_HEADER_ID);} const char* GetPriority() {return GetAsciiHeader(MSG_PRIORITY_HEADER_ID);} const char* GetCharacterSet() {return GetAsciiHeader(MSG_CHARACTER_SET_HEADER_ID);} const char* GetMessageId() {return GetAsciiHeader(MSG_MESSAGE_ID_HEADER_ID);} nsresult SetTemplateName(const char *value) {return SetAsciiHeader(MSG_X_TEMPLATE_HEADER_ID, value);} const char* GetTemplateName() {return GetAsciiHeader(MSG_X_TEMPLATE_HEADER_ID);} const char* GetDraftId() {return GetAsciiHeader(MSG_DRAFT_ID_HEADER_ID);} const char* GetContentLanguage() {return GetAsciiHeader(MSG_CONTENT_LANGUAGE_ID);} bool GetReturnReceipt() {return m_returnReceipt;} bool GetDSN() {return m_DSN;} bool GetAttachVCard() {return m_attachVCard;} bool GetAttachmentReminder() {return m_attachmentReminder;} int32_t GetDeliveryFormat() {return m_deliveryFormat;} bool GetForcePlainText() {return m_forcePlainText;} bool GetUseMultipartAlternative() {return m_useMultipartAlternative;} bool GetBodyIsAsciiOnly() {return m_bodyIsAsciiOnly;} bool GetForceMsgEncoding() {return m_forceMsgEncoding;} nsresult SetBody(const char *value); const char* GetBody(); nsresult SplitRecipientsEx(const nsAString &recipients, nsTArray &aResult); protected: virtual ~nsMsgCompFields(); nsCString m_headers[MSG_MAX_HEADERS]; nsCString m_body; nsCOMArray m_attachments; bool m_attachVCard; bool m_attachmentReminder; int32_t m_deliveryFormat; bool m_forcePlainText; bool m_useMultipartAlternative; bool m_returnReceipt; bool m_DSN; bool m_bodyIsAsciiOnly; bool m_forceMsgEncoding; int32_t m_receiptHeaderType; /* receipt header type */ nsCString m_DefaultCharacterSet; bool m_needToCheckCharset; nsCOMPtr mSecureCompFields; nsCOMPtr mStructuredHeaders; }; #endif /* _MsgCompFields_H_ */