зеркало из 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;
|
||||
|
||||
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
|
||||
// a "const char *" in paramemter for uri SetSpec...
|
||||
mailnewsurl->SetSpec((char *) urlString);
|
||||
|
|
|
@ -40,6 +40,11 @@
|
|||
#include "nsXPIDLString.h"
|
||||
#include "nsIMsgDatabase.h"
|
||||
#include "nsMsgDBCID.h"
|
||||
#include "nsIRDFService.h"
|
||||
#include "rdf.h"
|
||||
#include "nsIMsgFolder.h"
|
||||
#include "nsIMessage.h"
|
||||
|
||||
|
||||
static NS_DEFINE_CID(kCNewsDB, NS_NEWSDB_CID);
|
||||
|
||||
|
@ -74,29 +79,12 @@ nsNntpUrl::~nsNntpUrl()
|
|||
NS_IMPL_ADDREF_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
||||
NS_IMPL_RELEASE_INHERITED(nsNntpUrl, nsMsgMailNewsUrl)
|
||||
|
||||
nsresult nsNntpUrl::QueryInterface(const nsIID &aIID, void** aInstancePtr)
|
||||
{
|
||||
if (NULL == aInstancePtr)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsNntpUrl)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINntpUrl)
|
||||
NS_INTERFACE_MAP_ENTRY(nsINntpUrl)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMsgMessageUrl)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMsgI18NUrl)
|
||||
NS_INTERFACE_MAP_END_INHERITING(nsNntpUrl)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
// Begin nsINntpUrl specific support
|
||||
|
@ -241,11 +229,22 @@ nsresult nsNntpUrl::GetNewsgroupList (nsINNTPNewsgroupList ** newsgroupList)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// from nsIMsgMessageUrl
|
||||
NS_IMETHODIMP nsNntpUrl::GetURI(char ** aURI)
|
||||
NS_IMETHODIMP nsNntpUrl::SetUri(const char * aURI)
|
||||
{
|
||||
nsresult rv;
|
||||
if (aURI)
|
||||
mURI= 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;
|
||||
GetSpec(getter_Copies(spec));
|
||||
|
@ -259,9 +258,8 @@ NS_IMETHODIMP nsNntpUrl::GetURI(char ** aURI)
|
|||
*aURI = uriStr.ToNewCString();
|
||||
return NS_OK;
|
||||
}
|
||||
else {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMPL_GETSET(nsNntpUrl, AddDummyEnvelope, PRBool, m_addDummyEnvelope);
|
||||
|
@ -435,3 +433,29 @@ nsNntpUrl::SetOriginalSpec(const char *aSpec)
|
|||
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 "nsIFileSpec.h"
|
||||
|
||||
class nsNntpUrl : public nsINntpUrl, public nsMsgMailNewsUrl, public nsIMsgMessageUrl
|
||||
class nsNntpUrl : public nsINntpUrl, public nsMsgMailNewsUrl, public nsIMsgMessageUrl, public nsIMsgI18NUrl
|
||||
{
|
||||
public:
|
||||
NS_DECL_NSINNTPURL
|
||||
NS_DECL_NSIMSGMESSAGEURL
|
||||
NS_DECL_NSIMSGI18NURL
|
||||
|
||||
NS_IMETHOD IsUrlType(PRUint32 type, PRBool *isType);
|
||||
|
||||
|
@ -59,10 +60,11 @@ protected:
|
|||
nsINNTPHost * m_newsHost;
|
||||
nsINNTPArticleList * m_articleList;
|
||||
nsINNTPNewsgroup * m_newsgroup;
|
||||
nsIMsgOfflineNewsState * m_offlineNews;
|
||||
nsIMsgOfflineNewsState* m_offlineNews;
|
||||
nsINNTPNewsgroupList * m_newsgroupList;
|
||||
nsMsgKey m_messageKey;
|
||||
char * m_newsgroupName;
|
||||
nsCString mURI; // the RDF URI associated with this url.
|
||||
};
|
||||
|
||||
#endif // nsNntpUrl_h__
|
||||
|
|
Загрузка…
Ссылка в новой задаче