mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
more performance work for loading folders without .msf files or that have to have
headers downloaded.
This commit is contained in:
parent
19e06cc24d
commit
a3e720e049
@ -51,6 +51,8 @@ interface nsIMsgFolder : nsIFolder {
|
||||
|
||||
nsISimpleEnumerator GetMessages();
|
||||
nsISimpleEnumerator GetThreads();
|
||||
void StartFolderLoading();
|
||||
void EndFolderLoading();
|
||||
/* get new headers for db */
|
||||
void UpdateFolder();
|
||||
nsIMsgThread GetThreadForMessage(in nsIMessage message);
|
||||
|
@ -165,6 +165,7 @@ function ChangeFolderByURI(uri)
|
||||
{
|
||||
try
|
||||
{
|
||||
msgfolder.StartFolderLoading();
|
||||
msgfolder.UpdateFolder();
|
||||
}
|
||||
catch(ex)
|
||||
|
@ -76,7 +76,12 @@ var folderListener = {
|
||||
{
|
||||
var id = selArray[0].getAttribute('id');
|
||||
if(uri == id)
|
||||
{
|
||||
var msgFolder = folder.QueryInterface(Components.interfaces.nsIMsgFolder);
|
||||
if(msgFolder)
|
||||
msgFolder.EndFolderLoading();
|
||||
RerootFolder(uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -80,9 +80,6 @@ nsMsgFolderDataSource::nsMsgFolderDataSource():
|
||||
nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
|
||||
{
|
||||
nsresult rv;
|
||||
nsIRDFService *rdf = getRDFService();
|
||||
if(rdf)
|
||||
rdf->UnregisterDataSource(this);
|
||||
|
||||
NS_WITH_SERVICE(nsIMsgMailSession, mailSession, kMsgMailSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
|
@ -56,7 +56,7 @@ NS_IMETHODIMP nsMsgDBFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
|
@ -41,6 +41,8 @@ public:
|
||||
virtual ~nsMsgDBFolder(void);
|
||||
NS_DECL_NSIDBCHANGELISTENER
|
||||
|
||||
NS_IMETHOD StartFolderLoading(void);
|
||||
NS_IMETHOD EndFolderLoading(void);
|
||||
NS_IMETHOD GetThreads(nsISimpleEnumerator** threadEnumerator);
|
||||
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
|
||||
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
|
||||
@ -68,6 +70,7 @@ protected:
|
||||
protected:
|
||||
nsCOMPtr<nsIMsgDatabase> mDatabase;
|
||||
nsString mCharset;
|
||||
PRBool mAddListener;
|
||||
|
||||
|
||||
};
|
||||
|
@ -276,6 +276,16 @@ nsMsgFolder::GetMessages(nsISimpleEnumerator* *result)
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgFolder::StartFolderLoading(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgFolder::EndFolderLoading(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMsgFolder::UpdateFolder()
|
||||
{
|
||||
|
@ -95,6 +95,9 @@ public:
|
||||
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
|
||||
NS_IMETHOD GetVisibleSubFolders(nsIEnumerator* *result);
|
||||
NS_IMETHOD GetMessages(nsISimpleEnumerator* *result);
|
||||
NS_IMETHOD StartFolderLoading(void);
|
||||
NS_IMETHOD EndFolderLoading(void);
|
||||
|
||||
NS_IMETHOD UpdateFolder();
|
||||
|
||||
NS_IMETHOD GetThreads(nsISimpleEnumerator ** threadEnumerator);
|
||||
|
@ -397,7 +397,8 @@ nsresult nsImapMailFolder::GetDatabase()
|
||||
|
||||
if(mDatabase)
|
||||
{
|
||||
mDatabase->AddListener(this);
|
||||
if(mAddListener)
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
// 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)
|
||||
@ -1279,7 +1280,7 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
||||
return rv;
|
||||
if (!mDatabase)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
if (mDatabase)
|
||||
if (mDatabase && mAddListener)
|
||||
mDatabase->AddListener(this);
|
||||
}
|
||||
if (aSpec->folderSelected)
|
||||
@ -1344,7 +1345,8 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
||||
SummaryChanged();
|
||||
rv = NS_ERROR_UNEXPECTED;
|
||||
if (mDatabase) {
|
||||
mDatabase->AddListener(this);
|
||||
if(mAddListener)
|
||||
mDatabase->AddListener(this);
|
||||
rv = mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
}
|
||||
}
|
||||
|
@ -480,7 +480,8 @@ nsresult nsMsgLocalMailFolder::GetDatabase()
|
||||
if(mDatabase)
|
||||
{
|
||||
|
||||
mDatabase->AddListener(this);
|
||||
if(mAddListener)
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
// 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)
|
||||
|
@ -364,7 +364,8 @@ nsresult nsMsgNewsFolder::GetDatabase()
|
||||
}
|
||||
|
||||
if (mDatabase) {
|
||||
rv = mDatabase->AddListener(this);
|
||||
if(mAddListener)
|
||||
rv = mDatabase->AddListener(this);
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsINewsDatabase> db(do_QueryInterface(mDatabase, &rv));
|
||||
if (NS_FAILED(rv))
|
||||
|
Loading…
Reference in New Issue
Block a user