more performance work for loading folders without .msf files or that have to have

headers downloaded.
This commit is contained in:
putterman%netscape.com 1999-09-17 23:12:44 +00:00
Родитель 19e06cc24d
Коммит a3e720e049
11 изменённых файлов: 50 добавлений и 9 удалений

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

@ -51,6 +51,8 @@ interface nsIMsgFolder : nsIFolder {
nsISimpleEnumerator GetMessages(); nsISimpleEnumerator GetMessages();
nsISimpleEnumerator GetThreads(); nsISimpleEnumerator GetThreads();
void StartFolderLoading();
void EndFolderLoading();
/* get new headers for db */ /* get new headers for db */
void UpdateFolder(); void UpdateFolder();
nsIMsgThread GetThreadForMessage(in nsIMessage message); nsIMsgThread GetThreadForMessage(in nsIMessage message);

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

@ -165,6 +165,7 @@ function ChangeFolderByURI(uri)
{ {
try try
{ {
msgfolder.StartFolderLoading();
msgfolder.UpdateFolder(); msgfolder.UpdateFolder();
} }
catch(ex) catch(ex)

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

@ -76,7 +76,12 @@ var folderListener = {
{ {
var id = selArray[0].getAttribute('id'); var id = selArray[0].getAttribute('id');
if(uri == id) if(uri == id)
{
var msgFolder = folder.QueryInterface(Components.interfaces.nsIMsgFolder);
if(msgFolder)
msgFolder.EndFolderLoading();
RerootFolder(uri); RerootFolder(uri);
}
} }
} }
} }

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

@ -80,9 +80,6 @@ nsMsgFolderDataSource::nsMsgFolderDataSource():
nsMsgFolderDataSource::~nsMsgFolderDataSource (void) nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
{ {
nsresult rv; nsresult rv;
nsIRDFService *rdf = getRDFService();
if(rdf)
rdf->UnregisterDataSource(this);
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv); NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
if(NS_SUCCEEDED(rv)) if(NS_SUCCEEDED(rv))

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

@ -56,7 +56,7 @@ NS_IMETHODIMP nsMsgDBFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr)
} }
nsMsgDBFolder::nsMsgDBFolder(void) nsMsgDBFolder::nsMsgDBFolder(void)
: mCharset("") : mCharset(""), mAddListener(PR_TRUE)
{ {
} }
@ -70,6 +70,22 @@ nsMsgDBFolder::~nsMsgDBFolder(void)
} }
} }
NS_IMETHODIMP nsMsgDBFolder::StartFolderLoading(void)
{
if(mDatabase)
mDatabase->RemoveListener(this);
mAddListener = PR_FALSE;
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::EndFolderLoading(void)
{
if(mDatabase)
mDatabase->AddListener(this);
mAddListener = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP nsMsgDBFolder::GetThreads(nsISimpleEnumerator** threadEnumerator) NS_IMETHODIMP nsMsgDBFolder::GetThreads(nsISimpleEnumerator** threadEnumerator)
{ {
nsresult rv = GetDatabase(); nsresult rv = GetDatabase();

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

@ -41,6 +41,8 @@ public:
virtual ~nsMsgDBFolder(void); virtual ~nsMsgDBFolder(void);
NS_DECL_NSIDBCHANGELISTENER NS_DECL_NSIDBCHANGELISTENER
NS_IMETHOD StartFolderLoading(void);
NS_IMETHOD EndFolderLoading(void);
NS_IMETHOD GetThreads(nsISimpleEnumerator** threadEnumerator); NS_IMETHOD GetThreads(nsISimpleEnumerator** threadEnumerator);
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread); NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage); NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
@ -68,6 +70,7 @@ protected:
protected: protected:
nsCOMPtr<nsIMsgDatabase> mDatabase; nsCOMPtr<nsIMsgDatabase> mDatabase;
nsString mCharset; nsString mCharset;
PRBool mAddListener;
}; };

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

@ -276,6 +276,16 @@ nsMsgFolder::GetMessages(nsISimpleEnumerator* *result)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
NS_IMETHODIMP nsMsgFolder::StartFolderLoading(void)
{
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::EndFolderLoading(void)
{
return NS_OK;
}
NS_IMETHODIMP NS_IMETHODIMP
nsMsgFolder::UpdateFolder() nsMsgFolder::UpdateFolder()
{ {

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

@ -95,6 +95,9 @@ public:
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement); NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
NS_IMETHOD GetVisibleSubFolders(nsIEnumerator* *result); NS_IMETHOD GetVisibleSubFolders(nsIEnumerator* *result);
NS_IMETHOD GetMessages(nsISimpleEnumerator* *result); NS_IMETHOD GetMessages(nsISimpleEnumerator* *result);
NS_IMETHOD StartFolderLoading(void);
NS_IMETHOD EndFolderLoading(void);
NS_IMETHOD UpdateFolder(); NS_IMETHOD UpdateFolder();
NS_IMETHOD GetThreads(nsISimpleEnumerator ** threadEnumerator); NS_IMETHOD GetThreads(nsISimpleEnumerator ** threadEnumerator);

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

@ -397,7 +397,8 @@ nsresult nsImapMailFolder::GetDatabase()
if(mDatabase) if(mDatabase)
{ {
mDatabase->AddListener(this); if(mAddListener)
mDatabase->AddListener(this);
// if we have to regenerate the folder, run the parser url. // if we have to regenerate the folder, run the parser url.
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE) if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
@ -1279,7 +1280,7 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
return rv; return rv;
if (!mDatabase) if (!mDatabase)
return NS_ERROR_NULL_POINTER; return NS_ERROR_NULL_POINTER;
if (mDatabase) if (mDatabase && mAddListener)
mDatabase->AddListener(this); mDatabase->AddListener(this);
} }
if (aSpec->folderSelected) if (aSpec->folderSelected)
@ -1344,7 +1345,8 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
SummaryChanged(); SummaryChanged();
rv = NS_ERROR_UNEXPECTED; rv = NS_ERROR_UNEXPECTED;
if (mDatabase) { if (mDatabase) {
mDatabase->AddListener(this); if(mAddListener)
mDatabase->AddListener(this);
rv = mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo)); rv = mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
} }
} }

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

@ -480,7 +480,8 @@ nsresult nsMsgLocalMailFolder::GetDatabase()
if(mDatabase) if(mDatabase)
{ {
mDatabase->AddListener(this); if(mAddListener)
mDatabase->AddListener(this);
// if we have to regenerate the folder, run the parser url. // if we have to regenerate the folder, run the parser url.
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE) if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)

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

@ -364,7 +364,8 @@ nsresult nsMsgNewsFolder::GetDatabase()
} }
if (mDatabase) { if (mDatabase) {
rv = mDatabase->AddListener(this); if(mAddListener)
rv = mDatabase->AddListener(this);
nsresult rv; nsresult rv;
nsCOMPtr<nsINewsDatabase> db(do_QueryInterface(mDatabase, &rv)); nsCOMPtr<nsINewsDatabase> db(do_QueryInterface(mDatabase, &rv));
if (NS_FAILED(rv)) if (NS_FAILED(rv))