зеркало из https://github.com/mozilla/gecko-dev.git
Bug #31058 -->Add nsIMsgI18NUrl and Get/Set URI support.
This commit is contained in:
Родитель
61ce702f46
Коммит
69c0790065
|
@ -803,6 +803,8 @@ nsresult nsNntpService::ConstructNntpUrl(const char * urlString, const char * ne
|
||||||
if (NS_FAILED(rv) || !nntpUrl) return rv;
|
if (NS_FAILED(rv) || !nntpUrl) return rv;
|
||||||
|
|
||||||
nsCOMPtr <nsIMsgMailNewsUrl> mailnewsurl = do_QueryInterface(nntpUrl);
|
nsCOMPtr <nsIMsgMailNewsUrl> mailnewsurl = do_QueryInterface(nntpUrl);
|
||||||
|
nsCOMPtr <nsIMsgMessageUrl> msgUrl = do_QueryInterface(nntpUrl);
|
||||||
|
msgUrl->SetUri(urlString);
|
||||||
// don't worry this cast is really okay...there'a bug in XPIDL compiler that is preventing
|
// don't worry this cast is really okay...there'a bug in XPIDL compiler that is preventing
|
||||||
// a "const char *" in paramemter for uri SetSpec...
|
// a "const char *" in paramemter for uri SetSpec...
|
||||||
mailnewsurl->SetSpec((char *) urlString);
|
mailnewsurl->SetSpec((char *) urlString);
|
||||||
|
|
|
@ -40,6 +40,11 @@
|
||||||
#include "nsXPIDLString.h"
|
#include "nsXPIDLString.h"
|
||||||
#include "nsIMsgDatabase.h"
|
#include "nsIMsgDatabase.h"
|
||||||
#include "nsMsgDBCID.h"
|
#include "nsMsgDBCID.h"
|
||||||
|
#include "nsIRDFService.h"
|
||||||
|
#include "rdf.h"
|
||||||
|
#include "nsIMsgFolder.h"
|
||||||
|
#include "nsIMessage.h"
|
||||||
|
|
||||||
|
|
||||||
static NS_DEFINE_CID(kCNewsDB, NS_NEWSDB_CID);
|
static NS_DEFINE_CID(kCNewsDB, NS_NEWSDB_CID);
|
||||||
|
|
||||||
|
@ -74,29 +79,12 @@ nsNntpUrl::~nsNntpUrl()
|
||||||
NS_IMPL_ADDREF_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
NS_IMPL_ADDREF_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
||||||
NS_IMPL_RELEASE_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
NS_IMPL_RELEASE_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
||||||
|
|
||||||
nsresult nsNntpUrl::QueryInterface(const nsIID &aIID, void** aInstancePtr)
|
NS_INTERFACE_MAP_BEGIN(nsNntpUrl)
|
||||||
{
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINntpUrl)
|
||||||
if (NULL == aInstancePtr)
|
NS_INTERFACE_MAP_ENTRY(nsINntpUrl)
|
||||||
{
|
NS_INTERFACE_MAP_ENTRY(nsIMsgMessageUrl)
|
||||||
return NS_ERROR_NULL_POINTER;
|
NS_INTERFACE_MAP_ENTRY(nsIMsgI18NUrl)
|
||||||
}
|
NS_INTERFACE_MAP_END_INHERITING(nsNntpUrl)
|
||||||
|
|
||||||
if (aIID.Equals(NS_GET_IID(nsINntpUrl)))
|
|
||||||
{
|
|
||||||
*aInstancePtr = (void*) ((nsINntpUrl*)this);
|
|
||||||
NS_ADDREF_THIS();
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
if (aIID.Equals(NS_GET_IID(nsIMsgMessageUrl)))
|
|
||||||
{
|
|
||||||
*aInstancePtr = (void *) ((nsIMsgMessageUrl *) this);
|
|
||||||
NS_ADDREF_THIS();
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nsMsgMailNewsUrl::QueryInterface(aIID, aInstancePtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Begin nsINntpUrl specific support
|
// Begin nsINntpUrl specific support
|
||||||
|
@ -241,11 +229,22 @@ nsresult nsNntpUrl::GetNewsgroupList (nsINNTPNewsgroupList ** newsgroupList)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from nsIMsgMessageUrl
|
NS_IMETHODIMP nsNntpUrl::SetUri(const char * aURI)
|
||||||
NS_IMETHODIMP nsNntpUrl::GetURI(char ** aURI)
|
|
||||||
{
|
{
|
||||||
nsresult rv;
|
mURI= aURI;
|
||||||
if (aURI)
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// from nsIMsgMessageUrl
|
||||||
|
NS_IMETHODIMP nsNntpUrl::GetUri(char ** aURI)
|
||||||
|
{
|
||||||
|
nsresult rv = NS_OK;
|
||||||
|
// if we have been given a uri to associate with this url, then use it
|
||||||
|
// otherwise try to reconstruct a URI on the fly....
|
||||||
|
|
||||||
|
if (!mURI.IsEmpty())
|
||||||
|
*aURI = mURI.ToNewCString();
|
||||||
|
else
|
||||||
{
|
{
|
||||||
nsXPIDLCString spec;
|
nsXPIDLCString spec;
|
||||||
GetSpec(getter_Copies(spec));
|
GetSpec(getter_Copies(spec));
|
||||||
|
@ -259,9 +258,8 @@ NS_IMETHODIMP nsNntpUrl::GetURI(char ** aURI)
|
||||||
*aURI = uriStr.ToNewCString();
|
*aURI = uriStr.ToNewCString();
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
return NS_ERROR_NULL_POINTER;
|
return rv;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_GETSET(nsNntpUrl, AddDummyEnvelope, PRBool, m_addDummyEnvelope);
|
NS_IMPL_GETSET(nsNntpUrl, AddDummyEnvelope, PRBool, m_addDummyEnvelope);
|
||||||
|
@ -435,3 +433,29 @@ nsNntpUrl::SetOriginalSpec(const char *aSpec)
|
||||||
return NS_ERROR_NOT_IMPLEMENTED;
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP nsNntpUrl::GetFolderCharset(PRUnichar ** aCharacterSet)
|
||||||
|
{
|
||||||
|
// if we have a RDF URI, then try to get the folder for that URI and then ask the folder
|
||||||
|
// for it's charset....
|
||||||
|
|
||||||
|
nsXPIDLCString uri;
|
||||||
|
GetUri(getter_Copies(uri));
|
||||||
|
NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE);
|
||||||
|
nsCOMPtr<nsIRDFService> rdfService = do_GetService(NS_RDF_PROGID "/rdf-service");
|
||||||
|
nsCOMPtr<nsIRDFResource> resource;
|
||||||
|
rdfService->GetResource(uri, getter_AddRefs(resource));
|
||||||
|
|
||||||
|
NS_ENSURE_TRUE(resource, NS_ERROR_FAILURE);
|
||||||
|
nsCOMPtr<nsIMessage> msg (do_QueryInterface(resource));
|
||||||
|
NS_ENSURE_TRUE(msg, NS_ERROR_FAILURE);
|
||||||
|
nsCOMPtr<nsIMsgFolder> folder;
|
||||||
|
msg->GetMsgFolder(getter_AddRefs(folder));
|
||||||
|
NS_ENSURE_TRUE(folder, NS_ERROR_FAILURE);
|
||||||
|
nsXPIDLString charset;
|
||||||
|
folder->GetCharset(getter_Copies(charset));
|
||||||
|
*aCharacterSet = nsCRT::strdup(charset);
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,12 @@
|
||||||
#include "nsFileSpec.h"
|
#include "nsFileSpec.h"
|
||||||
#include "nsIFileSpec.h"
|
#include "nsIFileSpec.h"
|
||||||
|
|
||||||
class nsNntpUrl : public nsINntpUrl, public nsMsgMailNewsUrl, public nsIMsgMessageUrl
|
class nsNntpUrl : public nsINntpUrl, public nsMsgMailNewsUrl, public nsIMsgMessageUrl, public nsIMsgI18NUrl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NS_DECL_NSINNTPURL
|
NS_DECL_NSINNTPURL
|
||||||
NS_DECL_NSIMSGMESSAGEURL
|
NS_DECL_NSIMSGMESSAGEURL
|
||||||
|
NS_DECL_NSIMSGI18NURL
|
||||||
|
|
||||||
NS_IMETHOD IsUrlType(PRUint32 type, PRBool *isType);
|
NS_IMETHOD IsUrlType(PRUint32 type, PRBool *isType);
|
||||||
|
|
||||||
|
@ -59,10 +60,11 @@ protected:
|
||||||
nsINNTPHost * m_newsHost;
|
nsINNTPHost * m_newsHost;
|
||||||
nsINNTPArticleList * m_articleList;
|
nsINNTPArticleList * m_articleList;
|
||||||
nsINNTPNewsgroup * m_newsgroup;
|
nsINNTPNewsgroup * m_newsgroup;
|
||||||
nsIMsgOfflineNewsState * m_offlineNews;
|
nsIMsgOfflineNewsState* m_offlineNews;
|
||||||
nsINNTPNewsgroupList * m_newsgroupList;
|
nsINNTPNewsgroupList * m_newsgroupList;
|
||||||
nsMsgKey m_messageKey;
|
nsMsgKey m_messageKey;
|
||||||
char * m_newsgroupName;
|
char * m_newsgroupName;
|
||||||
|
nsCString mURI; // the RDF URI associated with this url.
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // nsNntpUrl_h__
|
#endif // nsNntpUrl_h__
|
||||||
|
|
Загрузка…
Ссылка в новой задаче