more subscribe work.

This commit is contained in:
sspitzer%netscape.com 2000-05-12 04:23:45 +00:00
parent afcb18ba04
commit 97325cede8
9 changed files with 255 additions and 290 deletions

View File

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

View File

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

View File

@ -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();
};

View File

@ -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);
}

View File

@ -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;
};

View File

@ -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);
};

View File

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

View File

@ -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);
}

View File

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