aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_fomod/src/fomodinstallerdialog.cpp
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 19:04:11 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 19:04:11 -0600
commit8a10147bbb1fe6589c4205bcfd26d6d696512ced (patch)
tree66fe7403114e2d63fa48ceee14352bee4dbddae0 /libs/installer_fomod/src/fomodinstallerdialog.cpp
parenta03455028d8b79a1196bffc2f80c2455c41db065 (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'libs/installer_fomod/src/fomodinstallerdialog.cpp')
-rw-r--r--libs/installer_fomod/src/fomodinstallerdialog.cpp13
1 files changed, 7 insertions, 6 deletions
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<QString>& modName,
- const QString& fomodPath,
+ const QString& fomodPath, const QString& fomodDirName,
const std::function<MOBase::IPluginList::PluginStates(const QString&)>& 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);