From b84d4aec78ebec975d60439d865cb8bfba52b8e1 Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Tue, 13 Mar 2001 17:32:31 +0000 Subject: [PATCH] more tweaks to downloading imap msgs for offline use git-svn-id: svn://10.0.0.236/branches/MailNews_Performance_20010208_BRANCH@89510 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mailnews/imap/src/nsImapMailFolder.cpp | 6 ++++++ mozilla/mailnews/imap/src/nsImapOfflineSync.cpp | 11 +++++++---- mozilla/mailnews/imap/src/nsImapService.cpp | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/mozilla/mailnews/imap/src/nsImapMailFolder.cpp b/mozilla/mailnews/imap/src/nsImapMailFolder.cpp index 71e68960590..c177d501527 100644 --- a/mozilla/mailnews/imap/src/nsImapMailFolder.cpp +++ b/mozilla/mailnews/imap/src/nsImapMailFolder.cpp @@ -3178,6 +3178,12 @@ NS_IMETHODIMP nsImapMailFolder::DownloadAllForOffline(nsIUrlListener *listener, GetDatabase(msgWindow); GetBodysToDownload(&msgsToDownload); + if (msgsToDownload.GetSize() == 0) + { + if (listener) + listener->OnStopRunningUrl(nsnull, NS_OK); + return NS_OK; + } rv = AllocateUidStringFromKeys(msgsToDownload.GetArray(), msgsToDownload.GetSize(), messageIdsToDownload); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/mailnews/imap/src/nsImapOfflineSync.cpp b/mozilla/mailnews/imap/src/nsImapOfflineSync.cpp index d5222509d40..510a4ef7f34 100644 --- a/mozilla/mailnews/imap/src/nsImapOfflineSync.cpp +++ b/mozilla/mailnews/imap/src/nsImapOfflineSync.cpp @@ -810,21 +810,24 @@ nsImapOfflineDownloader::~nsImapOfflineDownloader() nsresult nsImapOfflineDownloader::ProcessNextOperation() { nsresult rv = NS_OK; - AdvanceToFirstIMAPFolder(); + AdvanceToNextFolder(); while (m_currentFolder) { PRUint32 folderFlags; m_currentDB = nsnull; + nsCOMPtr imapFolder; + if (m_currentFolder) + imapFolder = do_QueryInterface(m_currentFolder); m_currentFolder->GetFlags(&folderFlags); // need to check if folder has offline events, or is configured for offline - if (folderFlags & MSG_FOLDER_FLAG_OFFLINE) + if (imapFolder && folderFlags & MSG_FOLDER_FLAG_OFFLINE) return m_currentFolder->DownloadAllForOffline(this, m_window); else AdvanceToNextFolder(); } -// if (aListener) -// aListener->OnStopRunningUrl(nsnull, NS_OK); + if (m_listener) + m_listener->OnStopRunningUrl(nsnull, NS_OK); return rv; } diff --git a/mozilla/mailnews/imap/src/nsImapService.cpp b/mozilla/mailnews/imap/src/nsImapService.cpp index b0a266da6d4..23dc716a6b0 100644 --- a/mozilla/mailnews/imap/src/nsImapService.cpp +++ b/mozilla/mailnews/imap/src/nsImapService.cpp @@ -962,6 +962,11 @@ nsImapService::FetchMessage(nsIImapUrl * aImapUrl, } } + if (aURL) + { + *aURL = url; + NS_IF_ADDREF(*aURL); + } nsCAutoString urlSpec; rv = SetImapUrlSink(aImapMailFolder, aImapUrl); @@ -3265,6 +3270,7 @@ nsImapService::DownloadMessagesForOffline(const char *messageIds, nsIMsgFolder * // need to pass in stream listener in order to get the channel created correctly nsCOMPtr imapMessageSink(do_QueryInterface(aFolder, &rv)); nsCOMPtr folderStreamListener(do_QueryInterface(aFolder, &rv)); + // ### need to use peek to fetch messages, because FetchMessage is marking them read. rv = FetchMessage(imapUrl, nsImapUrl::nsImapMsgFetch,aFolder, imapMessageSink, aMsgWindow, getter_AddRefs(runningURI), folderStreamListener, messageIds, PR_TRUE); if (runningURI && aUrlListener)