Source code

Revision control

Copy as Markdown

Other Tools

/* -*- 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 "nsString.h"
#include "nsIMsgComposeSecure.h"
struct nsMsgRecipient {
nsString mName;
nsString mEmail;
nsCOMPtr<nsIAbCard> mCard;
nsCOMPtr<nsIAbDirectory> 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
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_TEMPLATE_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* GetTemplateId() {
return GetAsciiHeader(MSG_TEMPLATE_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 SplitRecipientsEx(const nsAString& recipients,
nsTArray<nsMsgRecipient>& aResult);
protected:
virtual ~nsMsgCompFields();
nsCString m_headers[MSG_MAX_HEADERS];
nsString m_body;
nsTArray<RefPtr<nsIMsgAttachment>> m_attachments;
nsTArray<nsString> m_otherHeaders;
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<nsIMsgComposeSecure> mSecureCompFields;
nsCOMPtr<msgIWritableStructuredHeaders> mStructuredHeaders;
};
#endif /* _MsgCompFields_H_ */