Bug #31058 -->Add nsIMsgI18NUrl and Get/Set URI support.

This commit is contained in:
mscott%netscape.com 2000-05-15 20:34:33 +00:00
Родитель 61ce702f46
Коммит 69c0790065
3 изменённых файлов: 80 добавлений и 52 удалений

Просмотреть файл

@ -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__