From 4a1a3b7ef763b38851f302b09f3f961e0909d6c3 Mon Sep 17 00:00:00 2001 From: "rhp%netscape.com" Date: Tue, 2 Mar 1999 17:06:48 +0000 Subject: [PATCH] Changes for new XP-COM interface. --- mailnews/mime/src/makefile.win | 5 +- mailnews/mime/src/nsMimeFactory.cpp | 20 +++-- mailnews/mime/src/nsMimeHeaderConverter.cpp | 85 ++++++++------------- mailnews/mime/src/nsMimeHeaderConverter.h | 6 +- 4 files changed, 49 insertions(+), 67 deletions(-) diff --git a/mailnews/mime/src/makefile.win b/mailnews/mime/src/makefile.win index c5dcedc36779..38e67b7f3867 100644 --- a/mailnews/mime/src/makefile.win +++ b/mailnews/mime/src/makefile.win @@ -64,11 +64,12 @@ DEFINES= -DEBUG_rhp -DHAVE_MIME_DATA_SLOT -D_IMPL_NS_HTML #//------------------------------------------------------------------------ OBJS= \ # -# Code for XP-COM Factory creation... +# Code for XP-COM Factory creation and interfaces... # .\$(OBJDIR)\nsMimeFactory.obj \ .\$(OBJDIR)\nsRFC822toHTMLStreamConverter.obj \ - .\$(OBJDIR)\nsMimeObjectClassAccess.obj \ + .\$(OBJDIR)\nsMimeObjectClassAccess.obj \ + .\$(OBJDIR)\nsMimeHeaderConverter.obj \ # MIME parsing code .\$(OBJDIR)\mimecont.obj \ .\$(OBJDIR)\mimeebod.obj \ diff --git a/mailnews/mime/src/nsMimeFactory.cpp b/mailnews/mime/src/nsMimeFactory.cpp index 1cd212971231..82b515dca4d7 100644 --- a/mailnews/mime/src/nsMimeFactory.cpp +++ b/mailnews/mime/src/nsMimeFactory.cpp @@ -31,6 +31,9 @@ static NS_DEFINE_CID(kCMimeRFC822HTMLConverterCID, NS_RFC822_HTML_STREAM_CONVE #include "nsMimeObjectClassAccess.h" static NS_DEFINE_CID(kCMimeMimeObjectClassAccessCID, NS_MIME_OBJECT_CLASS_ACCESS_CID); +#include "nsMimeHeaderConverter.h" +static NS_DEFINE_CID(kCMimeHeaderConverterCID, NS_MIME_HEADER_CONVERTER_CID); + //////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////// @@ -119,6 +122,12 @@ nsresult nsMimeFactory::CreateInstance(nsISupports *aOuter, const nsIID &aIID, v if (res != NS_OK) // was there a problem creating the object ? return res; } + else if (mClassID.Equals(kCMimeHeaderConverterCID)) + { + res = NS_NewMimeHeaderConverter((nsIMimeHeaderConverter **) &inst); + if (res != NS_OK) // was there a problem creating the object ? + return res; + } // End of checking the interface ID code.... if (inst) @@ -188,14 +197,8 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* serviceMgr, const char PR_TRUE, PR_TRUE); nsRepository::RegisterComponent(kCMimeRFC822HTMLConverterCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - - /* - * For now, do the old netlib call so we don't have to dork around - * with hacking every viewer in the world. - */ - NET_RegisterContentTypeConverter(MESSAGE_RFC822, FO_NGLAYOUT, NULL, MIME_MessageConverter); - NET_RegisterContentTypeConverter(MESSAGE_RFC822, FO_CACHE_AND_NGLAYOUT, NULL, MIME_MessageConverter); - + nsRepository::RegisterComponent(kCMimeHeaderConverterCID, NULL, NULL, path, + PR_TRUE, PR_TRUE); return NS_OK; } @@ -204,6 +207,7 @@ extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* serviceMgr, const ch printf("*** Mime being unregistered\n"); nsRepository::UnregisterComponent(kCMimeMimeObjectClassAccessCID, path); nsRepository::UnregisterComponent(kCMimeRFC822HTMLConverterCID, path); + nsRepository::UnregisterComponent(kCMimeHeaderConverterCID, path); return NS_OK; } diff --git a/mailnews/mime/src/nsMimeHeaderConverter.cpp b/mailnews/mime/src/nsMimeHeaderConverter.cpp index 632afb87621b..d451ddeec350 100644 --- a/mailnews/mime/src/nsMimeHeaderConverter.cpp +++ b/mailnews/mime/src/nsMimeHeaderConverter.cpp @@ -21,6 +21,7 @@ #include "nsIFactory.h" #include "nsISupports.h" #include "nsMimeHeaderConverter.h" +#include "comi18n.h" /* * This function will be used by the factory to generate an @@ -34,9 +35,9 @@ nsresult NS_NewMimeHeaderConverter(nsIMimeHeaderConverter ** aInstancePtrResult) NS_PRECONDITION(nsnull != aInstancePtrResult, "nsnull ptr"); if (nsnull != aInstancePtrResult) { - nsMimeObjectClassAccess *obj = new nsMimeObjectClassAccess(); + nsMimeHeaderConverter *obj = new nsMimeHeaderConverter(); if (obj) - return obj->QueryInterface(nsIMimeObjectClassAccess::IID(), (void**) aInstancePtrResult); + return obj->QueryInterface(nsIMimeHeaderConverter::IID(), (void**) aInstancePtrResult); else return NS_ERROR_OUT_OF_MEMORY; /* we couldn't allocate the object */ } @@ -48,78 +49,54 @@ nsresult NS_NewMimeHeaderConverter(nsIMimeHeaderConverter ** aInstancePtrResult) * The following macros actually implement addref, release and * query interface for our component. */ -NS_IMPL_ADDREF(nsMimeObjectClassAccess) -NS_IMPL_RELEASE(nsMimeObjectClassAccess) -NS_IMPL_QUERY_INTERFACE(nsMimeObjectClassAccess, nsIMimeObjectClassAccess::IID()); /* we need to pass in the interface ID of this interface */ +NS_IMPL_ADDREF(nsMimeHeaderConverter) +NS_IMPL_RELEASE(nsMimeHeaderConverter) +NS_IMPL_QUERY_INTERFACE(nsMimeHeaderConverter, nsIMimeHeaderConverter::IID()); /* we need to pass in the interface ID of this interface */ /* - * nsMimeObjectClassAccess definitions.... + * nsMimeHeaderConverter definitions.... */ /* - * Inherited methods for nsMimeObjectClassAccess + * Inherited methods for nsMimeHeaderConverter */ -nsMimeObjectClassAccess::nsMimeObjectClassAccess() +nsMimeHeaderConverter::nsMimeHeaderConverter() { /* the following macro is used to initialize the ref counting data */ NS_INIT_REFCNT(); } -nsMimeObjectClassAccess::~nsMimeObjectClassAccess() +nsMimeHeaderConverter::~nsMimeHeaderConverter() { } nsresult -nsMimeObjectClassAccess::MimeObjectWrite(void *mimeObject, - char *data, - PRInt32 length, - PRBool user_visible_p) +nsMimeHeaderConverter::DecodeMimePartIIStr(const char *header, + char *charset, + char **decodedString) { - int rc = XPCOM_MimeObject_write(mimeObject, data, length, user_visible_p); - if (rc < 0) + char *retString = MIME_DecodeMimePartIIStr(header, charset); + if (retString == NULL) return NS_ERROR_FAILURE; else + { + *decodedString = retString; return NS_OK; + } } -nsresult -nsMimeObjectClassAccess::GetmimeInlineTextClass(void **ptr) +nsresult +nsMimeHeaderConverter::EncodeMimePartIIStr(const char *header, + const char *mailCharset, + PRInt32 encodedWordSize, + char **encodedString) { - *ptr = XPCOM_GetmimeInlineTextClass(); - return NS_OK; -} - -nsresult -nsMimeObjectClassAccess::GetmimeLeafClass(void **ptr) -{ - *ptr = XPCOM_GetmimeLeafClass(); - return NS_OK; -} - -nsresult -nsMimeObjectClassAccess::GetmimeObjectClass(void **ptr) -{ - *ptr = XPCOM_GetmimeObjectClass(); - return NS_OK; -} - -nsresult -nsMimeObjectClassAccess::GetmimeContainerClass(void **ptr) -{ - *ptr = XPCOM_GetmimeContainerClass(); - return NS_OK; -} - -nsresult -nsMimeObjectClassAccess::GetmimeMultipartClass(void **ptr) -{ - *ptr = XPCOM_GetmimeMultipartClass(); - return NS_OK; -} - -nsresult -nsMimeObjectClassAccess::GetmimeMultipartSignedClass(void **ptr) -{ - *ptr = XPCOM_GetmimeMultipartSignedClass(); - return NS_OK; + char *retString = MIME_EncodeMimePartIIStr(header, mailCharset, encodedWordSize); + if (retString == NULL) + return NS_ERROR_FAILURE; + else + { + *encodedString = retString; + return NS_OK; + } } diff --git a/mailnews/mime/src/nsMimeHeaderConverter.h b/mailnews/mime/src/nsMimeHeaderConverter.h index 9fade7bebcff..378d9e019af8 100644 --- a/mailnews/mime/src/nsMimeHeaderConverter.h +++ b/mailnews/mime/src/nsMimeHeaderConverter.h @@ -46,13 +46,13 @@ public: // Decode routine NS_IMETHOD DecodeMimePartIIStr(const char *header, - const char *charset, - char *decodedString); + char *charset, + char **decodedString); // Encode routine NS_IMETHOD EncodeMimePartIIStr(const char *header, const char *mailCharset, PRInt32 encodedWordSize, - char *encodedString); + char **encodedString); }; /* this function will be used by the factory to generate an class access object....*/