mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-13 19:41:49 +00:00
more subscribe work.
This commit is contained in:
parent
afcb18ba04
commit
97325cede8
@ -337,6 +337,16 @@
|
||||
{0x0d7456ae, 0xe28a, 0x11d3, \
|
||||
{0xa5, 0x60, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7}}
|
||||
|
||||
//
|
||||
// nsSubscribableServer
|
||||
//
|
||||
#define NS_SUBSCRIBABLESERVER_PROGID \
|
||||
"component://netscape/messenger/subscribableserver"
|
||||
|
||||
#define NS_SUBSCRIBABLESERVER_CID \
|
||||
{0x8510876a, 0x1dd2, 0x11b2, \
|
||||
{0x82, 0x53, 0x91, 0xf7, 0x1b, 0x34, 0x8a, 0x25}}
|
||||
|
||||
//
|
||||
// nsSubscribeDataSource
|
||||
//
|
||||
|
@ -76,6 +76,7 @@
|
||||
|
||||
#include "nsMsgServiceProvider.h"
|
||||
#include "nsSubscribeDataSource.h"
|
||||
#include "nsSubscribableServer.h"
|
||||
|
||||
#include "nsMsgPrintEngine.h"
|
||||
#include "nsMsgSearchSession.h"
|
||||
@ -111,6 +112,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgWindow,Init)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgViewNavigationService,Init)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgServiceProviderService, Init);
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSubscribeDataSource, Init);
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSubscribableServer);
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgPrintEngine, Init)
|
||||
|
||||
// The list of components we register
|
||||
@ -252,6 +254,10 @@ static nsModuleComponentInfo gComponents[] = {
|
||||
NS_SUBSCRIBEDATASOURCE_PROGID,
|
||||
nsSubscribeDataSourceConstructor,
|
||||
},
|
||||
{ "Mail/News Subscribable Server", NS_SUBSCRIBABLESERVER_CID,
|
||||
NS_SUBSCRIBABLESERVER_PROGID,
|
||||
nsSubscribableServerConstructor,
|
||||
},
|
||||
};
|
||||
|
||||
NS_IMPL_NSGETMODULE("nsMsgBaseModule", gComponents)
|
||||
|
@ -18,11 +18,14 @@
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Seth Spitzer <sspitzer@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsIMsgWindow;
|
||||
interface nsIMsgIncomingServer;
|
||||
interface nsIRDFResource;
|
||||
|
||||
[scriptable, uuid(f337b84a-1dd1-11b2-97c7-fb8b2e3f2280)]
|
||||
interface nsISubscribeListener : nsISupports {
|
||||
@ -31,7 +34,16 @@ interface nsISubscribeListener : nsISupports {
|
||||
|
||||
[scriptable, uuid(6f9d2e82-1dd2-11b2-bbed-bbea41ca33a7)]
|
||||
interface nsISubscribableServer : nsISupports {
|
||||
void setIncomingServer(in nsIMsgIncomingServer server);
|
||||
void setDelimiter(in char delimiter);
|
||||
void populateSubscribeDatasource(in nsIMsgWindow aMsgWindow);
|
||||
attribute nsISubscribeListener subscribeListener;
|
||||
void startPopulatingSubscribeDS();
|
||||
void stopPopulatingSubscribeDS();
|
||||
void findAndAddParentToSubscribeDS(in string uri, in string serverUri, in string aName, in nsIRDFResource aChildResource);
|
||||
void setPropertiesInSubscribeDS(in string uri, in string aName, in nsIRDFResource aResource);
|
||||
void addToSubscribeDS(in string aName);
|
||||
void setAsSubscribedInSubscribeDS(in string aName);
|
||||
void updateSubscribedInSubscribeDS();
|
||||
};
|
||||
|
||||
|
@ -68,6 +68,7 @@ static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
|
||||
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
||||
static NS_DEFINE_CID(kMsgLogonRedirectorServiceCID, NS_MSGLOGONREDIRECTORSERVICE_CID);
|
||||
static NS_DEFINE_CID(kImapServiceCID, NS_IMAPSERVICE_CID);
|
||||
static NS_DEFINE_CID(kSubscribableServerCID, NS_SUBSCRIBABLESERVER_CID);
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsImapIncomingServer, nsMsgIncomingServer)
|
||||
NS_IMPL_RELEASE_INHERITED(nsImapIncomingServer, nsMsgIncomingServer)
|
||||
@ -685,6 +686,11 @@ NS_IMETHODIMP nsImapIncomingServer::PossibleImapMailbox(const char *folderPath,
|
||||
|
||||
if (!folderPath || !*folderPath) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
if (mDoingSubscribeDialog) {
|
||||
rv = AddToSubscribeDS(folderPath);
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCAutoString dupFolderPath = folderPath;
|
||||
if (dupFolderPath.Last() == '/')
|
||||
{
|
||||
@ -748,10 +754,6 @@ NS_IMETHODIMP nsImapIncomingServer::PossibleImapMailbox(const char *folderPath,
|
||||
uri.Append('/');
|
||||
uri.Append(dupFolderPath);
|
||||
|
||||
if (mDoingSubscribeDialog) {
|
||||
rv = AddFolderToSubscribeDialog((const char *)parentUri, (const char *)uri,(const char *)folderName);
|
||||
return rv;
|
||||
}
|
||||
|
||||
a_nsIFolder->GetChildWithURI(uri, PR_TRUE, getter_AddRefs(child));
|
||||
|
||||
@ -1835,7 +1837,10 @@ nsImapIncomingServer::PopulateSubscribeDatasource(nsIMsgWindow *aMsgWindow)
|
||||
#ifdef DEBUG_sspitzer
|
||||
printf("in PopulateSubscribeDatasource()\n");
|
||||
#endif
|
||||
mDoingSubscribeDialog = PR_TRUE;
|
||||
mDoingSubscribeDialog = PR_TRUE;
|
||||
|
||||
rv = StartPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIImapService> imapService = do_GetService(kImapServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -1847,25 +1852,6 @@ nsImapIncomingServer::PopulateSubscribeDatasource(nsIMsgWindow *aMsgWindow)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetSubscribeListener(nsISubscribeListener *aListener)
|
||||
{
|
||||
if (!aListener) return NS_ERROR_NULL_POINTER;
|
||||
mSubscribeListener = aListener;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::GetSubscribeListener(nsISubscribeListener **aListener)
|
||||
{
|
||||
if (!aListener) return NS_ERROR_NULL_POINTER;
|
||||
if (mSubscribeListener) {
|
||||
*aListener = mSubscribeListener;
|
||||
NS_ADDREF(*aListener);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::OnStartRunningUrl(nsIURI *url)
|
||||
{
|
||||
@ -1876,6 +1862,8 @@ NS_IMETHODIMP
|
||||
nsImapIncomingServer::OnStopRunningUrl(nsIURI *url, nsresult exitCode)
|
||||
{
|
||||
nsresult rv;
|
||||
rv = UpdateSubscribedInSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
mDoingSubscribeDialog = PR_FALSE;
|
||||
|
||||
@ -1884,17 +1872,114 @@ nsImapIncomingServer::OnStopRunningUrl(nsIURI *url, nsresult exitCode)
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!listener) return NS_ERROR_FAILURE;
|
||||
|
||||
printf("set all the subscribed folders as subscribed\n");
|
||||
|
||||
rv = listener->OnStopPopulating();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = StopPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsImapIncomingServer::AddFolderToSubscribeDialog(const char *parentUri, const char *uri,const char *folderName)
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetIncomingServer(nsIMsgIncomingServer *aServer)
|
||||
{
|
||||
printf("AddFolderToSubscribeDialog(%s,%s,%s)\n",parentUri,uri,folderName);
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetIncomingServer(aServer);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetDelimiter(char aDelimiter)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetDelimiter(aDelimiter);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetAsSubscribedInSubscribeDS(const char *aName)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetAsSubscribedInSubscribeDS(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::UpdateSubscribedInSubscribeDS()
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->UpdateSubscribedInSubscribeDS();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::AddToSubscribeDS(const char *aName)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->AddToSubscribeDS(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetPropertiesInSubscribeDS(const char *uri, const char *aName, nsIRDFResource *aResource)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetPropertiesInSubscribeDS(uri,aName,aResource);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::FindAndAddParentToSubscribeDS(const char *uri, const char *serverUri, const char *aName, nsIRDFResource *aChildResource)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->FindAndAddParentToSubscribeDS(uri,serverUri,aName,aChildResource);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::StopPopulatingSubscribeDS()
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
rv = mInner->StopPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
mInner = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::StartPopulatingSubscribeDS()
|
||||
{
|
||||
nsresult rv;
|
||||
mInner = do_CreateInstance(kSubscribableServerCID,&rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
|
||||
rv = SetIncomingServer(this);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = SetDelimiter('/'); // not always true?
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
return mInner->StartPopulatingSubscribeDS();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::SetSubscribeListener(nsISubscribeListener *aListener)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetSubscribeListener(aListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapIncomingServer::GetSubscribeListener(nsISubscribeListener **aListener)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->GetSubscribeListener(aListener);
|
||||
}
|
||||
|
@ -90,9 +90,9 @@ private:
|
||||
nsCOMPtr<nsIMsgLogonRedirector> m_logonRedirector;
|
||||
|
||||
// subscribe dialog stuff
|
||||
nsCOMPtr <nsISubscribeListener> mSubscribeListener;
|
||||
PRBool mDoingSubscribeDialog;
|
||||
nsresult AddFolderToSubscribeDialog(const char *parentUri, const char *uri,const char *folderName);
|
||||
nsCOMPtr <nsISubscribableServer> mInner;
|
||||
};
|
||||
|
||||
|
||||
|
@ -54,10 +54,6 @@ interface nsINntpIncomingServer : nsISupports {
|
||||
|
||||
attribute long maximumConnectionsNumber;
|
||||
|
||||
/* used when populating the subscribe dialog */
|
||||
void addNewNewsgroup(in string name);
|
||||
void addSubscribedNewsgroups();
|
||||
|
||||
readonly attribute long numGroupsNeedingCounts;
|
||||
readonly attribute nsISupports firstGroupNeedingCounts;
|
||||
|
||||
@ -68,8 +64,10 @@ interface nsINntpIncomingServer : nsISupports {
|
||||
out nsINNTPProtocol aNntpConnection);
|
||||
void RemoveConnection(in nsINNTPProtocol aNntpConnection);
|
||||
|
||||
/* use for auto subscribing */
|
||||
/* used for auto subscribing */
|
||||
boolean containsNewsgroup(in string name);
|
||||
void subscribeToNewsgroup(in string name);
|
||||
|
||||
/* used for the subscribe dialog */
|
||||
void addNewsgroupToSubscribeDS(in string name);
|
||||
};
|
||||
|
@ -2904,7 +2904,7 @@ PRInt32 nsNNTPProtocol::ReadNewsList(nsIInputStream * inputStream, PRUint32 leng
|
||||
NS_ASSERTION(m_nntpServer, "no nntp incoming server");
|
||||
if (m_nntpServer) {
|
||||
m_readNewsListCount++;
|
||||
rv = m_nntpServer->AddNewNewsgroup(line);
|
||||
rv = m_nntpServer->AddNewsgroupToSubscribeDS(line);
|
||||
}
|
||||
else {
|
||||
rv = NS_ERROR_FAILURE;
|
||||
|
@ -56,6 +56,7 @@ static NS_DEFINE_IID(kIFileLocatorIID, NS_IFILELOCATOR_IID);
|
||||
static NS_DEFINE_CID(kFileLocatorCID, NS_FILELOCATOR_CID);
|
||||
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
||||
static NS_DEFINE_CID(kNntpServiceCID, NS_NNTPSERVICE_CID);
|
||||
static NS_DEFINE_CID(kSubscribableServerCID, NS_SUBSCRIBABLESERVER_CID);
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsNntpIncomingServer, nsMsgIncomingServer)
|
||||
NS_IMPL_RELEASE_INHERITED(nsNntpIncomingServer, nsMsgIncomingServer)
|
||||
@ -77,8 +78,6 @@ nsNntpIncomingServer::nsNntpIncomingServer()
|
||||
mHostInfoHasChanged = PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsNntpIncomingServer::~nsNntpIncomingServer()
|
||||
{
|
||||
nsresult rv;
|
||||
@ -471,200 +470,6 @@ NS_IMETHODIMP nsNntpIncomingServer::RemoveConnection(nsINNTPProtocol *aNntpConne
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::AddSubscribedNewsgroups()
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIEnumerator> subFolders;
|
||||
nsCOMPtr<nsIFolder> rootFolder;
|
||||
nsCOMPtr<nsIFolder> currFolder;
|
||||
|
||||
rv = GetRootFolder(getter_AddRefs(rootFolder));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = rootFolder->GetSubFolders(getter_AddRefs(subFolders));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAdapterEnumerator *simpleEnumerator = new nsAdapterEnumerator(subFolders);
|
||||
if (simpleEnumerator == nsnull) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
PRBool moreFolders;
|
||||
|
||||
while (NS_SUCCEEDED(simpleEnumerator->HasMoreElements(&moreFolders)) && moreFolders) {
|
||||
nsCOMPtr<nsISupports> child;
|
||||
rv = simpleEnumerator->GetNext(getter_AddRefs(child));
|
||||
if (NS_SUCCEEDED(rv) && child) {
|
||||
currFolder = do_QueryInterface(child, &rv);
|
||||
if (NS_SUCCEEDED(rv) && currFolder) {
|
||||
nsXPIDLString name;
|
||||
rv = currFolder->GetName(getter_Copies(name));
|
||||
if (NS_SUCCEEDED(rv) && name) {
|
||||
nsCAutoString asciiName; asciiName.AssignWithConversion(name);
|
||||
rv = SetNewsgroupAsSubscribed((const char *)asciiName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete simpleEnumerator;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsNntpIncomingServer::SetNewsgroupAsSubscribed(const char *aName)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
NS_ASSERTION(aName,"newsgroup with no name");
|
||||
if (!aName) return NS_ERROR_FAILURE;
|
||||
|
||||
nsXPIDLCString serverUri;
|
||||
|
||||
rv = GetServerURI(getter_Copies(serverUri));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCAutoString groupUri;
|
||||
groupUri = (const char *)serverUri;
|
||||
groupUri += "/";
|
||||
groupUri += aName;
|
||||
|
||||
nsCOMPtr<nsIRDFResource> newsgroupResource;
|
||||
rv = mRDFService->GetResource((const char *) groupUri, getter_AddRefs(newsgroupResource));
|
||||
|
||||
nsCOMPtr<nsIRDFDataSource> ds;
|
||||
rv = mRDFService->GetDataSource("rdf:subscribe",getter_AddRefs(mSubscribeDatasource));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
if (!mSubscribeDatasource) return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIRDFNode> oldLiteral;
|
||||
rv = mSubscribeDatasource->GetTarget(newsgroupResource, kNC_Subscribed, PR_TRUE, getter_AddRefs(oldLiteral));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mSubscribeDatasource->Change(newsgroupResource, kNC_Subscribed, oldLiteral, kTrueLiteral);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::AddNewNewsgroup(const char *aName)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
NS_ASSERTION(aName,"attempting to add newsgroup with no name");
|
||||
if (!aName) return NS_ERROR_FAILURE;
|
||||
|
||||
#ifdef DEBUG_NEWS
|
||||
printf("AddNewNewsgroup(%s)\n",aName);
|
||||
#endif
|
||||
nsXPIDLCString serverUri;
|
||||
|
||||
rv = GetServerURI(getter_Copies(serverUri));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCAutoString groupUri;
|
||||
groupUri = (const char *)serverUri;
|
||||
groupUri += "/";
|
||||
groupUri += aName;
|
||||
|
||||
nsCOMPtr<nsIRDFResource> newsgroupResource;
|
||||
rv = mRDFService->GetResource((const char *) groupUri, getter_AddRefs(newsgroupResource));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = SetNewsgroupPropertiesInSubscribeDS((const char *)groupUri, aName, newsgroupResource);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = FindParentGroupResource((const char *)groupUri, (const char *)serverUri, aName, newsgroupResource);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsNntpIncomingServer::SetNewsgroupPropertiesInSubscribeDS(const char *groupUri, const char *aName, nsIRDFResource *aResource)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
#ifdef DEBUG_sspitzer_
|
||||
printf("SetNewsgroupPropertiesInSubscribeDS(%s,%s,??)\n",groupUri,aName);
|
||||
#endif
|
||||
|
||||
nsCOMPtr<nsIRDFLiteral> nameLiteral;
|
||||
nsAutoString nameString;
|
||||
nameString.AssignWithConversion(aName);
|
||||
rv = mRDFService->GetLiteral(nameString.GetUnicode(), getter_AddRefs(nameLiteral));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mSubscribeDatasource->Assert(aResource, kNC_Name, nameLiteral, PR_TRUE);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mSubscribeDatasource->Assert(aResource, kNC_Subscribed, kFalseLiteral, PR_TRUE);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsNntpIncomingServer::FindParentGroupResource(const char *groupUri, const char *serverUri,
|
||||
const char *aName, nsIRDFResource *aChildResource)
|
||||
{
|
||||
nsresult rv;
|
||||
#ifdef DEBUG_sspitzer_
|
||||
printf("FindParentGroupResource(%s,%s,%s,??)\n",groupUri,serverUri,aName);
|
||||
#endif
|
||||
|
||||
nsCOMPtr <nsIRDFResource> parentResource;
|
||||
|
||||
nsCAutoString groupUriCStr(groupUri);
|
||||
|
||||
PRInt32 slashpos = groupUriCStr.RFindChar('/',PR_TRUE);
|
||||
PRInt32 dotpos = groupUriCStr.RFindChar('.',PR_TRUE);
|
||||
|
||||
if (dotpos > slashpos) {
|
||||
groupUriCStr.Truncate(dotpos);
|
||||
|
||||
nsCAutoString nameCStr(aName);
|
||||
PRInt32 namedotpos = nameCStr.RFindChar('.',PR_TRUE);
|
||||
nameCStr.Truncate(namedotpos);
|
||||
|
||||
rv = mRDFService->GetResource((const char *) groupUriCStr, getter_AddRefs(parentResource));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
PRBool prune = PR_FALSE;
|
||||
// this code isn't working yet.
|
||||
#if 0
|
||||
rv = mSubscribeDatasource->HasAssertion(parentResource, kNC_Subscribed, kFalseLiteral, PR_TRUE, &prune);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
#endif
|
||||
|
||||
if (!prune) {
|
||||
rv = SetNewsgroupPropertiesInSubscribeDS((const char *)groupUriCStr, (const char *)nameCStr, parentResource);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
// assert the group as a child of the group above
|
||||
rv = mSubscribeDatasource->Assert(parentResource, kNC_Child, aChildResource, PR_TRUE);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
// recurse
|
||||
if (!prune) {
|
||||
rv = FindParentGroupResource((const char *)groupUriCStr, serverUri, (const char *)nameCStr, parentResource);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
}
|
||||
}
|
||||
else {
|
||||
rv = mRDFService->GetResource(serverUri, getter_AddRefs(parentResource));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
// assert the group as a child of the server
|
||||
rv = mSubscribeDatasource->Assert(parentResource, kNC_Child, aChildResource, PR_TRUE);
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::PerformExpand(nsIMsgWindow *aMsgWindow)
|
||||
{
|
||||
@ -789,22 +594,19 @@ NS_IMETHODIMP
|
||||
nsNntpIncomingServer::OnStopRunningUrl(nsIURI *url, nsresult exitCode)
|
||||
{
|
||||
nsresult rv;
|
||||
rv = AddSubscribedNewsgroups();
|
||||
rv = UpdateSubscribedInSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsISubscribeListener> listener;
|
||||
rv = GetSubscribeListener(getter_AddRefs(listener));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!listener) return NS_ERROR_FAILURE;
|
||||
|
||||
|
||||
rv = listener->OnStopPopulating();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
mRDFService = nsnull;
|
||||
mSubscribeDatasource = nsnull;
|
||||
kNC_Name = nsnull;
|
||||
kNC_Child = nsnull;
|
||||
kNC_Subscribed = nsnull;
|
||||
rv = StopPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -866,39 +668,12 @@ nsNntpIncomingServer::PopulateSubscribeDatasource(nsIMsgWindow *aMsgWindow)
|
||||
printf("in PopulateSubscribeDatasource()\n");
|
||||
#endif
|
||||
|
||||
mRDFService = do_GetService(kRDFServiceCID, &rv);
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && mRDFService,"no rdf server");
|
||||
rv = StartPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mRDFService->GetDataSource("rdf:subscribe",getter_AddRefs(mSubscribeDatasource));
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && mSubscribeDatasource,"no subscribe datasource");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mRDFService->GetResource("http://home.netscape.com/NC-rdf#Name", getter_AddRefs(kNC_Name));
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && kNC_Name,"no name resource");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mRDFService->GetResource("http://home.netscape.com/NC-rdf#child", getter_AddRefs(kNC_Child));
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && kNC_Child,"no child resource");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mRDFService->GetResource("http://home.netscape.com/NC-rdf#Subscribed", getter_AddRefs(kNC_Subscribed));
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv) && kNC_Subscribed, "no subscribed resource");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString trueString;
|
||||
trueString.AssignWithConversion("true");
|
||||
rv = mRDFService->GetLiteral(trueString.GetUnicode(), getter_AddRefs(kTrueLiteral));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
nsAutoString falseString;
|
||||
falseString.AssignWithConversion("false");
|
||||
rv = mRDFService->GetLiteral(falseString.GetUnicode(), getter_AddRefs(kFalseLiteral));
|
||||
if(NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsINntpService> nntpService = do_GetService(kNntpServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!nntpService) return NS_ERROR_FAILURE;
|
||||
if (!nntpService) return NS_ERROR_FAILURE;
|
||||
|
||||
rv = nntpService->BuildSubscribeDatasource(this, aMsgWindow);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
@ -906,21 +681,112 @@ nsNntpIncomingServer::PopulateSubscribeDatasource(nsIMsgWindow *aMsgWindow)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::AddNewsgroupToSubscribeDS(const char *aName)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return AddToSubscribeDS(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::SetIncomingServer(nsIMsgIncomingServer *aServer)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetIncomingServer(aServer);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::SetDelimiter(char aDelimiter)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetDelimiter(aDelimiter);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::SetAsSubscribedInSubscribeDS(const char *aName)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetAsSubscribedInSubscribeDS(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::UpdateSubscribedInSubscribeDS()
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->UpdateSubscribedInSubscribeDS();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::AddToSubscribeDS(const char *aName)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->AddToSubscribeDS(aName);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::SetPropertiesInSubscribeDS(const char *uri, const char *aName, nsIRDFResource *aResource)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetPropertiesInSubscribeDS(uri,aName,aResource);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::FindAndAddParentToSubscribeDS(const char *uri, const char *serverUri, const char *aName, nsIRDFResource *aChildResource)
|
||||
{
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->FindAndAddParentToSubscribeDS(uri,serverUri,aName,aChildResource);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::StopPopulatingSubscribeDS()
|
||||
{
|
||||
nsresult rv;
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
rv = mInner->StopPopulatingSubscribeDS();
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
mInner = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::StartPopulatingSubscribeDS()
|
||||
{
|
||||
nsresult rv;
|
||||
mInner = do_CreateInstance(kSubscribableServerCID,&rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
|
||||
rv = SetIncomingServer(this);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = SetDelimiter('.');
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
return mInner->StartPopulatingSubscribeDS();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::SetSubscribeListener(nsISubscribeListener *aListener)
|
||||
{
|
||||
if (!aListener) return NS_ERROR_NULL_POINTER;
|
||||
mSubscribeListener = aListener;
|
||||
return NS_OK;
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->SetSubscribeListener(aListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsNntpIncomingServer::GetSubscribeListener(nsISubscribeListener **aListener)
|
||||
{
|
||||
if (!aListener) return NS_ERROR_NULL_POINTER;
|
||||
if (mSubscribeListener) {
|
||||
*aListener = mSubscribeListener;
|
||||
NS_ADDREF(*aListener);
|
||||
}
|
||||
return NS_OK;
|
||||
NS_ASSERTION(mInner,"not initialized");
|
||||
if (!mInner) return NS_ERROR_FAILURE;
|
||||
return mInner->GetSubscribeListener(aListener);
|
||||
}
|
||||
|
@ -36,8 +36,6 @@
|
||||
#include "nsEnumeratorUtils.h"
|
||||
#include "nsIMsgWindow.h"
|
||||
#include "nsISubscribableServer.h"
|
||||
#include "nsIRDFResource.h"
|
||||
#include "nsIRDFService.h"
|
||||
|
||||
class nsINntpUrl;
|
||||
class nsIMsgMailNewsUrl;
|
||||
@ -70,21 +68,11 @@ protected:
|
||||
NS_IMETHOD GetServerRequiresPasswordForBiff(PRBool *_retval);
|
||||
|
||||
private:
|
||||
nsresult SetNewsgroupPropertiesInSubscribeDS(const char *groupUri, const char *aName, nsIRDFResource *aResource);
|
||||
nsresult FindParentGroupResource(const char *groupUri, const char *serverUri, const char *aName, nsIRDFResource *aChildResource);
|
||||
nsresult SetNewsgroupAsSubscribed(const char *aName);
|
||||
PRBool mNewsrcHasChanged;
|
||||
nsAdapterEnumerator *mGroupsEnumerator;
|
||||
PRBool mHostInfoLoaded;
|
||||
PRBool mHostInfoHasChanged;
|
||||
nsCOMPtr <nsISubscribeListener> mSubscribeListener;
|
||||
nsCOMPtr <nsIRDFDataSource> mSubscribeDatasource;
|
||||
nsCOMPtr <nsIRDFService> mRDFService;
|
||||
nsCOMPtr <nsIRDFResource> kNC_Name;
|
||||
nsCOMPtr <nsIRDFResource> kNC_Child;
|
||||
nsCOMPtr <nsIRDFResource> kNC_Subscribed;
|
||||
nsCOMPtr <nsIRDFLiteral> kTrueLiteral;
|
||||
nsCOMPtr <nsIRDFLiteral> kFalseLiteral;
|
||||
nsCOMPtr <nsISubscribableServer> mInner;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user