get downloading newsgroups for offline use working better, r=naving, sr=mscott 84061

This commit is contained in:
bienvenu%netscape.com 2002-01-30 22:58:30 +00:00
Родитель 18c55e9e85
Коммит 97edea9175
6 изменённых файлов: 133 добавлений и 109 удалений

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

@ -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";}