Moved folder listener code from local to base.

This commit is contained in:
putterman%netscape.com 1999-04-20 22:24:21 +00:00
Родитель aa63654780
Коммит 16c1e86959
4 изменённых файлов: 73 добавлений и 57 удалений

Просмотреть файл

@ -69,6 +69,26 @@ nsMsgFolder::nsMsgFolder(void)
NS_NewISupportsArray(&mSubFolders);
mIsCachable = TRUE;
//The rdf:mailnewsfolders datasource is going to be a listener to all nsIMsgFolders, so add
//it as a listener
nsresult rv;
NS_WITH_SERVICE(nsIRDFService, rdfService, kRDFServiceCID, &rv);
if (NS_SUCCEEDED(rv))
{
nsIRDFDataSource* datasource = nsnull;
if(NS_SUCCEEDED(rv = rdfService->GetDataSource("rdf:mailnewsfolders", &datasource)))
{
nsIFolderListener *folderListener;
if(NS_SUCCEEDED(datasource->QueryInterface(nsIFolderListener::GetIID(), (void**)&folderListener)))
{
AddFolderListener(folderListener);
NS_RELEASE(folderListener);
}
NS_RELEASE(datasource);
}
}
}
nsMsgFolder::~nsMsgFolder(void)
@ -1405,6 +1425,55 @@ NS_IMETHODIMP nsMsgFolder::GetHostName(char **hostName)
return NS_OK;
}
nsresult nsMsgFolder::NotifyPropertyChanged(char *property, char *oldValue, char* newValue)
{
nsISupports *supports;
if(NS_SUCCEEDED(QueryInterface(kISupportsIID, (void**)&supports)))
{
PRUint32 i;
for(i = 0; i < mListeners->Count(); i++)
{
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
listener->OnItemPropertyChanged(supports, property, oldValue, newValue);
NS_RELEASE(listener);
}
NS_RELEASE(supports);
}
return NS_OK;
}
nsresult nsMsgFolder::NotifyItemAdded(nsISupports *item)
{
PRUint32 i;
for(i = 0; i < mListeners->Count(); i++)
{
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
listener->OnItemAdded(this, item);
NS_RELEASE(listener);
}
return NS_OK;
}
nsresult nsMsgFolder::NotifyItemDeleted(nsISupports *item)
{
PRUint32 i;
for(i = 0; i < mListeners->Count(); i++)
{
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
listener->OnItemRemoved(this, item);
NS_RELEASE(listener);
}
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////
// URI Utilities for RDF

Просмотреть файл

@ -280,6 +280,10 @@ public:
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatabase **db) = 0;
NS_IMETHOD DeleteMessage(nsIMessage *message) = 0;
protected:
nsresult NotifyPropertyChanged(char *property, char* oldValue, char* newValue);
nsresult NotifyItemAdded(nsISupports *item);
nsresult NotifyItemDeleted(nsISupports *item);
protected:
nsString mName;

Просмотреть файл

@ -54,29 +54,6 @@ nsMsgLocalMailFolder::nsMsgLocalMailFolder(void)
mHaveReadNameFromDB(PR_FALSE), mGettingMail(PR_FALSE),
mInitialized(PR_FALSE), mMailDatabase(nsnull)
{
//XXXX This is a hack for the moment. I'm assuming the only listener is our rdf:mailnews datasource.
//In reality anyone should be able to listen to folder changes.
nsIRDFService* rdfService = nsnull;
nsIRDFDataSource* datasource = nsnull;
nsresult rv = nsServiceManager::GetService(kRDFServiceCID,
nsIRDFService::GetIID(),
(nsISupports**) &rdfService);
if(NS_SUCCEEDED(rv))
{
if(NS_SUCCEEDED(rv = rdfService->GetDataSource("rdf:mailnewsfolders", &datasource)))
{
nsIFolderListener *folderListener;
if(NS_SUCCEEDED(datasource->QueryInterface(nsIFolderListener::GetIID(), (void**)&folderListener)))
{
AddFolderListener(folderListener);
NS_RELEASE(folderListener);
}
NS_RELEASE(datasource);
}
nsServiceManager::ReleaseService(kRDFServiceCID, rdfService);
}
// NS_INIT_REFCNT(); done by superclass
}
@ -1076,39 +1053,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::DeleteMessage(nsIMessage *message)
return NS_OK;
}
nsresult nsMsgLocalMailFolder::NotifyPropertyChanged(char *property, char *oldValue, char* newValue)
{
nsISupports *supports;
if(NS_SUCCEEDED(QueryInterface(kISupportsIID, (void**)&supports)))
{
PRUint32 i;
for(i = 0; i < mListeners->Count(); i++)
{
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
listener->OnItemPropertyChanged(supports, property, oldValue, newValue);
NS_RELEASE(listener);
}
NS_RELEASE(supports);
}
return NS_OK;
}
nsresult nsMsgLocalMailFolder::NotifyItemAdded(nsISupports *item)
{
PRUint32 i;
for(i = 0; i < mListeners->Count(); i++)
{
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
listener->OnItemAdded(this, item);
NS_RELEASE(listener);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgLocalMailFolder::OnKeyChange(nsMsgKey aKeyChanged, int32 aFlags,
nsIDBChangeListener * aInstigator)

Просмотреть файл

@ -120,8 +120,6 @@ protected:
nsresult CreateSubFolders(nsFileSpec &path);
nsresult AddDirectorySeparator(nsFileSpec &path);
nsresult GetDatabase();
nsresult NotifyPropertyChanged(char *property, char* oldValue, char* newValue);
nsresult NotifyItemAdded(nsISupports *item);
/* Finds the directory associated with this folder. That is if the path is
c:\Inbox, it will return c:\Inbox.sbd if it succeeds. If that path doesn't