From 8a10147bbb1fe6589c4205bcfd26d6d696512ced Mon Sep 17 00:00:00 2001 From: SulfurNitride Date: Wed, 11 Feb 2026 19:04:11 -0600 Subject: Add Root Builder plugin, Linux game detection, and OMOD installer fix - New native Root Builder plugin (src/plugins/rootbuilder.py) with copy and symlink deploy modes, auto-deploy hooks, backup/restore, and third-party conflict detection that moves incompatible plugins to DisabledPlugins/. In link mode, .exe/.dll are always copied to avoid Wine/Proton path resolution issues with symlinked executables. - Fix basic_games detection on Linux: steam_utils now checks native Steam paths (~/.local/share/Steam, Flatpak, Snap), epic_utils uses correct Linux Heroic config paths, gog_utils falls back to Heroic GOG installed.json when Windows registry is unavailable. - Fix OMOD installer crash: isArchiveSupported now handles both IFileTree (from mod list refresh) and string (from install check) arguments. - Add flatpak manifest step to copy source-tree Python plugins (src/plugins/*.py) into the build output. Co-Authored-By: Claude Opus 4.6 --- libs/installer_fomod/src/fomodinstallerdialog.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'libs/installer_fomod/src/fomodinstallerdialog.cpp') diff --git a/libs/installer_fomod/src/fomodinstallerdialog.cpp b/libs/installer_fomod/src/fomodinstallerdialog.cpp index ef6c44f..0fa6bfc 100644 --- a/libs/installer_fomod/src/fomodinstallerdialog.cpp +++ b/libs/installer_fomod/src/fomodinstallerdialog.cpp @@ -77,12 +77,13 @@ bool PagesDescending(QGroupBox* LHS, QGroupBox* RHS) FomodInstallerDialog::FomodInstallerDialog( InstallerFomod* installer, const GuessedValue& modName, - const QString& fomodPath, + const QString& fomodPath, const QString& fomodDirName, const std::function& fileCheck, QWidget* parent) : QDialog(parent), ui(new Ui::FomodInstallerDialog), m_Installer(installer), - m_ModName(modName), m_ModID(-1), m_FomodPath(fomodPath), m_Manual(false), - m_FileCheck(fileCheck), m_FileSystemItemSequence() + m_ModName(modName), m_ModID(-1), m_FomodPath(fomodPath), + m_FomodDirName(fomodDirName), m_Manual(false), m_FileCheck(fileCheck), + m_FileSystemItemSequence() { ui->setupUi(this); setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint); @@ -235,7 +236,7 @@ void FomodInstallerDialog::readXml(QFile& file, void FomodInstallerDialog::readInfoXml() { - QFile file(QDir::tempPath() + "/" + m_FomodPath + "/fomod/info.xml"); + QFile file(QDir::tempPath() + "/" + m_FomodPath + "/" + m_FomodDirName + "/info.xml"); // We don't need a info.xml file, so we just return if we cannot open it: if (!file.open(QIODevice::ReadOnly)) { @@ -246,7 +247,7 @@ void FomodInstallerDialog::readInfoXml() void FomodInstallerDialog::readModuleConfigXml() { - QFile file(QDir::tempPath() + "/" + m_FomodPath + "/fomod/ModuleConfig.xml"); + QFile file(QDir::tempPath() + "/" + m_FomodPath + "/" + m_FomodDirName + "/ModuleConfig.xml"); if (!file.open(QIODevice::ReadOnly)) { throw Exception(tr("%1 missing.").arg(file.fileName())); } @@ -261,7 +262,7 @@ void FomodInstallerDialog::initData(IOrganizer* moInfo) readInfoXml(); QString screenshotPath = - QDir::tempPath() + "/" + m_FomodPath + "/fomod/screenshot.png"; + QDir::tempPath() + "/" + m_FomodPath + "/" + m_FomodDirName + "/screenshot.png"; if (!QImage(screenshotPath).isNull()) { ui->screenshotLabel->setScalableResource(screenshotPath); ui->screenshotExpand->setVisible(false); -- cgit v1.3.1