зеркало из https://github.com/mozilla/gecko-dev.git
more performance work for loading folders without .msf files or that have to have
headers downloaded.
This commit is contained in:
Родитель
19e06cc24d
Коммит
a3e720e049
|
@ -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))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче