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)