diff --git a/mozilla/mailnews/base/src/nsMessenger.cpp b/mozilla/mailnews/base/src/nsMessenger.cpp index 6a124b9b094..a6d6e9ad306 100644 --- a/mozilla/mailnews/base/src/nsMessenger.cpp +++ b/mozilla/mailnews/base/src/nsMessenger.cpp @@ -1007,7 +1007,7 @@ nsMessenger::SendUnsentMessages() rv = mailSession->GetCurrentIdentity(getter_AddRefs(identity)); if (NS_FAILED(rv)) return rv; - pMsgSendLater->SendUnsentMessages(identity, nsnull, nsnull); + pMsgSendLater->SendUnsentMessages(identity, nsnull); NS_RELEASE(sendLaterListener); } return NS_OK; diff --git a/mozilla/mailnews/compose/build/Makefile.in b/mozilla/mailnews/compose/build/Makefile.in index 67d93b7e1fd..7b06dce79fe 100644 --- a/mozilla/mailnews/compose/build/Makefile.in +++ b/mozilla/mailnews/compose/build/Makefile.in @@ -51,6 +51,7 @@ EXTRA_DSO_LDOPTS = \ -ljsdom \ -lappcores \ -lmsgbaseutil \ + -lraptorhtmlpars \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/mozilla/mailnews/compose/build/makefile.win b/mozilla/mailnews/compose/build/makefile.win index ac41664fd36..69e7fb4e63b 100644 --- a/mozilla/mailnews/compose/build/makefile.win +++ b/mozilla/mailnews/compose/build/makefile.win @@ -42,6 +42,7 @@ LLIBS= \ $(DIST)\lib\appcores.lib \ $(DIST)\lib\netlib.lib \ $(DIST)\lib\msgbaseutil.lib \ + $(DIST)\lib\raptorhtmlpars.lib \ $(LIBNSPR) \ $(NULL) diff --git a/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp b/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp index 103ae719a1d..e8adaebd98c 100644 --- a/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp +++ b/mozilla/mailnews/compose/build/nsMsgCompFactory.cpp @@ -150,7 +150,10 @@ nsresult nsMsgComposeFactory::CreateInstance(nsISupports *aOuter, const nsIID &a { nsSmtpService * smtpService = new nsSmtpService(); // okay now turn around and give inst a handle on it.... - return smtpService->QueryInterface(kISupportsIID, aResult); + if (smtpService) + return smtpService->QueryInterface(kISupportsIID, aResult); + else + return NS_ERROR_OUT_OF_MEMORY; } // do they want a Message Compose interface ? @@ -158,7 +161,10 @@ nsresult nsMsgComposeFactory::CreateInstance(nsISupports *aOuter, const nsIID &a { nsMsgCompose * msgCompose = new nsMsgCompose(); // okay now turn around and give inst a handle on it.... - return msgCompose->QueryInterface(kISupportsIID, aResult); + if (msgCompose) + return msgCompose->QueryInterface(kISupportsIID, aResult); + else + return NS_ERROR_OUT_OF_MEMORY; } // do they want a Message Compose Fields interface ? @@ -183,7 +189,10 @@ nsresult nsMsgComposeFactory::CreateInstance(nsISupports *aOuter, const nsIID &a { nsMsgComposeService * aMsgCompService = new nsMsgComposeService(); // okay now turn around and give inst a handle on it.... - return aMsgCompService->QueryInterface(kISupportsIID, aResult); + if (aMsgCompService) + return aMsgCompService->QueryInterface(kISupportsIID, aResult); + else + return NS_ERROR_OUT_OF_MEMORY; } // Quoting anyone? diff --git a/mozilla/mailnews/compose/public/nsIMsgSend.h b/mozilla/mailnews/compose/public/nsIMsgSend.h index 7b06816760a..0ac4ceb1e6f 100644 --- a/mozilla/mailnews/compose/public/nsIMsgSend.h +++ b/mozilla/mailnews/compose/public/nsIMsgSend.h @@ -10,6 +10,7 @@ #include "nsIMsgSendListener.h" #include "nsIMsgIdentity.h" #include "nsMsgComposeBE.h" +#include "nsIMessage.h" #ifdef XPIDL_JS_STUBS #include "jsapi.h" @@ -33,6 +34,7 @@ class nsIMsgSend : public nsISupports { PRBool digest_p, PRBool dont_deliver_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, const char *attachment1_type, const char *attachment1_body, PRUint32 attachment1_body_length, @@ -48,6 +50,7 @@ class nsIMsgSend : public nsISupports { PRBool deleteSendFileOnCompletion, PRBool digest_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, nsIMsgSendListener **aListenerArray) = 0; NS_IMETHOD SendWebPage( diff --git a/mozilla/mailnews/compose/public/nsIMsgSendLater.h b/mozilla/mailnews/compose/public/nsIMsgSendLater.h index 5acf56663bf..f9c38d99b0e 100644 --- a/mozilla/mailnews/compose/public/nsIMsgSendLater.h +++ b/mozilla/mailnews/compose/public/nsIMsgSendLater.h @@ -41,8 +41,7 @@ class nsIMsgSendLater : public nsIOutputStream { NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGSENDLATER_IID) NS_IMETHOD SendUnsentMessages(nsIMsgIdentity *identity, - nsIMsgSendLaterListener **listenerArray, - void *tagData) = 0; + nsIMsgSendLaterListener **listenerArray) = 0; NS_IMETHOD RemoveListener(nsIMsgSendLaterListener *aListener) = 0; NS_IMETHOD AddListener(nsIMsgSendLaterListener *aListener) = 0; diff --git a/mozilla/mailnews/compose/src/Makefile.in b/mozilla/mailnews/compose/src/Makefile.in index 0133c90a5b6..5f2c9eeeb37 100644 --- a/mozilla/mailnews/compose/src/Makefile.in +++ b/mozilla/mailnews/compose/src/Makefile.in @@ -46,6 +46,7 @@ EXPORTS = \ nsMsgTransition.h \ nsMsgQuote.h \ nsURLFetcher.h \ + nsMsgSend.h \ $(NULL) CPPSRCS = \ diff --git a/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp b/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp index 76d00b0afff..d425812dfb7 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp @@ -626,39 +626,54 @@ mime_generate_headers (nsMsgCompFields *fields, PL_strcpy(ptr+1, ptr2); } - // RICHIE-SHERRY: This is where I will need to make some changes for Seth's - // new feature to allow for full specification of news hosts. + // Ok, if we are here, we need to decide the Newsgroup related headers + // to write to the outgoing message. In ANY case, we need to write the + // "Newsgroup" header which is the "proper" header as opposed to the + // HEADER_X_MOZILLA_NEWSHOST which can contain the "news:" URL's. // - if (deliver_mode == nsMsgDeliverNow) + // Since n2 can contain data in the form of: + // "news://news.mozilla.org./netscape.test,news://news.mozilla.org./netscape.junk" + // we need to turn that into: "netscape.test,netscape.junk" + // + NS_WITH_SERVICE(nsINntpService, nntpService, kNntpServiceCID, &rv); + char *newHeader = nsnull; + rv = nntpService->ConvertNewsgroupsString(n2, &newHeader); + if (NS_SUCCEEDED(rv) && nntpService) { - // This is going out now...so we need to run this header through the - // call to parse it into just the group names and put that into the - // outgoing message. - char *newHeader = nsnull; - NS_WITH_SERVICE(nsINntpService, nntpService, kNntpServiceCID, &rv); - if (NS_SUCCEEDED(rv) && nntpService) { - // caller frees the memory in newHeader - // ConvertNewsgroupsString takes "news://news.mozilla.org./netscape.test,news://news.mozilla.org./netscape.junk" - // and turns it into "netscape.test,netscape.junk" - rv = nntpService->ConvertNewsgroupsString(n2, &newHeader); - if (NS_FAILED(rv)) { - printf("FAILURE to convert!\n"); - printf("rhp, we need to figure out how to handle this\n"); - } - else { - printf("SUCCESS: %s -> %s\n",n2,newHeader); - } + // caller frees the memory in newHeader + // ConvertNewsgroupsString takes "news://news.mozilla.org./netscape.test,news://news.mozilla.org./netscape.junk" + // and turns it into "netscape.test,netscape.junk" + rv = nntpService->ConvertNewsgroupsString(n2, &newHeader); + if (NS_FAILED(rv)) + { +#ifdef NS_DEBUG + printf("FAILURE to convert!\n"); + printf("RICHIE, we need to figure out how to handle this\n"); +#endif } else { - printf("FAILURE to get nntpService\n"); - printf("rhp, we need to figure out how to handle this\n"); +#ifdef NS_DEBUG + printf("SUCCESS: %s -> %s\n",n2,newHeader); +#endif } - - PUSH_STRING ("Newsgroups: "); - PUSH_STRING (newHeader); - PR_FREEIF(newHeader); } - else + else { +#ifdef NS_DEBUG + printf("FAILURE to get nntpService\n"); + printf("RICHIE, we need to figure out how to handle this\n"); +#endif + } + + PUSH_STRING ("Newsgroups: "); + PUSH_STRING (newHeader); + PR_FREEIF(newHeader); + PUSH_NEWLINE (); + + // If we are here, we are NOT going to send this now. (i.e. it is a Draft, + // Send Later file, etc...). Because of that, we need to store what the user + // typed in on the original composition window for use later when rebuilding + // the headers + if (deliver_mode != nsMsgDeliverNow) { // This is going to be saved for later, that means we should just store // what the user typed into the "Newsgroup" line in the HEADER_X_MOZILLA_NEWSHOST @@ -666,10 +681,10 @@ mime_generate_headers (nsMsgCompFields *fields, PUSH_STRING (HEADER_X_MOZILLA_NEWSHOST); PUSH_STRING (": "); PUSH_STRING(n2); + PUSH_NEWLINE (); } - PR_Free (n2); - PUSH_NEWLINE (); + PR_FREEIF(n2); } /* #### shamelessly duplicated from above */ diff --git a/mozilla/mailnews/compose/src/nsMsgCompose.cpp b/mozilla/mailnews/compose/src/nsMsgCompose.cpp index b1cc496ddf7..d14bc56b6cd 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompose.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompose.cpp @@ -30,6 +30,10 @@ #include "nsMsgQuote.h" #include "nsIPref.h" #include "nsXPIDLString.h" +#include "nsIParser.h" +#include "nsParserCIID.h" +#include "nsHTMLToTXTSinkStream.h" +#include "CNavDTD.h" // XXX temporary so we can use the current identity hack -alecf #include "nsIMsgMailSession.h" @@ -46,10 +50,11 @@ static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID); #define TEMP_PATH_DIR "/tmp/" #else #error TEMP_PATH_DIR_NOT_DEFINED -#endif +#endif -#define TEMP_MESSAGE_IN "tempMessage.eml" -#define TEMP_MESSAGE_OUT "tempMessage.html" +#define TEMP_MESSAGE_IN "tempMessage.eml" +#define TEMP_MESSAGE_OUT "tempMessage.html" +#define TEMP_MESSAGE_OUT_TEXT "tempMessage.txt" nsMsgCompose::nsMsgCompose() { @@ -59,6 +64,7 @@ nsMsgCompose::nsMsgCompose() m_editor = nsnull; mOutStream=nsnull; m_compFields = do_QueryInterface(new nsMsgCompFields); + mBodyLoaded = PR_FALSE; // Get the default charset from pref, use this as a mail charset. char * default_mail_charset = nsMsgI18NGetDefaultMailCharset(); @@ -139,96 +145,133 @@ nsresult nsMsgCompose::Initialize(nsIDOMWindow *aWindow, const PRUnichar *origin return rv; } +// This is a new method for loading the body ONLY. This has moved +// from the LoadFields() method for a couple of reasons: +// +// 1.) the LoadFields() method is called at the time the compose window +// is created, but we can't load the body in all cases because we don't +// have the body text yet for quoted operations (Reply, forward, etc...) +// Quoting, etc.. happens asynchronously, so we have to wait until that +// completes to do the LoadURL() call....which brings us to our next point. +// +// 2.) We should call LoadURL() on composer's editor widget only once. Currently, +// if you do that, you get an editor window you can't edit, but even if that is +// fixed, we shouldn't load content into the editor window more than once...that +// would be very ugly/confusing to the user. +// +nsresult +nsMsgCompose::LoadBody() +{ + if (!m_window || !m_webShell || !m_webShellWin || !m_compFields) + return NS_ERROR_NOT_INITIALIZED; + + if (m_editor) + { + char *body; + m_compFields->GetBody(&body); + nsAutoString msgBody(body); + if (msgBody.Length()) + { + // Another change...have to load a file with the correct extension or + // the editor won't know how to format the data. + // + nsString fileName(TEMP_PATH_DIR); + if (m_composeHTML) + fileName += TEMP_MESSAGE_OUT; + else + fileName += TEMP_MESSAGE_OUT_TEXT; + + nsFileSpec aPath(fileName); + nsOutputFileStream tempFile(aPath); + + if (tempFile.is_open()) + { + tempFile.write(nsAutoCString(msgBody), msgBody.Length()); + tempFile.close(); + + nsAutoString urlStr = nsFileURL(aPath).GetURLString(); + m_editor->LoadUrl(urlStr.GetUnicode()); + } + } + else + { + nsAutoString urlStr; + if (m_composeHTML) + urlStr = "chrome://messengercompose/content/defaultHtmlBody.html"; + else + urlStr = "chrome://messengercompose/content/defaultTextBody.html"; + + m_editor->LoadUrl(urlStr.GetUnicode()); + } + + mBodyLoaded = PR_TRUE; + } + + return NS_OK; +} nsresult nsMsgCompose::LoadFields() { - nsresult rv; - - if (!m_window || !m_webShell || !m_webShellWin || !m_compFields) - return NS_ERROR_NOT_INITIALIZED; - - if (m_editor) + nsresult rv; + + if (!m_window || !m_webShell || !m_webShellWin || !m_compFields) + return NS_ERROR_NOT_INITIALIZED; + + nsCOMPtr theDoc; + rv= m_window->GetDocument(getter_AddRefs(theDoc)); + if (NS_SUCCEEDED(rv) && theDoc) + { + nsCOMPtr node; + nsCOMPtr nodeList; + nsCOMPtr inputElement; + + rv = theDoc->GetElementsByTagName("INPUT", getter_AddRefs(nodeList)); + if ((NS_SUCCEEDED(rv)) && nodeList) { - char *body; - m_compFields->GetBody(&body); - nsAutoString msgBody(body); - if (msgBody.Length()) - { - nsString fileName(TEMP_PATH_DIR); - fileName += TEMP_MESSAGE_OUT; - - nsFileSpec aPath(fileName); - nsOutputFileStream tempFile(aPath); - - if (tempFile.is_open()) - { - tempFile.write(nsAutoCString(msgBody), msgBody.Length()); - tempFile.close(); - - nsAutoString urlStr = nsFileURL(aPath).GetURLString(); - m_editor->LoadUrl(urlStr.GetUnicode()); - } - } - else - { - nsAutoString urlStr; - if (m_composeHTML) - urlStr = "chrome://messengercompose/content/defaultHtmlBody.html"; - else - urlStr = "chrome://messengercompose/content/defaultTextBody.html"; - - m_editor->LoadUrl(urlStr.GetUnicode()); - } - } + PRUint32 count; + PRUint32 i; + nodeList->GetLength(&count); + for (i = 0; i < count; i ++) + { + rv = nodeList->Item(i, getter_AddRefs(node)); + if ((NS_SUCCEEDED(rv)) && node) + { + nsString value; + rv = node->QueryInterface(nsIDOMHTMLInputElement::GetIID(), getter_AddRefs(inputElement)); + if ((NS_SUCCEEDED(rv)) && inputElement) + { + nsString id; + inputElement->GetId(id); + char *elementValue; + m_compFields->GetTo(&elementValue); + if (id == "msgTo") inputElement->SetValue(elementValue); + + m_compFields->GetCc(&elementValue); + if (id == "msgCc") inputElement->SetValue(elementValue); + + m_compFields->GetBcc(&elementValue); + if (id == "msgBcc") inputElement->SetValue(elementValue); + + m_compFields->GetNewsgroups(&elementValue); + if (id == "msgNewsgroup") inputElement->SetValue(elementValue); + + m_compFields->GetSubject(&elementValue); + if (id == "msgSubject") inputElement->SetValue(elementValue); + } + + } + } - nsCOMPtr theDoc; - rv= m_window->GetDocument(getter_AddRefs(theDoc)); - if (NS_SUCCEEDED(rv) && theDoc) - { - nsCOMPtr node; - nsCOMPtr nodeList; - nsCOMPtr inputElement; - - rv = theDoc->GetElementsByTagName("INPUT", getter_AddRefs(nodeList)); - if ((NS_SUCCEEDED(rv)) && nodeList) - { - PRUint32 count; - PRUint32 i; - nodeList->GetLength(&count); - for (i = 0; i < count; i ++) - { - rv = nodeList->Item(i, getter_AddRefs(node)); - if ((NS_SUCCEEDED(rv)) && node) - { - nsString value; - rv = node->QueryInterface(nsCOMTypeInfo::GetIID(), getter_AddRefs(inputElement)); - if ((NS_SUCCEEDED(rv)) && inputElement) - { - nsString id; - inputElement->GetId(id); - char *elementValue; - m_compFields->GetTo(&elementValue); - if (id == "msgTo") inputElement->SetValue(elementValue); - - m_compFields->GetCc(&elementValue); - if (id == "msgCc") inputElement->SetValue(elementValue); - - m_compFields->GetBcc(&elementValue); - if (id == "msgBcc") inputElement->SetValue(elementValue); - - m_compFields->GetNewsgroups(&elementValue); - if (id == "msgNewsgroup") inputElement->SetValue(elementValue); - - m_compFields->GetSubject(&elementValue); - if (id == "msgSubject") inputElement->SetValue(elementValue); - } - - } - } - } - } - - return rv; + // RICHIE + // Now we do the LoadURL on the editor because we don't have to wait for any + // sort of quoting operation...otherwise we are waiting for an async completion and do the load + // in that callback...this will prevent multiple LoadURL's which is not a good thing for the + // editor or our users + LoadBody(); + } + } + + return rv; } @@ -421,6 +464,7 @@ nsMsgCompose::SendMsgEx(MSG_DeliverMode deliverMode, PR_FALSE, // PRBool digest_p, PR_FALSE, // PRBool dont_deliver_p, (nsMsgDeliverMode)deliverMode, // nsMsgDeliverMode mode, + nsnull, // nsIMessage *msgToReplace, m_composeHTML?TEXT_HTML:TEXT_PLAIN, // const char *attachment1_type, bodyString, // const char *attachment1_body, bodyLength, // PRUint32 attachment1_body_length, @@ -504,105 +548,106 @@ nsresult nsMsgCompose::GetWrapLength(PRInt32 *aWrapLength) nsresult nsMsgCompose::CreateMessage(const PRUnichar * originalMsgURI, MSG_ComposeType type, MSG_ComposeFormat format, nsISupports * object) { - nsresult rv = NS_OK; - /* At this point, we have a list of URI of original message to reply to or forward but as the BE isn't ready yet, - we still need to use the old patch... gather the information from the object and the temp file use to display the selected message*/ - + nsresult rv = NS_OK; + /* At this point, we have a list of URI of original message to reply to or forward but as the BE isn't ready yet, + we still need to use the old patch... gather the information from the object and the temp file use to display the selected message*/ + if (object) { - nsCOMPtr message; - rv = object->QueryInterface(nsCOMTypeInfo::GetIID(), getter_AddRefs(message)); - if ((NS_SUCCEEDED(rv)) && message) - { - nsString aString = ""; - nsString bString = ""; - nsString aCharset = ""; - nsString decodedString; - nsString encodedCharset; // we don't use this - char *aCString; + nsCOMPtr message; + rv = object->QueryInterface(nsIMessage::GetIID(), getter_AddRefs(message)); + if ((NS_SUCCEEDED(rv)) && message) + { + nsString aString = ""; + nsString bString = ""; + nsString aCharset = ""; + nsString decodedString; + nsString encodedCharset; // we don't use this + char *aCString; + + message->GetCharSet(aCharset); + message->GetSubject(aString); + switch (type) + { + default: break; + case MSGCOMP_TYPE_Reply : + case MSGCOMP_TYPE_ReplyAll: + { + // get an original charset, used for a label, UTF-8 is used for the internal processing + if (!aCharset.Equals("")) + m_compFields->SetCharacterSet(nsAutoCString(aCharset), nsnull); + + bString += "Re: "; + bString += aString; + m_compFields->SetSubject(nsAutoCString(bString), nsnull); + if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(bString, encodedCharset, decodedString))) + if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) + { + m_compFields->SetSubject(aCString, NULL); + PR_Free(aCString); + } + + message->GetAuthor(aString); + m_compFields->SetTo(nsAutoCString(aString), NULL); + if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(aString, encodedCharset, decodedString))) + if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) + { + m_compFields->SetTo(aCString, NULL); + PR_Free(aCString); + } + + if (type == MSGCOMP_TYPE_ReplyAll) + { + nsString cString, dString; + message->GetRecipients(cString); + CleanUpRecipients(cString); + message->GetCCList(dString); + CleanUpRecipients(dString); + if (cString.Length() > 0 && dString.Length() > 0) + cString = cString + ", "; + cString = cString + dString; + m_compFields->SetCc(nsAutoCString(cString), NULL); + if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(cString, encodedCharset, decodedString))) + if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) + { + m_compFields->SetCc(aCString, NULL); + PR_Free(aCString); + } + } + + QuoteOriginalMessage(originalMsgURI, 1); + + break; + } + case MSGCOMP_TYPE_ForwardAsAttachment: + case MSGCOMP_TYPE_ForwardInline: + { + if (!aCharset.Equals("")) + m_compFields->SetCharacterSet(nsAutoCString(aCharset), nsnull); + + bString += "[Fwd: "; + bString += aString; + bString += "]"; + + m_compFields->SetSubject(nsAutoCString(bString), nsnull); + if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(bString, encodedCharset, decodedString))) + if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) + { + m_compFields->SetSubject(aCString, nsnull); + PR_Free(aCString); + } + + if (type == MSGCOMP_TYPE_ForwardAsAttachment) + QuoteOriginalMessage(originalMsgURI, 0); + else + QuoteOriginalMessage(originalMsgURI, 2); + break; + } + } + } + } - message->GetCharSet(aCharset); - message->GetSubject(aString); - switch (type) - { - default : break; - case MSGCOMP_TYPE_Reply : - case MSGCOMP_TYPE_ReplyAll: - { - // get an original charset, used for a label, UTF-8 is used for the internal processing - if (!aCharset.Equals("")) - m_compFields->SetCharacterSet(nsAutoCString(aCharset), nsnull); - - bString += "Re: "; - bString += aString; - m_compFields->SetSubject(nsAutoCString(bString), nsnull); - if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(bString, encodedCharset, decodedString))) - if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) - { - m_compFields->SetSubject(aCString, NULL); - PR_Free(aCString); - } - - message->GetAuthor(aString); - m_compFields->SetTo(nsAutoCString(aString), NULL); - if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(aString, encodedCharset, decodedString))) - if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) - { - m_compFields->SetTo(aCString, NULL); - PR_Free(aCString); - } - - if (type == MSGCOMP_TYPE_ReplyAll) - { - nsString cString, dString; - message->GetRecipients(cString); - CleanUpRecipients(cString); - message->GetCCList(dString); - CleanUpRecipients(dString); - if (cString.Length() > 0 && dString.Length() > 0) - cString = cString + ", "; - cString = cString + dString; - m_compFields->SetCc(nsAutoCString(cString), NULL); - if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(cString, encodedCharset, decodedString))) - if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) - { - m_compFields->SetCc(aCString, NULL); - PR_Free(aCString); - } - } - - QuoteOriginalMessage(originalMsgURI, 1); - - break; - } - case MSGCOMP_TYPE_ForwardAsAttachment: - case MSGCOMP_TYPE_ForwardInline: - { - if (!aCharset.Equals("")) - m_compFields->SetCharacterSet(nsAutoCString(aCharset), nsnull); - - bString += "[Fwd: "; - bString += aString; - bString += "]"; - - m_compFields->SetSubject(nsAutoCString(bString), nsnull); - if (NS_SUCCEEDED(rv = nsMsgI18NDecodeMimePartIIStr(bString, encodedCharset, decodedString))) - if (NS_SUCCEEDED(rv = ConvertFromUnicode(msgCompHeaderInternalCharset(), decodedString, &aCString))) - { - m_compFields->SetSubject(aCString, nsnull); - PR_Free(aCString); - } - - if (type == MSGCOMP_TYPE_ForwardAsAttachment) - QuoteOriginalMessage(originalMsgURI, 0); - else - QuoteOriginalMessage(originalMsgURI, 2); - break; - } - } - } - } - return rv; + return rv; } //////////////////////////////////////////////////////////////////////////////////// @@ -622,42 +667,77 @@ QuotingOutputStreamImpl::QuotingOutputStreamImpl(void) NS_INIT_REFCNT(); } +nsresult +QuotingOutputStreamImpl::ConvertToPlainText() +{ + nsresult rv; + nsString convertedText; + nsIParser *parser; + + static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID); + static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); + + rv = nsComponentManager::CreateInstance(kCParserCID, nsnull, + kCParserIID, (void **)&parser); + if (NS_SUCCEEDED(rv) && parser) + { + nsHTMLToTXTSinkStream *sink = nsnull; + + rv = NS_New_HTMLToTXT_SinkStream((nsIHTMLContentSink **)&sink, &convertedText, PR_TRUE); + if (sink && NS_SUCCEEDED(rv)) + { + sink->DoFragment(PR_TRUE); + parser->SetContentSink(sink); + + // Set the charset... + nsAutoString utf8("UTF-8"); + parser->SetDocumentCharset(utf8, kCharsetFromMetaTag); + + nsIDTD* dtd = nsnull; + rv = NS_NewNavHTMLDTD(&dtd); + if (NS_SUCCEEDED(rv)) + { + parser->RegisterDTD(dtd); + rv = parser->Parse(mMsgBody, 0, "text/html", PR_FALSE, PR_TRUE); + } + NS_IF_RELEASE(dtd); + NS_IF_RELEASE(sink); + } + + NS_RELEASE(parser); + // + // Now assign the results if we worked! + // + if (NS_SUCCEEDED(rv)) + mMsgBody = convertedText; + } + + return rv; +} + nsresult QuotingOutputStreamImpl::Close(void) { if (mComposeObj) { mMsgBody += ""; - nsIMsgCompFields *aCompFields; - mComposeObj->GetCompFields(&aCompFields); - if (aCompFields) - aCompFields->SetBody(nsAutoCString(mMsgBody), NULL); - nsIEditorShell *aEditor = nsnull; - mComposeObj->GetEditor(&aEditor); + // Now we have an HTML representation of the quoted message. + // If we are in plain text mode, we need to convert this to plain + // text before we try to insert it into the editor. If we don't, we + // just get lots of HTML text in the message...not good. + // + PRBool composeHTML = PR_TRUE; + mComposeObj->GetComposeHTML(&composeHTML); + if (!composeHTML) + ConvertToPlainText(); - if (aEditor) - { - if (mMsgBody.Length()) - { - // This is ugly...but hopefully effective... - nsString fileName(TEMP_PATH_DIR); - fileName += TEMP_MESSAGE_OUT; - - nsFileSpec aPath(fileName); - nsOutputFileStream tempFile(aPath); - - if (tempFile.is_open()) - { - tempFile.write(nsAutoCString(mMsgBody), mMsgBody.Length()); - tempFile.close(); - - nsAutoString urlStr = nsFileURL(aPath).GetURLString(); - aEditor->LoadUrl(urlStr.GetUnicode()); - } - } - } + nsIMsgCompFields *compFields; + if (NS_SUCCEEDED(mComposeObj->GetCompFields(&compFields))) + if (compFields) + compFields->SetBody(nsAutoCString(mMsgBody), NULL); + mComposeObj->LoadBody(); } return NS_OK; @@ -735,7 +815,6 @@ nsMsgCompose::QuoteOriginalMessage(const PRUnichar *originalMsgURI, PRInt32 what rv = prefs->GetBoolPref("mail.old_quoting", &oldQuoting); } - if (oldQuoting) { printf("nsMsgCompose: using old quoting function!"); diff --git a/mozilla/mailnews/compose/src/nsMsgCompose.h b/mozilla/mailnews/compose/src/nsMsgCompose.h index aa767572f7e..81226cb7acb 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompose.h +++ b/mozilla/mailnews/compose/src/nsMsgCompose.h @@ -81,6 +81,8 @@ class nsMsgCompose : public nsIMsgCompose NS_IMETHOD GetWrapLength(PRInt32 *aWrapLength); /******/ + nsresult LoadBody(); + private: nsresult CreateMessage(const PRUnichar * originalMsgURI, MSG_ComposeType type, MSG_ComposeFormat format, nsISupports* object); @@ -98,6 +100,7 @@ private: QuotingOutputStreamImpl *mOutStream; nsCOMPtr mBaseStream; nsCOMPtr mQuote; + PRBool mBodyLoaded; }; //////////////////////////////////////////////////////////////////////////////////// @@ -123,6 +126,8 @@ public: NS_IMETHOD SetComposeObj(nsMsgCompose *obj); + NS_IMETHOD ConvertToPlainText(); + private: nsMsgCompose *mComposeObj; nsString mMsgBody; diff --git a/mozilla/mailnews/compose/src/nsMsgSend.cpp b/mozilla/mailnews/compose/src/nsMsgSend.cpp index 753f647499f..5f5de5b8c63 100644 --- a/mozilla/mailnews/compose/src/nsMsgSend.cpp +++ b/mozilla/mailnews/compose/src/nsMsgSend.cpp @@ -1184,6 +1184,7 @@ nsMsgComposeAndSend::Init( PRBool digest_p, PRBool dont_deliver_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, const char *attachment1_type, const char *attachment1_body, PRUint32 attachment1_body_length, @@ -1200,6 +1201,7 @@ nsMsgComposeAndSend::Init( // m_dont_deliver_p = dont_deliver_p; m_deliver_mode = mode; + mMsgToReplace = msgToReplace; mUserIdentity = aUserIdentity; NS_ASSERTION(mUserIdentity, "Got null identity!\n"); @@ -2007,6 +2009,7 @@ nsMsgComposeAndSend::CreateAndSendMessage( PRBool digest_p, PRBool dont_deliver_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, const char *attachment1_type, const char *attachment1_body, PRUint32 attachment1_body_length, @@ -2023,7 +2026,7 @@ nsMsgComposeAndSend::CreateAndSendMessage( attachment1_type = attachment1_body = 0; rv = Init(aUserIdentity, (nsMsgCompFields *)fields, nsnull, - digest_p, dont_deliver_p, mode, + digest_p, dont_deliver_p, mode, msgToReplace, attachment1_type, attachment1_body, attachment1_body_length, attachments, preloaded_attachments, @@ -2043,6 +2046,7 @@ nsMsgComposeAndSend::SendMessageFile( PRBool deleteSendFileOnCompletion, PRBool digest_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, nsIMsgSendListener **aListenerArray) { nsresult rv; @@ -2071,7 +2075,7 @@ nsMsgComposeAndSend::SendMessageFile( } rv = Init(aUserIndentity, (nsMsgCompFields *)fields, sendFileSpec, - digest_p, PR_FALSE, mode, + digest_p, PR_FALSE, mode, msgToReplace, nsnull, nsnull, nsnull, nsnull, nsnull, nsnull); if (NS_SUCCEEDED(rv)) @@ -2158,6 +2162,7 @@ nsMsgComposeAndSend::SendWebPage(nsIMsgIdentity *aUserIndenti PR_FALSE, //PRBool digest_p, PR_FALSE, //PRBool dont_deliver_p, mode, //nsMsgDeliverMode mode, + nsnull, // nsIMessage *msgToReplace, TEXT_PLAIN, //const char *attachment1_type, msgBody, //const char *attachment1_body, bodyLen, // PRUint32 attachment1_body_length, diff --git a/mozilla/mailnews/compose/src/nsMsgSend.h b/mozilla/mailnews/compose/src/nsMsgSend.h index d49f8ba9c56..942c201a5ef 100644 --- a/mozilla/mailnews/compose/src/nsMsgSend.h +++ b/mozilla/mailnews/compose/src/nsMsgSend.h @@ -227,6 +227,7 @@ public: PRBool digest_p, PRBool dont_deliver_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, const char *attachment1_type, const char *attachment1_body, PRUint32 attachment1_body_length, @@ -273,6 +274,7 @@ public: PRBool digest_p, PRBool dont_deliver_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, const char *attachment1_type, const char *attachment1_body, PRUint32 attachment1_body_length, @@ -290,6 +292,7 @@ public: PRBool deleteSendFileOnCompletion, PRBool digest_p, nsMsgDeliverMode mode, + nsIMessage *msgToReplace, nsIMsgSendListener **aListenerArray); NS_IMETHOD SendWebPage( @@ -312,6 +315,8 @@ public: // created, instead of actually delivering message. nsMsgDeliverMode m_deliver_mode; // nsMsgDeliverNow, nsMsgQueueForLater, nsMsgSaveAsDraft, // nsMsgSaveAsTemplate + nsIMessage *mMsgToReplace; // If the mode is nsMsgSaveAsDraft, this is the message it will + // replace // These are needed for callbacks to the FE... nsIMsgSendListener **mListenerArray; diff --git a/mozilla/mailnews/compose/src/nsMsgSendLater.cpp b/mozilla/mailnews/compose/src/nsMsgSendLater.cpp index c260e0cbf4d..a8990a69405 100644 --- a/mozilla/mailnews/compose/src/nsMsgSendLater.cpp +++ b/mozilla/mailnews/compose/src/nsMsgSendLater.cpp @@ -86,13 +86,13 @@ nsMsgSendLater::nsMsgSendLater() mFirstTime = PR_TRUE; mTotalSentSuccessfully = 0; mTotalSendCount = 0; - mTagData = nsnull; mMessageFolder = nsnull; mMessage = nsnull; mLeftoverBuffer = nsnull; mSendListener = nsnull; mListenerArray = nsnull; + mListenerArrayCount = 0; m_to = nsnull; m_bcc = nsnull; @@ -157,15 +157,28 @@ char * FindEOL(char *inBuf, char *buf_end) { char *buf = inBuf; - while (*buf != 0 && *buf != LF) - buf++; + char *findLoc = nsnull; - if (*buf == '\0') - return buf; - else if (buf+1 > buf_end) + while (buf <= buf_end) + if (*buf == 0) + return buf; + else if ( (*buf == LF) || (*buf == CR) ) + { + findLoc = buf; + break; + } + else + ++buf; + + if (!findLoc) return nsnull; - else - return (++buf); + else if ((findLoc + 1) > buf_end) + return buf; + + if ( (*findLoc == LF && *(findLoc+1) == CR) || + (*findLoc == CR && *(findLoc+1) == LF)) + findLoc++; // possibly a pair. + return findLoc; } nsresult @@ -194,6 +207,7 @@ nsMsgSendLater::BuildNewBuffer(const char* aBuf, PRUint32 aCount, PRUint32 *tota return NS_ERROR_FAILURE; nsCRT::memcpy(mLeftoverBuffer + leftoverSize, aBuf, aCount); + *totalBufSize = aCount + leftoverSize; return NS_OK; } @@ -220,7 +234,8 @@ nsMsgSendLater::Write(const char* aBuf, PRUint32 aCount, PRUint32 *aWriteCount) } else // yum, leftovers...new buffer created...sitting in mLeftoverBuffer { - newbuf = startBuf = mLeftoverBuffer; + newbuf = mLeftoverBuffer; + startBuf = newbuf; endBuf = startBuf + size - 1; mLeftoverBuffer = nsnull; // null out this } @@ -234,16 +249,11 @@ nsMsgSendLater::Write(const char* aBuf, PRUint32 aCount, PRUint32 *aWriteCount) break; } - rv = DeliverQueuedLine(startBuf, (lineEnd - startBuf)); + rv = DeliverQueuedLine(startBuf, (lineEnd - startBuf) + 1); if (NS_FAILED(rv)) break; - char c = *lineEnd; - *lineEnd = 0; - printf("LINE: [%s]\n", startBuf); - *lineEnd = c; - - startBuf = lineEnd; + startBuf = lineEnd+1; } if (newbuf) @@ -418,14 +428,6 @@ nsCOMPtr pMsgSend = nsnull; if (!created) return NS_ERROR_FAILURE; - // - // Now we have to build the "real" list of recipients since we can't rely - // on what is in the database. We do this by actually parsing the message - // headers and building a new list. - rv = BuildHeaders(); - if (NS_FAILED(rv)) - return rv; - // Get the recipients... if (NS_FAILED(mMessage->GetRecipients(recips))) return NS_ERROR_FAILURE; @@ -448,6 +450,9 @@ nsCOMPtr pMsgSend = nsnull; return NS_ERROR_FAILURE; } + // Since we have already parsed all of the headers, we are simply going to + // set the composition fields and move on. + // if (m_to) compFields->SetTo(m_to, NULL); @@ -490,6 +495,7 @@ nsCOMPtr pMsgSend = nsnull; PR_TRUE, // PRBool deleteSendFileOnCompletion, PR_FALSE, // PRBool digest_p, nsMsgDeliverNow, // nsMsgDeliverMode mode, + nsnull, // nsIMessage *msgToReplace, tArray); NS_RELEASE(mSendListener); if (NS_FAILED(rv)) @@ -653,8 +659,7 @@ nsMsgSendLater::GetUnsentMessagesFolder(nsIMsgIdentity *userIdentity) // nsresult nsMsgSendLater::SendUnsentMessages(nsIMsgIdentity *identity, - nsIMsgSendLaterListener **listenerArray, - void *tagData) + nsIMsgSendLaterListener **listenerArray) { mIdentity = identity; if (!mIdentity) @@ -665,8 +670,6 @@ nsMsgSendLater::SendUnsentMessages(nsIMsgIdentity *identity, if (listenerArray) SetListenerArray(listenerArray); - mTagData = tagData; - mMessageFolder = GetUnsentMessagesFolder(mIdentity); if (!mMessageFolder) return NS_ERROR_FAILURE; @@ -772,7 +775,7 @@ nsMsgSendLater::BuildHeaders() break; case 'N': case 'n': if (!PL_strncasecmp ("Newsgroups", buf, end - buf)) - header = &m_newsgroups; + header = &m_newsgroups; break; case 'S': case 's': if (!PL_strncasecmp ("Sender", buf, end - buf)) @@ -810,10 +813,10 @@ nsMsgSendLater::BuildHeaders() SEARCH_NEWLINE: while (*buf != 0 && *buf != CR && *buf != LF) - buf++; + buf++; if (buf+1 >= buf_end) - ; + ; // If "\r\n " or "\r\n\t" is next, that doesn't terminate the header. else if (buf+2 < buf_end && (buf[0] == CR && buf[1] == LF) && @@ -984,16 +987,15 @@ nsMsgSendLater::DeliverQueuedLine(char *line, PRInt32 length) m_bytesRead += length; - // convert existing newline to CRLF - if (length > 0 && - (line[length-1] == CR || - (line[length-1] == LF && - (length < 2 || line[length-2] != CR)))) - { - line[length-1] = CR; - line[length++] = LF; - } - +// convert existing newline to CRLF +// Don't need this because the calling routine is taking care of it. +// if (length > 0 && (line[length-1] == CR || +// (line[length-1] == LF && (length < 2 || line[length-2] != CR)))) +// { +// line[length-1] = CR; +// line[length++] = LF; +// } +// if (m_inhead) { if (m_headersPosition == 0) diff --git a/mozilla/mailnews/compose/src/nsMsgSendLater.h b/mozilla/mailnews/compose/src/nsMsgSendLater.h index 40630e3c862..30fd58c9631 100644 --- a/mozilla/mailnews/compose/src/nsMsgSendLater.h +++ b/mozilla/mailnews/compose/src/nsMsgSendLater.h @@ -82,8 +82,7 @@ public: // nsIMsgSendLater support NS_IMETHOD SendUnsentMessages(nsIMsgIdentity *identity, - nsIMsgSendLaterListener **listenerArray, // SHERRY nsMsgSendUnsentMessagesCallback msgCallback, - void *tagData); + nsIMsgSendLaterListener **listenerArray); // Methods needed for implementing interface... nsIMsgFolder *GetUnsentMessagesFolder(nsIMsgIdentity *userIdentity); diff --git a/mozilla/mailnews/compose/tests/compose/test.cpp b/mozilla/mailnews/compose/tests/compose/test.cpp index a71eae2d7dd..f66373712e1 100644 --- a/mozilla/mailnews/compose/tests/compose/test.cpp +++ b/mozilla/mailnews/compose/tests/compose/test.cpp @@ -397,7 +397,8 @@ int main(int argc, char *argv[]) if (rv == NS_OK && pMsgCompFields) { pMsgCompFields->SetFrom(", rhp@netscape.com, ", NULL); - pMsgCompFields->SetTo("rhp@netscape.com", NULL); + //pMsgCompFields->SetTo("rhp@netscape.com", NULL); + pMsgCompFields->SetNewsgroups("news://news.mozilla.org./netscape.test", nsnull); pMsgCompFields->SetSubject("[spam] test", NULL); // pMsgCompFields->SetTheForcePlainText(PR_TRUE, &rv); pMsgCompFields->SetBody(email, NULL); @@ -423,11 +424,12 @@ int main(int argc, char *argv[]) if (tagBuf) PL_strcpy(tagBuf, "Do that voodo, that you do, soooo weeeelllll!"); - pMsgSend->CreateAndSendMessage(nsnull, // identity + pMsgSend->CreateAndSendMessage(identity, pMsgCompFields, PR_FALSE, // PRBool digest_p, PR_FALSE, // PRBool dont_deliver_p, - nsMsgDeliverNow, // nsMsgDeliverMode mode, + nsMsgQueueForLater, // nsMsgDeliverNow, // nsMsgDeliverMode mode, + nsnull, // nsIMessage *msgToReplace TEXT_HTML, //TEXT_PLAIN, // const char *attachment1_type, pBody, // const char *attachment1_body, nBodyLength, // PRUint32 attachment1_body_length, diff --git a/mozilla/mailnews/compose/tests/compose2/test2.cpp b/mozilla/mailnews/compose/tests/compose2/test2.cpp index ef5795a26ee..9f06a012e0d 100644 --- a/mozilla/mailnews/compose/tests/compose2/test2.cpp +++ b/mozilla/mailnews/compose/tests/compose2/test2.cpp @@ -99,6 +99,38 @@ GetTheTempDirectoryOnTheSystem(void) return retPath; } +nsIMsgIdentity * +GetHackIdentity() +{ +nsresult rv; + + NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kCMsgMailSessionCID, &rv); + if (NS_FAILED(rv)) + { + printf("Failure on Mail Session Init!\n"); + return nsnull; + } + + nsCOMPtr identity = nsnull; + nsCOMPtr accountManager; + + rv = mailSession->GetAccountManager(getter_AddRefs(accountManager)); + if (NS_FAILED(rv)) + { + printf("Failure getting account Manager!\n"); + return nsnull; + } + + rv = mailSession->GetCurrentIdentity(getter_AddRefs(identity)); + if (NS_FAILED(rv)) + { + printf("Failure getting Identity!\n"); + return nsnull; + } + + return identity; +} + // // Create a file spec for the a unique temp file // on the local machine. Caller must free memory @@ -289,7 +321,7 @@ int main(int argc, char *argv[]) nsComponentManager::RegisterComponent(kEventQueueServiceCID, NULL, NULL, XPCOM_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kEventQueueCID, NULL, NULL, XPCOM_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kPrefCID, nsnull, nsnull, PREF_DLL, PR_TRUE, PR_TRUE); - nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NULL, APPSHELL_DLL, PR_FALSE, PR_FALSE); + nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NS_FILELOCATOR_PROGID, APPSHELL_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kMimeURLUtilsCID, NULL, NULL, MIME_DLL, PR_FALSE, PR_FALSE); // Create the Event Queue for this thread... @@ -374,12 +406,13 @@ int main(int argc, char *argv[]) return NS_ERROR_FAILURE; } - pMsgSend->SendMessageFile(nsnull, // identity... + pMsgSend->SendMessageFile(GetHackIdentity(), // identity... pMsgCompFields, // nsIMsgCompFields *fields, mailFile, // nsFileSpec *sendFileSpec, PR_TRUE, // PRBool deleteSendFileOnCompletion, PR_FALSE, // PRBool digest_p, nsMsgDeliverNow, // nsMsgDeliverMode mode, + nsnull, // nsIMessage *msgToReplace tArray); // nsIMsgSendListener array } } diff --git a/mozilla/mailnews/compose/tests/makefile.win b/mozilla/mailnews/compose/tests/makefile.win index 547dfd53c9d..a85a126a610 100644 --- a/mozilla/mailnews/compose/tests/makefile.win +++ b/mozilla/mailnews/compose/tests/makefile.win @@ -18,6 +18,6 @@ DEPTH=..\..\.. DIRS=compose smtp sendpage -#DIRS+=compose2 geturl sendlater sendpage +DIRS=$(DIRS) compose2 geturl sendlater include <$(DEPTH)\config\rules.mak> diff --git a/mozilla/mailnews/compose/tests/sendlater/test.cpp b/mozilla/mailnews/compose/tests/sendlater/test.cpp index eb70f35027d..6b92ce88e80 100644 --- a/mozilla/mailnews/compose/tests/sendlater/test.cpp +++ b/mozilla/mailnews/compose/tests/sendlater/test.cpp @@ -39,7 +39,7 @@ #include "prmem.h" #include "nsIMimeURLUtils.h" -#include "nsMsgSendLater.h" +#include "nsIMsgSendLater.h" #ifdef XP_PC @@ -124,7 +124,7 @@ int main(int argc, char *argv[]) nsComponentManager::RegisterComponent(kEventQueueServiceCID, NULL, NULL, XPCOM_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kEventQueueCID, NULL, NULL, XPCOM_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kPrefCID, nsnull, nsnull, PREF_DLL, PR_TRUE, PR_TRUE); - nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NULL, APPSHELL_DLL, PR_FALSE, PR_FALSE); + nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NS_FILELOCATOR_PROGID, APPSHELL_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kMimeURLUtilsCID, NULL, NULL, MIME_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kNetSupportDialogCID, NULL, NULL, APPSHELL_DLL, PR_FALSE, PR_FALSE); nsComponentManager::RegisterComponent(kAppShellServiceCID, NULL, NULL, APPSHELL_DLL, PR_FALSE, PR_FALSE); @@ -207,7 +207,7 @@ int main(int argc, char *argv[]) if (NS_SUCCEEDED(rv) && pMsgSendLater) { printf("We succesfully obtained a nsIMsgSendLater interface....\n"); - pMsgSendLater->SendUnsentMessages(identity, nsnull, nsnull); + pMsgSendLater->SendUnsentMessages(identity, nsnull); } #ifdef XP_PC diff --git a/mozilla/mailnews/compose/tests/sendpage/Test.cpp b/mozilla/mailnews/compose/tests/sendpage/Test.cpp index 14c6367bd98..8a1d948f6ce 100644 --- a/mozilla/mailnews/compose/tests/sendpage/Test.cpp +++ b/mozilla/mailnews/compose/tests/sendpage/Test.cpp @@ -257,7 +257,7 @@ SetupRegistry(void) // prefs nsComponentManager::RegisterComponent(kPrefCID, NULL, NULL, PREF_DLL, PR_FALSE, PR_FALSE); - nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NULL, APPSHELL_DLL, PR_FALSE, PR_FALSE); + nsComponentManager::RegisterComponent(kFileLocatorCID, NULL, NS_FILELOCATOR_PROGID, APPSHELL_DLL, PR_FALSE, PR_FALSE); return NS_OK; } @@ -403,7 +403,7 @@ main(int argc, char *argv[]) return NS_ERROR_FAILURE; } - pMsgSend->SendWebPage(nsnull, pMsgCompFields, url, nsMsgDeliverNow, tArray); + pMsgSend->SendWebPage(ident, pMsgCompFields, url, nsMsgDeliverNow, tArray); } }