diff options
Diffstat (limited to 'src/modinfodialog.cpp')
| -rw-r--r-- | src/modinfodialog.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index 4b049a78..302175aa 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -133,6 +133,46 @@ FileRenamer::RenameResults unhideFile(FileRenamer& renamer, const QString &oldNa } +FileRenamer::RenameResults restoreHiddenFilesRecursive(FileRenamer& renamer, const QString& targetDir) +{ + FileRenamer::RenameResults results = FileRenamer::RESULT_OK; + QDir currentDir = targetDir; + for (QString hiddenFile : currentDir.entryList( + (QStringList() << "*" + ModInfo::s_HiddenExt), + QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)) { + + QString oldName = currentDir.absoluteFilePath(hiddenFile); + QString newName = oldName.left(oldName.length() - ModInfo::s_HiddenExt.length()); + + auto partialResult = renamer.rename(oldName, newName); + + if (partialResult == FileRenamer::RESULT_CANCEL) { + return FileRenamer::RESULT_CANCEL; + } + + if (partialResult == FileRenamer::RESULT_SKIP) { + results = FileRenamer::RESULT_SKIP; + } + } + + for (QString dirName : currentDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)) { + + const QString dirPath = currentDir.absoluteFilePath(dirName); + // recurse on childrend directories + auto partialResult = restoreHiddenFilesRecursive(renamer, dirPath); + + if (partialResult == FileRenamer::RESULT_CANCEL) { + return FileRenamer::RESULT_CANCEL; + } + + if (partialResult == FileRenamer::RESULT_SKIP) { + results = FileRenamer::RESULT_SKIP; + } + } + return results; +} + + ModInfoDialog::TabInfo::TabInfo(std::unique_ptr<ModInfoDialogTab> tab) : tab(std::move(tab)), realPos(-1), widget(nullptr) { |
