fix for #110502. get "edit as new" and "fwd inline" to work again.

the problem is the standard url parser no longer allows us to use illegal
uris.  '_' is an illegal character in a URI (and URL) scheme.
so this patch switches from "foo_message://" to "foo-message://"
r=bbaetz,sr=bienvenu


git-svn-id: svn://10.0.0.236/trunk@108459 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
sspitzer%netscape.com
2001-11-18 23:38:52 +00:00
parent 1b665ea539
commit f2facb1565
19 changed files with 62 additions and 64 deletions

View File

@@ -242,7 +242,7 @@ function isNewsURI(uri)
return false;
}
else {
return ((uri.substring(0,6) == "news:/") || (uri.substring(0,14) == "news_message:/"));
return ((uri.substring(0,6) == "news:/") || (uri.substring(0,14) == "news-message:/"));
}
}

View File

@@ -260,7 +260,7 @@ function InitMessageMenu()
function IsNewsMessage(messageUri)
{
if (!messageUri) return false;
return (messageUri.substring(0,14) == "news_message:/")
return (messageUri.substring(0,14) == "news-message:/")
}
function InitMessageMark()

View File

@@ -109,42 +109,40 @@ nsresult GetMsgDBHdrFromURI(const char *uri, nsIMsgDBHdr **msgHdr)
nsresult CreateStartupUrl(char *uri, nsIURI** aUrl)
{
nsresult rv = NS_ERROR_NULL_POINTER;
if (!uri || !*uri || !aUrl) return rv;
*aUrl = nsnull;
if (PL_strncasecmp(uri, "imap", 4) == 0)
{
nsCOMPtr<nsIImapUrl> imapUrl;
rv = nsComponentManager::CreateInstance(kImapUrlCID, nsnull,
NS_GET_IID(nsIImapUrl),
getter_AddRefs(imapUrl));
if (NS_SUCCEEDED(rv) && imapUrl)
rv = imapUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "mailbox", 7) == 0)
{
nsCOMPtr<nsIMailboxUrl> mailboxUrl;
rv = nsComponentManager::CreateInstance(kCMailboxUrl, nsnull,
NS_GET_IID(nsIMailboxUrl),
getter_AddRefs(mailboxUrl));
if (NS_SUCCEEDED(rv) && mailboxUrl)
rv = mailboxUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "news", 4) == 0)
{
nsCOMPtr<nsINntpUrl> nntpUrl;
rv = nsComponentManager::CreateInstance(kCNntpUrlCID, nsnull,
NS_GET_IID(nsINntpUrl),
getter_AddRefs(nntpUrl));
if (NS_SUCCEEDED(rv) && nntpUrl)
rv = nntpUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
if (*aUrl)
(*aUrl)->SetSpec(uri);
return rv;
nsresult rv = NS_ERROR_NULL_POINTER;
if (!uri || !*uri || !aUrl) return rv;
*aUrl = nsnull;
// XXX fix this, so that base doesn't depend on imap, local or news.
// we can't do NS_NewURI(uri, aUrl), because these are imap-message://, mailbox-message://, news-message:// uris.
// I think we should do something like GetMessageServiceFromURI() to get the service, and then have the service create the
// appropriate nsI*Url, and then QI to nsIURI, and return it.
// see bug #110689
if (PL_strncasecmp(uri, "imap", 4) == 0)
{
nsCOMPtr<nsIImapUrl> imapUrl = do_CreateInstance(kImapUrlCID, &rv);
if (NS_SUCCEEDED(rv) && imapUrl)
rv = imapUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "mailbox", 7) == 0)
{
nsCOMPtr<nsIMailboxUrl> mailboxUrl = do_CreateInstance(kCMailboxUrl, &rv);
if (NS_SUCCEEDED(rv) && mailboxUrl)
rv = mailboxUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
else if (PL_strncasecmp(uri, "news", 4) == 0)
{
nsCOMPtr<nsINntpUrl> nntpUrl = do_CreateInstance(kCNntpUrlCID, &rv);
if (NS_SUCCEEDED(rv) && nntpUrl)
rv = nntpUrl->QueryInterface(NS_GET_IID(nsIURI),
(void**) aUrl);
}
if (*aUrl)
(*aUrl)->SetSpec(uri);
return rv;
}

View File

