From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- comm/mailnews/mime/emitters/nsMimeBaseEmitter.h | 140 ++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 comm/mailnews/mime/emitters/nsMimeBaseEmitter.h (limited to 'comm/mailnews/mime/emitters/nsMimeBaseEmitter.h') diff --git a/comm/mailnews/mime/emitters/nsMimeBaseEmitter.h b/comm/mailnews/mime/emitters/nsMimeBaseEmitter.h new file mode 100644 index 0000000000..96e7fd7b7f --- /dev/null +++ b/comm/mailnews/mime/emitters/nsMimeBaseEmitter.h @@ -0,0 +1,140 @@ +/* -*- Mode: C; tab-width: 4; 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 _nsMimeBaseEmitter_h_ +#define _nsMimeBaseEmitter_h_ + +#include "prio.h" +#include "nsIMimeEmitter.h" +#include "nsMimeRebuffer.h" +#include "nsIStreamListener.h" +#include "nsIInputStream.h" +#include "nsIOutputStream.h" +#include "nsIURI.h" +#include "nsIChannel.h" +#include "nsIStringBundle.h" +#include "nsCOMPtr.h" +#include "nsTArray.h" +#include "nsIMimeConverter.h" +#include "nsIInterfaceRequestor.h" + +// +// The base emitter will serve as the place to do all of the caching, +// sorting, etc... of mail headers and bodies for this internally developed +// emitter library. The other emitter classes in this file (nsMimeHTMLEmitter, +// etc.) will only be concerned with doing output processing ONLY. +// + +// +// Used for keeping track of the attachment information... +// +typedef struct { + char* displayName; + char* urlSpec; + char* contentType; + bool isExternalAttachment; +} attachmentInfoType; + +// +// For header info... +// +typedef struct { + char* name; + char* value; +} headerInfoType; + +class nsMimeBaseEmitter : public nsIMimeEmitter, public nsIInterfaceRequestor { + public: + nsMimeBaseEmitter(); + + // nsISupports interface + NS_DECL_THREADSAFE_ISUPPORTS + + NS_DECL_NSIMIMEEMITTER + NS_DECL_NSIINTERFACEREQUESTOR + + // Utility output functions... + NS_IMETHOD UtilityWrite(const nsACString& buf); + NS_IMETHOD UtilityWriteCRLF(const char* buf); + + // For string bundle usage... + char* MimeGetStringByName(const char* aHeaderName); + char* MimeGetStringByID(int32_t aID); + char* LocalizeHeaderName(const char* aHeaderName, const char* aDefaultName); + + // For header processing... + const char* GetHeaderValue(const char* aHeaderName); + + // To write out a stored header array as HTML + virtual nsresult WriteHeaderFieldHTMLPrefix(const nsACString& name); + virtual nsresult WriteHeaderFieldHTML(const char* field, const char* value); + virtual nsresult WriteHeaderFieldHTMLPostfix(); + + protected: + virtual ~nsMimeBaseEmitter(); + // Internal methods... + void CleanupHeaderArray(nsTArray* aArray); + + // For header output... + nsresult DumpSubjectFromDate(); + nsresult DumpToCC(); + nsresult DumpRestOfHeaders(); + nsresult OutputGenericHeader(const char* aHeaderVal); + + nsresult WriteHelper(const nsACString& buf, uint32_t* countWritten); + + // For string bundle usage... + nsCOMPtr m_stringBundle; // for translated strings + nsCOMPtr + m_headerStringBundle; // for non-translated header strings + + // For buffer management on output + MimeRebuffer* mBufferMgr; + + // mscott + // don't ref count the streams....the emitter is owned by the converter + // which owns these streams... + // + nsIOutputStream* mOutStream; + nsIInputStream* mInputStream; + nsIStreamListener* mOutListener; + nsCOMPtr mChannel; + + // For gathering statistics on processing... + uint32_t mTotalWritten; + uint32_t mTotalRead; + + // Output control and info... + bool mDocHeader; // For header determination... + nsIURI* mURL; // the url for the data being processed... + int32_t mHeaderDisplayType; // The setting for header output... + nsCString mHTMLHeaders; // HTML Header Data... + + // For attachment processing... + int32_t mAttachCount; + nsTArray* mAttachArray; + attachmentInfoType* mCurrentAttachment; + + // For header caching... + nsTArray* mHeaderArray; + nsTArray* mEmbeddedHeaderArray; + + // For body caching... + bool mBodyStarted; + nsCString mBody; + bool mFirstHeaders; + + // For the format being used... + int32_t mFormat; + + // For I18N Conversion... + nsCOMPtr mUnicodeConverter; + nsString mCharset; + nsresult GenerateDateString(const char* dateString, nsACString& formattedDate, + bool showDateForToday); + // The caller is expected to free the result of GetLocalizedDateString + char* GetLocalizedDateString(const char* dateString); +}; + +#endif /* _nsMimeBaseEmitter_h_ */ -- cgit v1.2.3