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:
Matt A. Tobin 2019-11-10 20:27:19 -05:00 • committed by Roy Tam
commit 0f885aaad1
8 changed files with 77 additions and 139 deletions

View file

@ -653,8 +653,6 @@ NS_IMETHODIMP nsMsgLocalMailFolder::EmptyTrash(nsIMsgWindow *msgWindow,
if (NS_SUCCEEDED(rv))
{
uint32_t flags;
nsCString trashUri;
trashFolder->GetURI(trashUri);
trashFolder->GetFlags(&flags);
int32_t totalMessages = 0;
rv = trashFolder->GetTotalMessages(true, &totalMessages);
@ -750,43 +748,6 @@ nsresult nsMsgLocalMailFolder::IsChildOfTrash(bool *result)
return rv;
}
NS_IMETHODIMP nsMsgLocalMailFolder::Delete()
{
nsresult rv;
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;
}
nsCOMPtr<nsIMsgIncomingServer> server;
rv = GetServer(getter_AddRefs(server));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgPluggableStore> msgStore;
rv = server->GetMsgStore(getter_AddRefs(msgStore));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr <nsIFile> summaryFile;
rv = GetSummaryFile(getter_AddRefs(summaryFile));
NS_ENSURE_SUCCESS(rv, rv);
//Clean up .sbd folder if it exists.
// Remove summary file.
rv = summaryFile->Remove(false);
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Could not delete msg summary file");
rv = msgStore->DeleteFolder(this);
if (rv == NS_ERROR_FILE_NOT_FOUND ||
rv == NS_ERROR_FILE_TARGET_DOES_NOT_EXIST)
rv = NS_OK; // virtual folders do not have a msgStore file
return rv;
}
NS_IMETHODIMP nsMsgLocalMailFolder::DeleteSubFolders(nsIArray *folders, nsIMsgWindow *msgWindow)
{
nsresult rv;

View file

@ -120,7 +120,6 @@ public:
NS_IMETHOD Compact(nsIUrlListener *aListener, nsIMsgWindow *aMsgWindow) override;
NS_IMETHOD CompactAll(nsIUrlListener *aListener, nsIMsgWindow *aMsgWindow, bool aCompactOfflineAlso) override;
NS_IMETHOD EmptyTrash(nsIMsgWindow *msgWindow, nsIUrlListener *aListener) override;
NS_IMETHOD Delete () override;
NS_IMETHOD DeleteSubFolders(nsIArray *folders, nsIMsgWindow *msgWindow) override;
NS_IMETHOD CreateStorageIfMissing(nsIUrlListener* urlListener) override;
NS_IMETHOD Rename (const nsAString& aNewName, nsIMsgWindow *msgWindow) override;

View file

@ -300,26 +300,30 @@ NS_IMETHODIMP nsMsgBrkMBoxStore::SetSummaryFileValid(nsIMsgFolder *aFolder,
NS_IMETHODIMP nsMsgBrkMBoxStore::DeleteFolder(nsIMsgFolder *aFolder)
{
NS_ENSURE_ARG_POINTER(aFolder);
//Delete mailbox
bool exists;
// Delete mbox file.
nsCOMPtr<nsIFile> pathFile;
nsresult rv = aFolder->GetFilePath(getter_AddRefs(pathFile));
NS_ENSURE_SUCCESS(rv, rv);
pathFile->Remove(false);
bool isDirectory = false;
pathFile->IsDirectory(&isDirectory);
if (!isDirectory)
{
nsAutoString leafName;
pathFile->GetLeafName(leafName);
leafName.AppendLiteral(FOLDER_SUFFIX);
pathFile->SetLeafName(leafName);
exists = false;
pathFile->Exists(&exists);
if (exists) {
rv = pathFile->Remove(false);
NS_ENSURE_SUCCESS(rv, rv);
}
isDirectory = false;
pathFile->IsDirectory(&isDirectory);
//If this is a directory, then remove it.
return isDirectory ? pathFile->Remove(true) : NS_OK;
// Delete any subfolders (.sbd-suffixed directories).
AddDirectorySeparator(pathFile);
exists = false;
pathFile->Exists(&exists);
if (exists) {
rv = pathFile->Remove(true);
NS_ENSURE_SUCCESS(rv, rv);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgBrkMBoxStore::RenameFolder(nsIMsgFolder *aFolder,

View file

@ -323,19 +323,30 @@ NS_IMETHODIMP nsMsgMaildirStore::SetSummaryFileValid(nsIMsgFolder *aFolder,
NS_IMETHODIMP nsMsgMaildirStore::DeleteFolder(nsIMsgFolder *aFolder)
{
NS_ENSURE_ARG_POINTER(aFolder);
bool exists;
// Delete Maildir structure
// Delete the Maildir itself.
nsCOMPtr<nsIFile> pathFile;
nsresult rv = aFolder->GetFilePath(getter_AddRefs(pathFile));
NS_ENSURE_SUCCESS(rv, rv);
rv = pathFile->Remove(true); // recursive
AddDirectorySeparator(pathFile);
bool exists;
exists = false;
pathFile->Exists(&exists);
if (exists)
pathFile->Remove(true);
return rv;
if (exists) {
rv = pathFile->Remove(true);
NS_ENSURE_SUCCESS(rv, rv);
}
// Delete any subfolders (.sbd-suffixed directories).
AddDirectorySeparator(pathFile);
exists = false;
pathFile->Exists(&exists);
if (exists) {
rv = pathFile->Remove(true);
NS_ENSURE_SUCCESS(rv, rv);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgMaildirStore::RenameFolder(nsIMsgFolder *aFolder,