[desktop] Add mod importer from folder and zip (#3472)

Closes #3125

Adds buttons to the addons page that imports a mod (or mods) from zip or folder.

Currently known to work with mods that provide proper romfs/exefs things, unsure about cheats and such. Also works on mods that just stuff things into the root of the zip.

TODO:
- [ ] test folder more thoroughly
- [ ] cheats
- [ ] test all sorts of mod pack types

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3472
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
This commit is contained in:
crueter 2026-02-06 06:37:30 +01:00
parent 08232ce642
commit e07e269bd7
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6
18 changed files with 570 additions and 14 deletions

View file

@ -85,6 +85,7 @@
#include "qt_common/util/meta.h"
#include "qt_common/util/content.h"
#include "qt_common/util/fs.h"
#include "qt_common/util/mod.h"
// These are wrappers to avoid the calls to CreateDirectory and CreateFile because of the Windows
// defines.
@ -3654,6 +3655,7 @@ void MainWindow::OpenPerGameConfiguration(u64 title_id, const std::string& file_
Settings::SetConfiguringGlobal(false);
ConfigurePerGame dialog(this, title_id, file_name, vk_device_records, *QtCommon::system);
dialog.LoadFromFile(v_file);
const auto result = dialog.exec();
if (result != QDialog::Accepted && !UISettings::values.configuration_applied) {
@ -3665,7 +3667,7 @@ void MainWindow::OpenPerGameConfiguration(u64 title_id, const std::string& file_
const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false);
if (reload) {
game_list->PopulateAsync(UISettings::values.game_dirs);
OnGameListRefresh();
}
// Do not cause the global config to write local settings into the config file