зеркало из https://github.com/mozilla/gecko-dev.git
foward inline of news message doesn't work if hostname has any capital letters. thanks to Boris 'pi' Piwinger for tracking this down. r/sr=bienvenu, a=sspitzer
This commit is contained in:
Родитель
aeb0a2f7d7
Коммит
3f4fa108f0
|
@ -82,8 +82,8 @@
|
|||
#include "nsNewsDownloader.h"
|
||||
#include "prprf.h"
|
||||
#include "nsICacheService.h"
|
||||
#include "nsNetCID.h"
|
||||
#include "nsEscape.h"
|
||||
#include "nsNetUtil.h"
|
||||
|
||||
#undef GetPort // XXX Windows!
|
||||
#undef SetPort // XXX Windows!
|
||||
|
@ -605,32 +605,45 @@ nsNntpService::DecomposeNewsMessageURI(const char * aMessageURI, nsIMsgFolder **
|
|||
}
|
||||
|
||||
nsresult
|
||||
nsNntpService::GetFolderFromUri(const char *uri, nsIMsgFolder **folder)
|
||||
nsNntpService::GetFolderFromUri(const char *aUri, nsIMsgFolder **aFolder)
|
||||
{
|
||||
nsresult rv;
|
||||
NS_ENSURE_ARG_POINTER(aUri);
|
||||
NS_ENSURE_ARG_POINTER(aFolder);
|
||||
|
||||
NS_ENSURE_ARG_POINTER(uri);
|
||||
NS_ENSURE_ARG_POINTER(folder);
|
||||
|
||||
nsCOMPtr <nsIRDFService> rdf = do_GetService("@mozilla.org/rdf/rdf-service;1",&rv);
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(uri), nsDependentCString(aUri));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
// the user might have typed in or clicked on a nntp:// url
|
||||
// to support this, we turn it into a news:// url
|
||||
nsCOMPtr<nsIRDFResource> res;
|
||||
if ((strlen(uri) > kNntpRootURILen) && nsCRT::strncmp(uri, kNntpRootURI, kNntpRootURILen) == 0) {
|
||||
nsCAutoString uriStr(kNewsRootURI);
|
||||
uriStr.Append(uri+kNntpRootURILen);
|
||||
rv = rdf->GetResource(uriStr, getter_AddRefs(res));
|
||||
}
|
||||
else {
|
||||
rv = rdf->GetResource(nsDependentCString(uri), getter_AddRefs(res));
|
||||
nsCAutoString hostName;
|
||||
rv = uri->GetAsciiHost(hostName);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCAutoString path;
|
||||
rv = uri->GetPath(path);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr <nsIMsgAccountManager> accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr <nsIMsgIncomingServer> server;
|
||||
rv = accountManager->FindServer("", hostName.get(), "nntp", getter_AddRefs(server));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr <nsIFolder> rootFolder;
|
||||
rv = server->GetRootFolder(getter_AddRefs(rootFolder));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
// check if path is "/"
|
||||
// if so, use the root folder
|
||||
if (path.Length() == 1) {
|
||||
return rootFolder->QueryInterface(NS_GET_IID(nsIMsgFolder), (void **) aFolder);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISupports> subFolder;
|
||||
rv = rootFolder->GetChildNamed(NS_ConvertASCIItoUCS2(path.get() + 1).get() /* skip the leading slash */, getter_AddRefs(subFolder));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
rv = res->QueryInterface(NS_GET_IID(nsIMsgFolder), (void **)folder);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
return NS_OK;
|
||||
return subFolder->QueryInterface(NS_GET_IID(nsIMsgFolder), (void **) aFolder);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -701,10 +714,9 @@ nsNntpService::FindServerWithNewsgroup(nsCString &host, nsCString &groupName)
|
|||
serverInfo.server = nsnull;
|
||||
serverInfo.newsgroup = groupName.get();
|
||||
|
||||
#ifdef DEBUG_seth
|
||||
printf("XXX this only looks at the list of subscribed newsgroups. fix to use the hostinfo.dat information\n");
|
||||
#endif
|
||||
|
||||
// XXX TODO
|
||||
// this only looks at the list of subscribed newsgroups.
|
||||
// fix to use the hostinfo.dat information
|
||||
servers->EnumerateForwards(findNewsServerWithGroup, (void *)&serverInfo);
|
||||
if (serverInfo.server) {
|
||||
nsCOMPtr<nsIMsgIncomingServer> server = do_QueryInterface(serverInfo.server);
|
||||
|
|
Загрузка…
Ссылка в новой задаче