Browse Source

[desktop] Fix 2 mod manager bugs (#3884)

- Multi-import would show duplicates of a mod if it had both exefs and
  romfs
- Import from folder would crash on some single mods

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3884
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
pull/3891/head
crueter 3 days ago
parent
commit
91058d7383
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 6
      src/frontend_common/mod_manager.cpp
  2. 6
      src/qt_common/util/mod.cpp
  3. 5
      src/yuzu/configuration/addon/mod_select_dialog.cpp
  4. 4
      src/yuzu/configuration/addon/mod_select_dialog.ui

6
src/frontend_common/mod_manager.cpp

@ -3,6 +3,7 @@
#include <algorithm>
#include <filesystem>
#include <iostream>
#include <fmt/format.h>
#include "common/fs/fs.h"
#include "common/fs/fs_types.h"
@ -25,7 +26,10 @@ std::vector<std::filesystem::path> GetModFolder(const std::string& root) {
"romfslite"};
if (std::ranges::find(valid_names, name) != valid_names.end()) {
paths.emplace_back(entry.path().parent_path());
const auto parent = entry.path().parent_path();
if (std::ranges::find(paths, parent) == paths.end()) {
paths.emplace_back(parent);
}
}
return true;

6
src/qt_common/util/mod.cpp

@ -101,8 +101,10 @@ QStringList GetModFolders(const QString& root, const QString& fallbackName) {
} else {
// Rename the existing mod folder.
const auto new_path = std_path.parent_path() / name.toStdString();
fs::remove_all(new_path);
fs::rename(std_path, new_path);
if (new_path != std_path) {
fs::remove_all(new_path);
fs::rename(std_path, new_path);
}
std_path = new_path;
}

5
src/yuzu/configuration/addon/mod_select_dialog.cpp

@ -31,11 +31,10 @@ ModSelectDialog::ModSelectDialog(const QStringList& mods, QWidget* parent)
}
ui->treeView->expandAll();
ui->treeView->resizeColumnToContents(0);
int rows = item_model->rowCount();
int height =
ui->treeView->contentsMargins().top() * 4 + ui->treeView->contentsMargins().bottom() * 4;
4 + ui->treeView->contentsMargins().top() * 4 + ui->treeView->contentsMargins().bottom() * 4;
int width = 0;
for (int i = 0; i < rows; ++i) {
@ -46,7 +45,7 @@ ModSelectDialog::ModSelectDialog(const QStringList& mods, QWidget* parent)
width +=
ui->treeView->contentsMargins().left() * 4 + ui->treeView->contentsMargins().right() * 4;
ui->treeView->setMinimumHeight(qMin(height, 600));
ui->treeView->setMinimumWidth(qMin(width, 700));
ui->treeView->setMinimumWidth(qMax(width, 540));
adjustSize();
connect(this, &QDialog::accepted, this, [this]() {

4
src/yuzu/configuration/addon/mod_select_dialog.ui

@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<width>580</width>
<height>430</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Import Mods</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>

Loading…
Cancel
Save