nsresult nsOfflineStoreCompactState::StartCompacting() { nsresult rv = NS_OK; if (m_size > 0 && m_curIndex == 0) { AddRef(); // we own ourselves, until we're done, anyway. ShowCompactingStatusMsg(); bool done = false; rv = CopyNextMessage(done); if (!done) return rv; } ReleaseFolderLock(); FinishCompact(); return rv; }
nsresult nsFolderCompactState::StartCompacting() { nsCOMPtr<nsIMsgPluggableStore> msgStore; nsCOMPtr<nsIMsgIncomingServer> server; nsresult rv = m_folder->GetServer(getter_AddRefs(server)); NS_ENSURE_SUCCESS(rv, rv); rv = server->GetMsgStore(getter_AddRefs(msgStore)); NS_ENSURE_SUCCESS(rv, rv); // Notify that compaction is beginning. We do this even if there are no // messages to be copied because the summary database still gets blown away // which is still pretty interesting. (And we like consistency.) nsCOMPtr<nsIMsgFolderNotificationService> notifier(do_GetService(NS_MSGNOTIFICATIONSERVICE_CONTRACTID)); if (notifier) notifier->NotifyItemEvent(m_folder, NS_LITERAL_CSTRING("FolderCompactStart"), nullptr); // TODO: test whether sorting the messages (m_keyArray) by messageOffset // would improve performance on large files (less seeks). // The m_keyArray is in the order as stored in DB and on IMAP or News // the messages stored on the mbox file are not necessarily in the same order. if (m_size > 0) { nsCOMPtr<nsIURI> notUsed; ShowCompactingStatusMsg(); AddRef(); rv = m_messageService->CopyMessages(m_size, m_keyArray->m_keys.Elements(), m_folder, this, false, nullptr, m_window, getter_AddRefs(notUsed)); } else { // no messages to copy with FinishCompact(); // Release(); // we don't "own" ourselves yet. } return rv; }
nsresult nsFolderCompactState::StartCompacting() { nsCOMPtr<nsIMsgPluggableStore> msgStore; nsCOMPtr<nsIMsgIncomingServer> server; nsresult rv = m_folder->GetServer(getter_AddRefs(server)); NS_ENSURE_SUCCESS(rv, rv); rv = server->GetMsgStore(getter_AddRefs(msgStore)); NS_ENSURE_SUCCESS(rv, rv); // Notify that compaction is beginning. We do this even if there are no // messages to be copied because the summary database still gets blown away // which is still pretty interesting. (And we like consistency.) nsCOMPtr<nsIMsgFolderNotificationService> notifier(do_GetService(NS_MSGNOTIFICATIONSERVICE_CONTRACTID)); if (notifier) notifier->NotifyItemEvent(m_folder, NS_LITERAL_CSTRING("FolderCompactStart"), nsnull); if (m_size > 0) { nsCOMPtr<nsIURI> notUsed; ShowCompactingStatusMsg(); AddRef(); rv = m_messageService->CopyMessages(m_size, m_keyArray->m_keys.Elements(), m_folder, this, false, nsnull, m_window, getter_AddRefs(notUsed)); } else { // no messages to copy with FinishCompact(); // Release(); // we don't "own" ourselves yet. } return rv; }