зеркало из https://github.com/mozilla/pjs.git
get downloading newsgroups for offline use working better, r=naving, sr=mscott 84061
This commit is contained in:
Родитель
18c55e9e85
Коммит
97edea9175
|
@ -818,11 +818,7 @@ nsresult nsMsgSearchOfflineNews::OpenSummaryFile ()
|
|||
nsCOMPtr <nsIDBFolderInfo> folderInfo;
|
||||
nsCOMPtr <nsIMsgFolder> scopeFolder;
|
||||
err = m_scope->GetFolder(getter_AddRefs(scopeFolder));
|
||||
nsCOMPtr <nsIFileSpec> pathSpec;
|
||||
err= scopeFolder->GetPath(getter_AddRefs(pathSpec));
|
||||
PRBool exists=PR_FALSE;
|
||||
err = pathSpec->Exists(&exists);
|
||||
if (!exists) return NS_ERROR_FILE_NOT_FOUND;
|
||||
// code here used to check if offline store existed, which breaks offline news.
|
||||
if (NS_SUCCEEDED(err) && scopeFolder)
|
||||
err = scopeFolder->GetMsgDatabase(nsnull, &m_db);
|
||||
return err;
|
||||
|
|
|
@ -671,12 +671,14 @@ nsresult nsMsgSearchSession::TimeSliceSerial (PRBool *aDone)
|
|||
// disk, this is the fastest way to do it.
|
||||
|
||||
NS_ENSURE_ARG(aDone);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsMsgSearchScopeTerm *scope = GetRunningScope();
|
||||
if (scope)
|
||||
{
|
||||
scope->TimeSlice (aDone);
|
||||
if (*aDone)
|
||||
rv = scope->TimeSlice (aDone);
|
||||
if (NS_FAILED(rv))
|
||||
*aDone = PR_TRUE;
|
||||
if (*aDone || NS_FAILED(rv))
|
||||
{
|
||||
ReleaseFolderDBRef();
|
||||
m_idxRunningScope++;
|
||||
|
@ -684,7 +686,7 @@ nsresult nsMsgSearchSession::TimeSliceSerial (PRBool *aDone)
|
|||
// UpdateStatusBar (MK_MSG_SEARCH_STATUS);
|
||||
}
|
||||
*aDone = PR_FALSE;
|
||||
return NS_OK;
|
||||
return rv;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -250,7 +250,7 @@ NS_IMETHODIMP DownloadNewsArticlesToOfflineStore::OnStopRunningUrl(nsIURI* url,
|
|||
if (m_newsHeader != nsnull)
|
||||
{
|
||||
#ifdef DEBUG_bienvenu
|
||||
// XP_Trace("finished retrieving %ld\n", m_newsHeader->GetMessageKey());
|
||||
// XP_Trace("finished retrieving %ld\n", m_newsHeader->GetMessageKey());
|
||||
#endif
|
||||
if (m_newsDB)
|
||||
{
|
||||
|
@ -357,10 +357,13 @@ nsMsgDownloadAllNewsgroups::nsMsgDownloadAllNewsgroups(nsIMsgWindow *window, nsI
|
|||
m_window = window;
|
||||
m_listener = listener;
|
||||
m_downloaderForGroup = new DownloadMatchingNewsArticlesToNewsDB(window, nsnull, nsnull, this);
|
||||
NS_IF_ADDREF(m_downloaderForGroup);
|
||||
m_downloadedHdrsForCurGroup = PR_FALSE;
|
||||
}
|
||||
|
||||
nsMsgDownloadAllNewsgroups::~nsMsgDownloadAllNewsgroups()
|
||||
{
|
||||
NS_IF_RELEASE(m_downloaderForGroup);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgDownloadAllNewsgroups::OnStartRunningUrl(nsIURI* url)
|
||||
|
@ -373,7 +376,17 @@ nsMsgDownloadAllNewsgroups::OnStopRunningUrl(nsIURI* url, nsresult exitCode)
|
|||
{
|
||||
nsresult rv = exitCode;
|
||||
if (NS_SUCCEEDED(exitCode) || exitCode == NS_MSG_NEWS_ARTICLE_NOT_FOUND)
|
||||
{
|
||||
if (m_downloadedHdrsForCurGroup)
|
||||
{
|
||||
rv = DownloadMsgsForCurrentGroup();
|
||||
m_downloadedHdrsForCurGroup = PR_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
rv = ProcessNextGroup();
|
||||
}
|
||||
}
|
||||
else if (m_listener) // notify main observer.
|
||||
m_listener->OnStopRunningUrl(url, exitCode);
|
||||
|
||||
|
@ -513,12 +526,17 @@ nsresult nsMsgDownloadAllNewsgroups::ProcessNextGroup()
|
|||
if (m_listener)
|
||||
return m_listener->OnStopRunningUrl(nsnull, NS_OK);
|
||||
}
|
||||
m_downloadedHdrsForCurGroup = PR_TRUE;
|
||||
return m_currentFolder->GetNewMessages(m_window, this);
|
||||
}
|
||||
|
||||
nsresult nsMsgDownloadAllNewsgroups::DownloadMsgsForCurrentGroup()
|
||||
{
|
||||
nsCOMPtr <nsIMsgDatabase> db;
|
||||
nsCOMPtr <nsISupportsArray> termList;
|
||||
nsCOMPtr <nsIMsgDownloadSettings> downloadSettings;
|
||||
m_currentFolder->GetMsgDatabase(m_window, getter_AddRefs(db));
|
||||
rv = m_currentFolder->GetDownloadSettings(getter_AddRefs(downloadSettings));
|
||||
nsresult rv = m_currentFolder->GetDownloadSettings(getter_AddRefs(downloadSettings));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr <nsIMsgNewsFolder> newsFolder = do_QueryInterface(m_currentFolder);
|
||||
|
|
|
@ -74,20 +74,20 @@ protected:
|
|||
virtual nsresult ShowProgress(const PRUnichar *progressString, PRInt32 percent);
|
||||
|
||||
nsMsgKeyArray m_keysToDownload;
|
||||
PRBool m_downloadFromKeys;
|
||||
nsCOMPtr <nsIMsgFolder> m_folder;
|
||||
nsCOMPtr <nsIMsgDatabase> m_newsDB;
|
||||
nsCOMPtr <nsIUrlListener> m_listener;
|
||||
PRBool m_existedP;
|
||||
PRBool m_wroteAnyP;
|
||||
PRBool m_summaryValidP;
|
||||
PRPackedBool m_downloadFromKeys;
|
||||
PRPackedBool m_existedP;
|
||||
PRPackedBool m_wroteAnyP;
|
||||
PRPackedBool m_summaryValidP;
|
||||
PRPackedBool m_abort;
|
||||
PRInt32 m_numwrote;
|
||||
nsMsgKey m_keyToDownload;
|
||||
nsCOMPtr <nsIMsgWindow> m_window;
|
||||
nsCOMPtr <nsIMsgStatusFeedback> m_statusFeedback;
|
||||
nsCOMPtr <nsIMsgSearchSession> m_searchSession;
|
||||
nsresult m_status;
|
||||
PRBool m_abort;
|
||||
};
|
||||
|
||||
|
||||
|
@ -107,7 +107,6 @@ protected:
|
|||
|
||||
nsCOMPtr <nsISimpleEnumerator> m_headerEnumerator;
|
||||
nsCOMPtr <nsIMsgDBHdr> m_newsHeader;
|
||||
// MsgDocument *m_dbWriteDocument;
|
||||
};
|
||||
|
||||
// class for downloading all the articles that match the passed in search criteria
|
||||
|
@ -137,6 +136,7 @@ public:
|
|||
protected:
|
||||
nsresult AdvanceToNextServer(PRBool *done);
|
||||
nsresult AdvanceToNextGroup(PRBool *done);
|
||||
nsresult DownloadMsgsForCurrentGroup();
|
||||
|
||||
DownloadMatchingNewsArticlesToNewsDB *m_downloaderForGroup;
|
||||
|
||||
|
@ -148,6 +148,8 @@ protected:
|
|||
nsCOMPtr <nsIEnumerator> m_serverEnumerator;
|
||||
nsCOMPtr <nsIUrlListener> m_listener;
|
||||
nsCOMPtr <nsISupportsArray> m_termList;
|
||||
|
||||
PRBool m_downloadedHdrsForCurGroup;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -971,16 +971,15 @@ nsMsgNewsFolder::DeleteMessages(nsISupportsArray *messages, nsIMsgWindow *aMsgWi
|
|||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::GetNewMessages(nsIMsgWindow *aMsgWindow, nsIUrlListener *aListener)
|
||||
{
|
||||
NS_ASSERTION(aListener == nsnull, "news can't currently listen for this finishing");
|
||||
return GetNewsMessages(aMsgWindow, PR_FALSE);
|
||||
return GetNewsMessages(aMsgWindow, PR_FALSE, aListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::GetNextNMessages(nsIMsgWindow *aMsgWindow)
|
||||
{
|
||||
return GetNewsMessages(aMsgWindow, PR_TRUE);
|
||||
return GetNewsMessages(aMsgWindow, PR_TRUE, nsnull);
|
||||
}
|
||||
|
||||
nsresult nsMsgNewsFolder::GetNewsMessages(nsIMsgWindow *aMsgWindow, PRBool aGetOld)
|
||||
nsresult nsMsgNewsFolder::GetNewsMessages(nsIMsgWindow *aMsgWindow, PRBool aGetOld, nsIUrlListener *aUrlListener)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
|
@ -1000,7 +999,14 @@ nsresult nsMsgNewsFolder::GetNewsMessages(nsIMsgWindow *aMsgWindow, PRBool aGetO
|
|||
rv = GetNntpServer(getter_AddRefs(nntpServer));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = nntpService->GetNewNews(nntpServer, mURI, aGetOld, this, aMsgWindow, nsnull);
|
||||
nsCOMPtr <nsIURI> resultUri;
|
||||
rv = nntpService->GetNewNews(nntpServer, mURI, aGetOld, this, aMsgWindow, getter_AddRefs(resultUri));
|
||||
if (aUrlListener && NS_SUCCEEDED(rv) && resultUri)
|
||||
{
|
||||
nsCOMPtr<nsIMsgMailNewsUrl> msgUrl (do_QueryInterface(resultUri));
|
||||
if (msgUrl)
|
||||
msgUrl->RegisterListener(aUrlListener);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ protected:
|
|||
PRInt32 RememberLine(const char *line);
|
||||
nsresult RememberUnsubscribedGroup(const char *newsgroup, const char *setStr);
|
||||
nsresult ForgetLine(void);
|
||||
nsresult GetNewsMessages(nsIMsgWindow *aMsgWindow, PRBool getOld);
|
||||
nsresult GetNewsMessages(nsIMsgWindow *aMsgWindow, PRBool getOld, nsIUrlListener *aListener);
|
||||
|
||||
PRInt32 HandleNewsrcLine(char *line, PRUint32 line_size);
|
||||
virtual const char *GetIncomingServerType() {return "nntp";}
|
||||
|
|
Загрузка…
Ссылка в новой задаче