From 69aa1a53eda2e593e552f7a7e34374192fef3c18 Mon Sep 17 00:00:00 2001 From: woblight Date: Tue, 21 Aug 2018 23:16:14 +0200 Subject: [PATCH] Ask for removal confirmation for all subfolders at once --- addon.cpp | 65 +++++++++++++++++++++++++++++++------------------------ addon.h | 2 +- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/addon.cpp b/addon.cpp index 53dae2b..65d1b34 100644 --- a/addon.cpp +++ b/addon.cpp @@ -362,43 +362,52 @@ void walkFolders(const QFileInfo &info, auto f){ f(info); } -void Addon::removeFolder(QString path, bool ask) { - QFileInfo info(path); + +void Addon::removeFolders(QStringList paths, bool ask) { QStringList files; bool ok = ask; - if (info.exists()) { - walkFolders(info, [&files](QFileInfo info){ - files << info.absoluteFilePath(); - }); - if (ask) { - m_mutex.lock(); - m_result = &ok; - QMetaObject::invokeMethod(this, "setFilesToRemove", Q_ARG(QString, files.join('\n'))); - m_wait.wait(&m_mutex); - m_mutex.unlock(); - } - if (ok) { - setTotal(files.size()); - for (int i = 0; i < files.size(); i++) { - QFileInfo info(files[i]); - if (!info.isSymLink() && info.isDir()) - info.dir().rmdir(info.fileName()); - else { - QFile f(info.absoluteFilePath()); - f.setPermissions(f.permissions()|QFile::WriteOther); - f.remove(); - } - setProgress(i); - } + foreach (QString path, paths){ + QFileInfo info(path); + if (info.exists()) { + walkFolders(info, [&files](QFileInfo info){ + files << info.absoluteFilePath(); + }); } } + if (files.isEmpty()) return; + if (ask) { + m_mutex.lock(); + m_result = &ok; + QMetaObject::invokeMethod(this, "setFilesToRemove", Q_ARG(QString, files.join('\n'))); + m_wait.wait(&m_mutex); + m_mutex.unlock(); + } + if (ok) { + setTotal(files.size()); + for (int i = 0; i < files.size(); i++) { + QFileInfo info(files[i]); + if (!info.isSymLink() && info.isDir()) + info.dir().rmdir(info.fileName()); + else { + QFile f(info.absoluteFilePath()); + f.setPermissions(f.permissions()|QFile::WriteOther); + f.remove(); + } + setProgress(i); + } + } +} + +void Addon::removeFolder(QString path, bool ask) { + removeFolders({path}, ask); } void Addon::removeSubfolders() { delegate("Removing Subfolders", [this](){ - foreach (QString subf, m_subfolders) - removeFolder(Control::instance()->addonsPath() + "/" + subf); + QStringList paths(m_subfolders); + std::transform(paths.begin(), paths.end(), paths.begin(), [](auto p){return Control::instance()->addonsPath() + "/" + p;}); + removeFolders(paths); }); } diff --git a/addon.h b/addon.h index 33fc2f5..0ad60c9 100644 --- a/addon.h +++ b/addon.h @@ -133,11 +133,11 @@ private: QThreadPool *m_pool; + void removeFolders(QStringList paths, bool ask = true); void removeFolder(QString path, bool ask = true); QString m_filesToRemove; QString m_readme; - signals: void nameChanged(QString name);