зеркало из https://github.com/mozilla/gecko-dev.git
Moved folder listener code from local to base.
This commit is contained in:
Родитель
aa63654780
Коммит
16c1e86959
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче