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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user