diff options
| author | Twinki <Twinki14@users.noreply.github.com> | 2024-06-15 12:51:47 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-15 18:51:47 +0200 |
| commit | d3b647ab2b19626b2f86b5c2af3946c1fcf22068 (patch) | |
| tree | 3dac9ed85783bdf1bb682cd4a436cfa9197ba382 /src/settingsdialogworkarounds.cpp | |
| parent | 6d08d434a8a5a4471a620974a52550ada05ab663 (diff) | |
Use new Skip File & Skip Directory in usvfs (#2033)
* Use new Skip File & Skip Directory in usvfs.
# Motivations
https://github.com/ModOrganizer2/usvfs/pull/61 Highlights some reasons why the ability to skip files & directories would be beneficial
# Modifications
- Add two new settings, `skip_file_suffixes` and `skip_directories`
- Wire the two new settings up to usvfs
- Add two new buttons to the `Workarounds` dialog, one to adjust Skip File Suffixes and another for Skip Directories, both buttons act nearly identical to the Executable Blacklist button
- Add a new grouping in the `Workarounds` dialog box that contains the usvfs buttons to keep the dialog a tad organized
Diffstat (limited to 'src/settingsdialogworkarounds.cpp')
| -rw-r--r-- | src/settingsdialogworkarounds.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/settingsdialogworkarounds.cpp b/src/settingsdialogworkarounds.cpp index 36e5dd44..849e2085 100644 --- a/src/settingsdialogworkarounds.cpp +++ b/src/settingsdialogworkarounds.cpp @@ -34,6 +34,8 @@ WorkaroundsSettingsTab::WorkaroundsSettingsTab(Settings& s, SettingsDialog& d) // buttons m_ExecutableBlacklist = settings().executablesBlacklist(); + m_SkipFileSuffixes = settings().skipFileSuffixes(); + m_SkipDirectories = settings().skipDirectories(); QObject::connect(ui->bsaDateBtn, &QPushButton::clicked, [&] { on_bsaDateBtn_clicked(); @@ -41,6 +43,12 @@ WorkaroundsSettingsTab::WorkaroundsSettingsTab(Settings& s, SettingsDialog& d) QObject::connect(ui->execBlacklistBtn, &QPushButton::clicked, [&] { on_execBlacklistBtn_clicked(); }); + QObject::connect(ui->skipFileSuffixBtn, &QPushButton::clicked, [&] { + on_skipFileSuffixBtn_clicked(); + }); + QObject::connect(ui->skipDirectoriesBtn, &QPushButton::clicked, [&] { + on_skipDirectoriesBtn_clicked(); + }); QObject::connect(ui->resetGeometryBtn, &QPushButton::clicked, [&] { on_resetGeometryBtn_clicked(); }); @@ -69,6 +77,8 @@ void WorkaroundsSettingsTab::update() // buttons settings().setExecutablesBlacklist(m_ExecutableBlacklist); + settings().setSkipFileSuffixes(m_SkipFileSuffixes); + settings().setSkipDirectories(m_SkipDirectories); } bool WorkaroundsSettingsTab::changeBlacklistNow(QWidget* parent, Settings& settings) @@ -114,6 +124,71 @@ WorkaroundsSettingsTab::changeBlacklistLater(QWidget* parent, const QString& cur return blacklist.join(";"); } +std::optional<QStringList> +WorkaroundsSettingsTab::changeSkipFileSuffixes(QWidget* parent, + const QStringList& current) +{ + bool ok = false; + + QString result = QInputDialog::getMultiLineText( + parent, QObject::tr("Skip File Suffixes"), + QObject::tr( + "Enter one file suffix per line to be skipped / ignored from the virtual " + "file system.\n" + "Not to be confused with file extensions, file suffixes are simply how the " + "filename ends.\n\n" + "Example:\n" + " .txt - Would skip all files that end with .txt, <any text>.txt\n" + " some_file.txt - Would skip all files that end with some_file.txt, <any " + "text>some_file.txt"), + current.join("\n"), &ok); + + if (!ok) { + return {}; + } + + QStringList fileSuffixes; + for (auto& suffix : result.split("\n")) { + auto trimmed = suffix.trimmed(); + if (!trimmed.isEmpty()) { + fileSuffixes << trimmed; + } + } + + return fileSuffixes; +} + +std::optional<QStringList> +WorkaroundsSettingsTab::changeSkipDirectories(QWidget* parent, + const QStringList& current) +{ + bool ok = false; + + QString result = QInputDialog::getMultiLineText( + parent, QObject::tr("Skip Directories"), + QObject::tr( + "Enter one directory per line to be skipped / ignored from the virtual " + "file system.\n\n" + "Example:\n" + " .git\n" + " instructions"), + current.join("\n"), &ok); + + if (!ok) { + return {}; + } + + QStringList directories; + for (auto& dir : result.split("\n")) { + auto trimmed = dir.trimmed(); + if (!trimmed.isEmpty()) { + directories << trimmed; + } + } + + return directories; +} + void WorkaroundsSettingsTab::on_execBlacklistBtn_clicked() { if (auto s = changeBlacklistLater(parentWidget(), m_ExecutableBlacklist)) { @@ -121,6 +196,20 @@ void WorkaroundsSettingsTab::on_execBlacklistBtn_clicked() } } +void WorkaroundsSettingsTab::on_skipFileSuffixBtn_clicked() +{ + if (auto s = changeSkipFileSuffixes(parentWidget(), m_SkipFileSuffixes)) { + m_SkipFileSuffixes = *s; + } +} + +void WorkaroundsSettingsTab::on_skipDirectoriesBtn_clicked() +{ + if (auto s = changeSkipDirectories(parentWidget(), m_SkipDirectories)) { + m_SkipDirectories = *s; + } +} + void WorkaroundsSettingsTab::on_bsaDateBtn_clicked() { const auto* game = qApp->property("managed_game").value<MOBase::IPluginGame*>(); |
