Ask for removal confirmation for all subfolders at once
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user