mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 10:57:34 +09:00
Bug 1317117 - call msgStore folder deletion during imap/news empty trash.
Also factors out some common code into nsMSgDBFolder::Delete(), and makes a couple of incidental changes to try and clarify the responsibilies of nsIMsgPluggableStore::DeleteFolder(). Tag #1273
This commit is contained in:
parent
0ef88cc19d
commit
0f885aaad1
8 changed files with 77 additions and 139 deletions
|
|
@ -1468,7 +1468,6 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow, nsIUrlListe
|
|||
} // if we fetched an imap server
|
||||
} // if emptying trash on exit which is done through the account manager.
|
||||
|
||||
nsCOMPtr<nsIMsgDatabase> trashDB;
|
||||
if (WeAreOffline())
|
||||
{
|
||||
nsCOMPtr <nsIMsgDatabase> trashDB;
|
||||
|
|
@ -1485,12 +1484,7 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow, nsIUrlListe
|
|||
}
|
||||
return rv;
|
||||
}
|
||||
nsCOMPtr <nsIDBFolderInfo> transferInfo;
|
||||
rv = trashFolder->GetDBTransferInfo(getter_AddRefs(transferInfo));
|
||||
rv = trashFolder->Delete(); // delete summary spec
|
||||
trashFolder->SetDBTransferInfo(transferInfo);
|
||||
|
||||
trashFolder->SetSizeOnDisk(0);
|
||||
nsCOMPtr<nsIImapService> imapService = do_GetService(NS_IMAPSERVICE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
@ -1536,7 +1530,17 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow, nsIUrlListe
|
|||
}
|
||||
}
|
||||
|
||||
// The trash folder has effectively been deleted
|
||||
nsCOMPtr <nsIDBFolderInfo> transferInfo;
|
||||
rv = trashFolder->GetDBTransferInfo(getter_AddRefs(transferInfo));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
// Bulk-delete all the messages by deleting the msf file and storage.
|
||||
// This is a little kludgy.
|
||||
rv = trashFolder->Delete();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
trashFolder->SetDBTransferInfo(transferInfo);
|
||||
trashFolder->SetSizeOnDisk(0);
|
||||
|
||||
// The trash folder has effectively been deleted.
|
||||
nsCOMPtr<nsIMsgFolderNotificationService> notifier(do_GetService(NS_MSGNOTIFICATIONSERVICE_CONTRACTID));
|
||||
if (notifier)
|
||||
notifier->NotifyFolderDeleted(trashFolder);
|
||||
|
|
@ -1548,41 +1552,9 @@ NS_IMETHODIMP nsImapMailFolder::EmptyTrash(nsIMsgWindow *aMsgWindow, nsIUrlListe
|
|||
|
||||
NS_IMETHODIMP nsImapMailFolder::Delete()
|
||||
{
|
||||
nsresult rv;
|
||||
if (!mDatabase)
|
||||
{
|
||||
// Check if anyone has this db open. If so, do a force closed.
|
||||
nsCOMPtr<nsIMsgDBService> msgDBService = do_GetService(NS_MSGDB_SERVICE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
msgDBService->CachedDBForFolder(this, getter_AddRefs(mDatabase));
|
||||
}
|
||||
if (mDatabase)
|
||||
{
|
||||
mDatabase->ForceClosed();
|
||||
mDatabase = nullptr;
|
||||
}
|
||||
nsresult rv = nsMsgDBFolder::Delete();
|
||||
|
||||
nsCOMPtr<nsIFile> path;
|
||||
rv = GetFilePath(getter_AddRefs(path));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIFile> summaryLocation;
|
||||
rv = GetSummaryFileLocation(path, getter_AddRefs(summaryLocation));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
bool exists = false;
|
||||
rv = summaryLocation->Exists(&exists);
|
||||
if (NS_SUCCEEDED(rv) && exists)
|
||||
{
|
||||
rv = summaryLocation->Remove(false);
|
||||
if (NS_FAILED(rv))
|
||||
NS_WARNING("failed to remove imap summary file");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mPath)
|
||||
mPath->Remove(false);
|
||||
// should notify nsIMsgFolderListeners about the folder getting deleted...
|
||||
// Should notify nsIMsgFolderListeners about the folder getting deleted?
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue