rev the filter datasource to match up with the filter delegate factory

(not yet part of build)


git-svn-id: svn://10.0.0.236/trunk@65903 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
alecf%netscape.com
2000-04-13 23:50:50 +00:00
parent c1252cc4a3
commit 7b75c928b4

View File

@@ -24,11 +24,13 @@
#include "nsMsgFilterDataSource.h"
#include "nsMsgRDFUtils.h"
#include "nsEnumeratorUtils.h"
#include "nsIMsgFilter.h"
#include "nsIMsgFilterList.h"
NS_IMPL_ISUPPORTS1(nsMsgFilterDataSource, nsIRDFDataSource)
nsrefcnt nsMsgFilterDataSource::mGlobalRefCount = 0;
nsrefcnt nsMsgFilterDataSource::mGlobalRefCount = 0;
nsCOMPtr<nsIRDFResource> nsMsgFilterDataSource::kNC_Child;
nsCOMPtr<nsIRDFResource> nsMsgFilterDataSource::kNC_Name;
@@ -37,90 +39,108 @@ nsCOMPtr<nsISupportsArray> nsMsgFilterDataSource::mFilterArcsOut;
nsMsgFilterDataSource::nsMsgFilterDataSource()
{
NS_INIT_ISUPPORTS();
if (mGlobalRefCount == 0)
initGlobalObjects(getRDFService());
NS_INIT_ISUPPORTS();
if (mGlobalRefCount == 0)
initGlobalObjects(getRDFService());
mGlobalRefCount++;
/* member initializers and constructor code */
mGlobalRefCount++;
/* member initializers and constructor code */
}
nsMsgFilterDataSource::~nsMsgFilterDataSource()
{
mGlobalRefCount--;
if (mGlobalRefCount == 0)
cleanupGlobalObjects();
mGlobalRefCount--;
if (mGlobalRefCount == 0)
cleanupGlobalObjects();
}
nsresult
nsMsgFilterDataSource::cleanupGlobalObjects()
{
mFolderArcsOut = nsnull;
mFilterArcsOut = nsnull;
kNC_Child = nsnull;
kNC_Name = nsnull;
return NS_OK;
mFolderArcsOut = nsnull;
mFilterArcsOut = nsnull;
kNC_Child = nsnull;
kNC_Name = nsnull;
return NS_OK;
}
nsresult
nsMsgFilterDataSource::initGlobalObjects(nsIRDFService *rdf)
{
rdf->GetResource(NC_RDF_CHILD, getter_AddRefs(kNC_Child));
rdf->GetResource(NC_RDF_NAME, getter_AddRefs(kNC_Name));
rdf->GetResource(NC_RDF_CHILD, getter_AddRefs(kNC_Child));
rdf->GetResource(NC_RDF_NAME, getter_AddRefs(kNC_Name));
NS_NewISupportsArray(getter_AddRefs(mFolderArcsOut));
mFolderArcsOut->AppendElement(kNC_Child);
NS_NewISupportsArray(getter_AddRefs(mFolderArcsOut));
mFolderArcsOut->AppendElement(kNC_Child);
NS_NewISupportsArray(getter_AddRefs(mFilterArcsOut));
mFilterArcsOut->AppendElement(kNC_Name);
NS_NewISupportsArray(getter_AddRefs(mFilterArcsOut));
mFilterArcsOut->AppendElement(kNC_Name);
return NS_OK;
return NS_OK;
}
NS_IMETHODIMP
nsMsgFilterDataSource::GetTargets(nsIRDFResource *source,
nsIRDFResource *property,
PRBool aTruthValue,
nsISimpleEnumerator **_retval)
nsMsgFilterDataSource::GetTargets(nsIRDFResource *aSource,
nsIRDFResource *aProperty,
PRBool aTruthValue,
nsISimpleEnumerator **aResult)
{
return NS_OK;
}
NS_IMETHODIMP
nsMsgFilterDataSource::ArcLabelsOut(nsIRDFResource *source,
nsISimpleEnumerator **_retval)
{
nsresult rv;
nsCOMPtr<nsISupportsArray> arcs;
nsCOMPtr<nsIMsgFolder> folder =
do_QueryInterface(source, &rv);
if (NS_SUCCEEDED(rv)) {
arcs = mFolderArcsOut;
nsresult rv;
nsCOMPtr<nsIMsgFilterList> filterList;
} else {
nsCOMPtr<nsISupportsArray> resourceList;
NS_NewISupportsArray(getter_AddRefs(resourceList));
nsCOMPtr<nsIMsgFilter> filter;
rv = source->GetDelegate("mail-filter", NS_GET_IID(nsIMsgFilter),
(void **)getter_AddRefs(filter));
// first see if it's a filter list
rv = aSource->GetDelegate("filter", NS_GET_IID(nsIMsgFilterList),
(void **)getter_AddRefs(filterList));
if (NS_SUCCEEDED(rv))
arcs = mFilterArcsOut;
}
if (!arcs) {
*_retval = nsnull;
rv = getFilterListTargets(filterList, aProperty, aTruthValue, resourceList);
else {
// maybe it's just a filter
nsCOMPtr<nsIMsgFilter> filter;
rv = aSource->GetDelegate("filter", NS_GET_IID(nsIMsgFilter),
(void **)getter_AddRefs(filterList));
if (NS_SUCCEEDED(rv))
rv = getFilterTargets(filter, aProperty, aTruthValue, resourceList);
}
return NS_RDF_NO_VALUE;
}
nsArrayEnumerator* enumerator =
new nsArrayEnumerator(arcs);
NS_ENSURE_TRUE(enumerator, NS_ERROR_OUT_OF_MEMORY);
*_retval = enumerator;
NS_ADDREF(*_retval);
return NS_OK;
}
NS_IMETHODIMP
nsMsgFilterDataSource::ArcLabelsOut(nsIRDFResource *aSource,
nsISimpleEnumerator **aResult)
{
nsresult rv;
nsCOMPtr<nsISupportsArray> arcs;
nsCOMPtr<nsIMsgFolder> folder =
do_QueryInterface(aSource, &rv);
if (NS_SUCCEEDED(rv)) {
arcs = mFolderArcsOut;
} else {
nsCOMPtr<nsIMsgFilter> filter;
rv = aSource->GetDelegate("filter", NS_GET_IID(nsIMsgFilter),
(void **)getter_AddRefs(filter));
if (NS_SUCCEEDED(rv))
arcs = mFilterArcsOut;
}
if (!arcs) {
*aResult = nsnull;
return NS_RDF_NO_VALUE;
}
nsArrayEnumerator* enumerator =
new nsArrayEnumerator(arcs);
NS_ENSURE_TRUE(enumerator, NS_ERROR_OUT_OF_MEMORY);
*aResult = enumerator;
NS_ADDREF(*aResult);
return NS_OK;
}