From bf2c446d20da39ea5f5615d23d07deb987dc1384 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 21 Oct 2017 14:11:01 +0200 Subject: [PATCH] Prevent errors when removing multiple nested dirs --- widgets/misc/textviewdialog.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/widgets/misc/textviewdialog.cpp b/widgets/misc/textviewdialog.cpp index e1a8a19..214c71f 100644 --- a/widgets/misc/textviewdialog.cpp +++ b/widgets/misc/textviewdialog.cpp @@ -110,12 +110,23 @@ TextViewDialog *TextViewDialog::forDirectoryErrors(const Data::SyncthingDir &dir printDirectories(tr("Do you really want to remove the following directories:"), nonEmptyDirs), QMessageBox::YesToAll, QMessageBox::NoToAll | QMessageBox::Default | QMessageBox::Escape) == QMessageBox::YesToAll) { + QStringList removedDirs; QStringList failedDirs; for (const QString &dirPath : nonEmptyDirs) { + bool ok = false; QDir dir(dirPath); if (!dir.exists() || !dir.removeRecursively()) { - failedDirs << dirPath; + // check whether dir has already been removed by removing its parent + for (const QString &removedDir : removedDirs) { + if (dirPath.startsWith(removedDir)) { + ok = true; + break; + } + } + } else { + ok = true; } + (ok ? removedDirs : failedDirs) << dirPath; } if (!failedDirs.isEmpty()) { QMessageBox::critical(textViewDlg, title, printDirectories(tr("Unable to remove the following dirs:"), failedDirs));