diff --git a/mozilla/mailnews/base/search/src/nsMsgFilterDataSource.cpp b/mozilla/mailnews/base/search/src/nsMsgFilterDataSource.cpp index c47fdcb385d..db9e40dba0f 100644 --- a/mozilla/mailnews/base/search/src/nsMsgFilterDataSource.cpp +++ b/mozilla/mailnews/base/search/src/nsMsgFilterDataSource.cpp @@ -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 nsMsgFilterDataSource::kNC_Child; nsCOMPtr nsMsgFilterDataSource::kNC_Name; @@ -37,90 +39,108 @@ nsCOMPtr 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 arcs; - - nsCOMPtr folder = - do_QueryInterface(source, &rv); - if (NS_SUCCEEDED(rv)) { - arcs = mFolderArcsOut; + nsresult rv; + nsCOMPtr filterList; - } else { + nsCOMPtr resourceList; + NS_NewISupportsArray(getter_AddRefs(resourceList)); - nsCOMPtr 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 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 arcs; + + nsCOMPtr folder = + do_QueryInterface(aSource, &rv); + if (NS_SUCCEEDED(rv)) { + arcs = mFolderArcsOut; + + } else { + + nsCOMPtr 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; }