@@ -478,7 +478,7 @@ nsMsgAttachmentHandler::SnarfMsgAttachment(nsMsgCompFields *compFields)
nsresult rv = NS_ERROR_INVALID_ARG;
nsCOMPtr <nsIMsgMessageService> messageService;
if (PL_strcasestr(m_uri, "_message:"))
if (PL_strcasestr(m_uri, "-message:"))
{
mFileSpec = nsMsgCreateTempFileSpec("nsmail.tmp");
mDeleteFile = PR_TRUE;

View File

@@ -2262,13 +2262,13 @@ nsMsgComposeAndSend::AddCompFieldRemoteAttachments(PRUint32 aStartLocation,
msg_pick_real_name(&m_attachments[newLoc], proposedName, mCompFields->GetCharacterSet());
++newLoc;
}
else if (strUrl.Find("_message:") != -1)
else if (strUrl.Find("-message:") != -1)
{
if (strUrl.Find("mailbox_message:") != -1 ||
strUrl.Find("imap_message:") != -1)
if (strUrl.Find("mailbox-message:") != -1 ||
strUrl.Find("imap-message:") != -1)
(*aMailboxCount)++;
else if (strUrl.Find("news_message:") != -1 ||
strUrl.Find("snews_message:") != -1)
else if (strUrl.Find("news-message:") != -1 ||
strUrl.Find("snews-message:") != -1)
(*aNewsCount)++;
m_attachments[newLoc].m_uri = ToNewCString(strUrl);

View File

@@ -80,7 +80,7 @@ static nsModuleComponentInfo gComponents[] = {
nsImapMailFolderConstructor },
{ "IMAP Service", NS_IMAPSERVICE_CID,
"@mozilla.org/messenger/messageservice;1?type=imap_message",
"@mozilla.org/messenger/messageservice;1?type=imap-message",
nsImapServiceConstructor },
{ "IMAP Service", NS_IMAPSERVICE_CID,

View File

@@ -206,7 +206,7 @@ nsresult nsParseImapMessageURI(const char* uri, nsCString& folderURI, PRUint32 *
keySeparator);
nsAutoString folderPath;
uriStr.Left(folderURI, keySeparator);
folderURI.Cut(4, 8); // cut out the _message part of imap_message:
folderURI.Cut(4, 8); // cut out the _message part of imap-message:
nsCAutoString keyStr;
if (keyEndSeparator != -1)
uriStr.Mid(keyStr, keySeparator+1,

View File

@@ -43,7 +43,7 @@
#include "nsIMsgIncomingServer.h"
static const char kImapRootURI[] = "imap:/";
static const char kImapMessageRootURI[] = "imap_message:/";
static const char kImapMessageRootURI[] = "imap-message:/";
extern nsresult
nsImapURI2Path(const char* rootURI, const char* uriStr,

View File

@@ -105,7 +105,7 @@
"@mozilla.org/messenger/messageservice;1?type=mailbox"
#define NS_MAILBOXSERVICE_CONTRACTID3 \
"@mozilla.org/messenger/messageservice;1?type=mailbox_message"
"@mozilla.org/messenger/messageservice;1?type=mailbox-message"
#define NS_MAILBOXSERVICE_CONTRACTID4 \
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "mailbox"

View File

@@ -197,7 +197,7 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr,
{
nsresult rv;
// verify that rootURI starts with "mailbox:/" or "mailbox_message:/"
// verify that rootURI starts with "mailbox:/" or "mailbox-message:/"
if ((PL_strcmp(rootURI, kMailboxRootURI) != 0) &&
(PL_strcmp(rootURI, kMailboxMessageRootURI) != 0)) {
pathResult = nsnull;
@@ -253,8 +253,8 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr,
}
/* parses LocalMessageURI
* mailbox_message://folder1/folder2#123?header=none or
* mailbox_message://folder1/folder2#1234&part=1.2
* mailbox-message://folder1/folder2#123?header=none or
* mailbox-message://folder1/folder2#1234&part=1.2
*
* puts folder URI in folderURI (mailbox://folder1/folder2)
* message key number in key
@@ -274,7 +274,7 @@ nsresult nsParseLocalMessageURI(const char* uri,
keySeparator);
nsAutoString folderPath;
uriStr.Left(folderURI, keySeparator);
folderURI.Cut(7, 8); // cut out the _message part of mailbox_message:
folderURI.Cut(7, 8); // cut out the -message part of mailbox-message:
nsCAutoString keyStr;
if (keyEndSeparator != -1)
@@ -294,7 +294,7 @@ nsresult nsParseLocalMessageURI(const char* uri,
nsresult nsBuildLocalMessageURI(const char *baseURI, PRUint32 key, nsCString& uri)
{
// need to convert mailbox://hostname/.. to mailbox_message://hostname/..
// need to convert mailbox://hostname/.. to mailbox-message://hostname/..
uri.Append(baseURI);
uri.Append('#');

View File

@@ -43,7 +43,7 @@
#include "nsIMsgIncomingServer.h"
static const char kMailboxRootURI[] = "mailbox:/";
static const char kMailboxMessageRootURI[] = "mailbox_message:/";
static const char kMailboxMessageRootURI[] = "mailbox-message:/";
nsresult
nsLocalURI2Path(const char* rootURI, const char* uriStr, nsFileSpec& pathResult);

View File

@@ -411,7 +411,7 @@ NS_IMETHODIMP nsPop3Service::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI
if (NS_SUCCEEDED(rv))
{
nsCAutoString messageUri (aSpec);
messageUri.ReplaceSubstring("mailbox:", "mailbox_message:");
messageUri.ReplaceSubstring("mailbox:", "mailbox-message:");
messageUri.ReplaceSubstring("?number=", "#");
offset = messageUri.Find("&");
if (offset)

View File

@@ -781,7 +781,7 @@ MimeMessage_partial_message_html(const char *data, void *closure,
PR_FALSE);
char *msgIdPtr = PL_strstr(msgId, "<");
orig_url.ReplaceSubstring("mailbox_message", "mailbox");
orig_url.ReplaceSubstring("mailbox-message", "mailbox");
orig_url.ReplaceSubstring("#", "?number=");
if (msgIdPtr)

View File

@@ -79,9 +79,9 @@
#define NS_NNTPPROTOCOLHANDLER_CONTRACTID \
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "nntp"
#define NS_NEWSMESSAGEPROTOCOLHANDLER_CONTRACTID \
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "news_message"
NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "news-message"
#define NS_NEWSMESSAGESERVICE_CONTRACTID \
"@mozilla.org/messenger/messageservice;1?type=news_message"
"@mozilla.org/messenger/messageservice;1?type=news-message"
#define NS_NNTPMESSAGESERVICE_CONTRACTID \
"@mozilla.org/messenger/messageservice;1?type=news"
#define NS_NNTPSERVICE_CONTRACTID \

View File

@@ -78,7 +78,7 @@ interface nsINntpService : nsISupports {
void downloadNewsgroupsForOffline(in nsIMsgWindow aMsgWindow, in nsIUrlListener aListener);
/**
* can handle news_message:// and news://
* can handle news-message:// and news://
*/
void decomposeNewsURI(in string uri, out nsIMsgFolder folder, out nsMsgKey key);

View File

@@ -1003,7 +1003,7 @@ nsresult nsNNTPProtocol::LoadUrl(nsIURI * aURL, nsISupports * aConsumer)
if (m_messageID || (m_key != nsMsgKey_None))
{
/*
news_message://HOST/GROUP#key
news-message://HOST/GROUP#key
news://HOST/MESSAGE_ID
not sure about these:

View File

@@ -57,7 +57,7 @@ nsParseNewsMessageURI(const char* uri, nsCString& folderURI, PRUint32 *key)
keySeparator);
uriStr.Left(folderURI, keySeparator);
folderURI.Cut(4, 8); // cut out the _message part of news_message:
folderURI.Cut(4, 8); // cut out the -message part of news-message:
nsCAutoString keyStr;
if (keyEndSeparator != -1)

View File

@@ -44,7 +44,7 @@ class nsIMsgNewsFolder;
static const char kNntpRootURI[] = "nntp:/";
static const char kNewsRootURI[] = "news:/";
static const char kNewsMessageRootURI[] = "news_message:/";
static const char kNewsMessageRootURI[] = "news-message:/";
#define kNewsRootURILen 6
#define kNntpRootURILen 6

View File

@@ -136,7 +136,7 @@ nsNntpService::SaveMessageToDisk(const char *aMessageURI,
nsresult rv = NS_OK;
NS_ENSURE_ARG_POINTER(aMessageURI);
// double check it is a news_message:/ uri
// double check it is a news-message:/ uri
if (PL_strncmp(aMessageURI, kNewsMessageRootURI, kNewsMessageRootURILen)) {
rv = NS_ERROR_UNEXPECTED;
NS_ENSURE_SUCCESS(rv,rv);
@@ -448,7 +448,7 @@ NS_IMETHODIMP nsNntpService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL
NS_ENSURE_ARG_POINTER(aMessageURI);
// double check that it is a news_message:/ uri
// double check that it is a news-message:/ uri
if (PL_strncmp(aMessageURI, kNewsMessageRootURI, kNewsMessageRootURILen)) {
rv = NS_ERROR_UNEXPECTED;
NS_ENSURE_SUCCESS(rv,rv);