Ask for removal confirmation for all subfolders at once

This commit is contained in:
woblight
2018-08-21 23:16:14 +02:00
parent d3a6c2ffa2
commit 69aa1a53ed
2 changed files with 38 additions and 29 deletions
+37 -28
View File
@@ -362,43 +362,52 @@ void walkFolders(const QFileInfo &info, auto f){
f(info); f(info);
} }
void Addon::removeFolder(QString path, bool ask) {
QFileInfo info(path); void Addon::removeFolders(QStringList paths, bool ask) {
QStringList files; QStringList files;
bool ok = ask; bool ok = ask;
if (info.exists()) { foreach (QString path, paths){
walkFolders(info, [&files](QFileInfo info){ QFileInfo info(path);
files << info.absoluteFilePath(); if (info.exists()) {
}); walkFolders(info, [&files](QFileInfo info){
if (ask) { files << info.absoluteFilePath();
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);
}
} }
} }
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() void Addon::removeSubfolders()
{ {
delegate("Removing Subfolders", [this](){ delegate("Removing Subfolders", [this](){
foreach (QString subf, m_subfolders) QStringList paths(m_subfolders);
removeFolder(Control::instance()->addonsPath() + "/" + subf); std::transform(paths.begin(), paths.end(), paths.begin(), [](auto p){return Control::instance()->addonsPath() + "/" + p;});
removeFolders(paths);
}); });
} }
+1 -1
View File
@@ -133,11 +133,11 @@ private:
QThreadPool *m_pool; QThreadPool *m_pool;
void removeFolders(QStringList paths, bool ask = true);
void removeFolder(QString path, bool ask = true); void removeFolder(QString path, bool ask = true);
QString m_filesToRemove; QString m_filesToRemove;
QString m_readme; QString m_readme;
signals: signals:
void nameChanged(QString name); void nameChanged(QString name);