summaryrefslogtreecommitdiff
path: root/src/modinfodialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modinfodialog.cpp')
-rw-r--r--src/modinfodialog.cpp40
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)
{