зеркало из https://github.com/mozilla/gecko-dev.git
speedup downloading of news messages for offline use 214525 r/sr/a=sspitzer
This commit is contained in:
Родитель
597cc6b9c4
Коммит
c72bbe58d0
|
@ -87,6 +87,8 @@ nsNewsDownloader::nsNewsDownloader(nsIMsgWindow *window, nsIMsgDatabase *msgDB,
|
||||||
m_abort = PR_FALSE;
|
m_abort = PR_FALSE;
|
||||||
m_listener = listener;
|
m_listener = listener;
|
||||||
m_window = window;
|
m_window = window;
|
||||||
|
m_lastPercent = -1;
|
||||||
|
LL_I2L(m_lastProgressTime, 0);
|
||||||
// not the perfect place for this, but I think it will work.
|
// not the perfect place for this, but I think it will work.
|
||||||
if (m_window)
|
if (m_window)
|
||||||
m_window->SetStopped(PR_FALSE);
|
m_window->SetStopped(PR_FALSE);
|
||||||
|
@ -187,12 +189,27 @@ PRBool nsNewsDownloader::GetNextHdrToRetrieve()
|
||||||
{
|
{
|
||||||
if (m_numwrote >= (PRInt32) m_keysToDownload.GetSize())
|
if (m_numwrote >= (PRInt32) m_keysToDownload.GetSize())
|
||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
|
|
||||||
m_keyToDownload = m_keysToDownload.GetAt(m_numwrote++);
|
m_keyToDownload = m_keysToDownload.GetAt(m_numwrote++);
|
||||||
#ifdef DEBUG_bienvenu
|
PRInt32 percent;
|
||||||
// XP_Trace("downloading %ld index = %ld\n", m_keyToDownload, m_numwrote);
|
percent = (100 * m_numwrote) / (PRInt32) m_keysToDownload.GetSize();
|
||||||
#endif
|
|
||||||
|
PRInt64 nowMS = LL_ZERO;
|
||||||
|
if (percent < 100) // always need to do 100%
|
||||||
|
{
|
||||||
|
int64 minIntervalBetweenProgress;
|
||||||
|
|
||||||
|
LL_I2L(minIntervalBetweenProgress, 750);
|
||||||
|
int64 diffSinceLastProgress;
|
||||||
|
LL_I2L(nowMS, PR_IntervalToMilliseconds(PR_IntervalNow()));
|
||||||
|
LL_SUB(diffSinceLastProgress, nowMS, m_lastProgressTime); // r = a - b
|
||||||
|
LL_SUB(diffSinceLastProgress, diffSinceLastProgress, minIntervalBetweenProgress); // r = a - b
|
||||||
|
if (!LL_GE_ZERO(diffSinceLastProgress))
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_lastProgressTime = nowMS;
|
||||||
nsCOMPtr <nsIMsgNewsFolder> newsFolder = do_QueryInterface(m_folder);
|
nsCOMPtr <nsIMsgNewsFolder> newsFolder = do_QueryInterface(m_folder);
|
||||||
// PRInt32 stringID = (newsFolder ? MK_MSG_RETRIEVING_ARTICLE_OF : MK_MSG_RETRIEVING_MESSAGE_OF);
|
|
||||||
nsCOMPtr<nsIStringBundleService> bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
|
nsCOMPtr<nsIStringBundleService> bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
nsCOMPtr<nsIStringBundle> bundle;
|
nsCOMPtr<nsIStringBundle> bundle;
|
||||||
|
@ -211,10 +228,6 @@ PRBool nsNewsDownloader::GetNextHdrToRetrieve()
|
||||||
const PRUnichar *formatStrings[3] = { firstStr.get(), totalStr.get(), (const PRUnichar *) prettiestName };
|
const PRUnichar *formatStrings[3] = { firstStr.get(), totalStr.get(), (const PRUnichar *) prettiestName };
|
||||||
rv = bundle->FormatStringFromName(NS_LITERAL_STRING("downloadingArticlesForOffline").get(), formatStrings, 3, getter_Copies(statusString));
|
rv = bundle->FormatStringFromName(NS_LITERAL_STRING("downloadingArticlesForOffline").get(), formatStrings, 3, getter_Copies(statusString));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
// ### TODO set status string on window?
|
|
||||||
PRInt32 percent;
|
|
||||||
percent = (100 * m_numwrote) / (PRInt32) m_keysToDownload.GetSize();
|
|
||||||
// FE_SetProgressBarPercent (m_context, percent);
|
|
||||||
ShowProgress(statusString, percent);
|
ShowProgress(statusString, percent);
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +245,11 @@ nsresult nsNewsDownloader::ShowProgress(const PRUnichar *progressString, PRInt32
|
||||||
if (m_statusFeedback)
|
if (m_statusFeedback)
|
||||||
{
|
{
|
||||||
m_statusFeedback->ShowStatusString(progressString);
|
m_statusFeedback->ShowStatusString(progressString);
|
||||||
m_statusFeedback->ShowProgress(percent);
|
if (percent != m_lastPercent)
|
||||||
|
{
|
||||||
|
m_statusFeedback->ShowProgress(percent);
|
||||||
|
m_lastPercent = percent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,12 +82,14 @@ protected:
|
||||||
PRPackedBool m_wroteAnyP;
|
PRPackedBool m_wroteAnyP;
|
||||||
PRPackedBool m_summaryValidP;
|
PRPackedBool m_summaryValidP;
|
||||||
PRPackedBool m_abort;
|
PRPackedBool m_abort;
|
||||||
PRInt32 m_numwrote;
|
PRInt32 m_numwrote;
|
||||||
nsMsgKey m_keyToDownload;
|
nsMsgKey m_keyToDownload;
|
||||||
nsCOMPtr <nsIMsgWindow> m_window;
|
nsCOMPtr <nsIMsgWindow> m_window;
|
||||||
nsCOMPtr <nsIMsgStatusFeedback> m_statusFeedback;
|
nsCOMPtr <nsIMsgStatusFeedback> m_statusFeedback;
|
||||||
nsCOMPtr <nsIMsgSearchSession> m_searchSession;
|
nsCOMPtr <nsIMsgSearchSession> m_searchSession;
|
||||||
nsresult m_status;
|
PRInt32 m_lastPercent;
|
||||||
|
PRInt64 m_lastProgressTime;
|
||||||
|
nsresult m_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1712,7 +1712,6 @@ NS_IMETHODIMP nsMsgNewsFolder::DownloadMessagesForOffline(nsISupportsArray *mess
|
||||||
NS_IMETHODIMP nsMsgNewsFolder::NotifyDownloadedLine(const char *line, nsMsgKey keyOfArticle)
|
NS_IMETHODIMP nsMsgNewsFolder::NotifyDownloadedLine(const char *line, nsMsgKey keyOfArticle)
|
||||||
{
|
{
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
PRBool commit = PR_FALSE;
|
|
||||||
if (m_downloadMessageForOfflineUse && !m_offlineHeader)
|
if (m_downloadMessageForOfflineUse && !m_offlineHeader)
|
||||||
{
|
{
|
||||||
GetMessageHeader(keyOfArticle, getter_AddRefs(m_offlineHeader));
|
GetMessageHeader(keyOfArticle, getter_AddRefs(m_offlineHeader));
|
||||||
|
@ -1727,10 +1726,8 @@ NS_IMETHODIMP nsMsgNewsFolder::NotifyDownloadedLine(const char *line, nsMsgKey k
|
||||||
{
|
{
|
||||||
// end of article.
|
// end of article.
|
||||||
if (m_offlineHeader)
|
if (m_offlineHeader)
|
||||||
{
|
|
||||||
EndNewOfflineMessage();
|
EndNewOfflineMessage();
|
||||||
commit = PR_TRUE;
|
|
||||||
}
|
|
||||||
if (m_tempMessageStream && !m_downloadingMultipleMessages)
|
if (m_tempMessageStream && !m_downloadingMultipleMessages)
|
||||||
{
|
{
|
||||||
m_tempMessageStream->Close();
|
m_tempMessageStream->Close();
|
||||||
|
@ -1748,8 +1745,6 @@ NS_IMETHODIMP nsMsgNewsFolder::NotifyDownloadedLine(const char *line, nsMsgKey k
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commit && mDatabase)
|
|
||||||
mDatabase->Commit(nsMsgDBCommitType::kLargeCommit);
|
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче