diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-02-11 02:37:39 -0600 |
| commit | 7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch) | |
| tree | 27fb39be241fdb5ac2734c574de678977d1856d0 /libs/tool_inibakery/src/inibakery.cpp | |
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem,
Proton/umu-run integration, and Flatpak packaging.
Key features:
- FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak)
- Proton/GE-Proton/umu-run launcher with env var forwarding
- Flatpak support (sandbox-aware VFS, NXM handler, umu-run)
- Wine prefix management UI
- Case-insensitive path resolution for Linux filesystems
- QSettings-safe INI handling (avoids Bethesda INI corruption)
- Portable instance support with auto-generated launcher scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/tool_inibakery/src/inibakery.cpp')
| -rw-r--r-- | libs/tool_inibakery/src/inibakery.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/libs/tool_inibakery/src/inibakery.cpp b/libs/tool_inibakery/src/inibakery.cpp new file mode 100644 index 0000000..bb23492 --- /dev/null +++ b/libs/tool_inibakery/src/inibakery.cpp @@ -0,0 +1,97 @@ +#include "inibakery.h" + +#include <functional> + +#include <QCoreApplication> +#include <QFile> +#include <QStringList> +#include <QtPlugin> + +#include <uibase/game_features/bsainvalidation.h> +#include <uibase/game_features/igamefeatures.h> +#include <uibase/game_features/localsavegames.h> +#include <uibase/iplugingame.h> + +using namespace MOBase; + +bool IniBakery::init(MOBase::IOrganizer* moInfo) +{ + using namespace std::placeholders; + m_MOInfo = moInfo; + m_MOInfo->onAboutToRun([this](const auto& binary) { + return prepareIni(binary); + }); + + return true; +} + +QString IniBakery::name() const +{ + return "INI Bakery"; +} + +QString IniBakery::localizedName() const +{ + return tr("INI Bakery"); +} + +QString IniBakery::author() const +{ + return "Tannin"; +} + +QString IniBakery::description() const +{ + return tr("Manages game ini files"); +} + +MOBase::VersionInfo IniBakery::version() const +{ + return VersionInfo(0, 3, 0, VersionInfo::RELEASE_FINAL); +} + +QList<PluginSetting> IniBakery::settings() const +{ + return QList<PluginSetting>(); +} + +QStringList IniBakery::iniFileNames() const +{ + return m_MOInfo->managedGame()->iniFiles(); +} + +bool IniBakery::prepareIni(const QString&) +{ + const auto* features = m_MOInfo->gameFeatures(); + + auto savegames = features->gameFeature<MOBase::LocalSavegames>(); + if (savegames != nullptr) { + savegames->prepareProfile(m_MOInfo->profile().get()); + } + + auto invalidation = features->gameFeature<BSAInvalidation>(); + if (invalidation != nullptr) { + invalidation->prepareProfile(m_MOInfo->profile().get()); + } + + return true; +} + +MappingType IniBakery::mappings() const +{ + MappingType result; + + const IPluginGame* game = m_MOInfo->managedGame(); + + auto profile = m_MOInfo->profile(); + + if (profile->localSettingsEnabled()) { + for (const QString& iniFile : iniFileNames()) { + result.push_back({m_MOInfo->profilePath() + "/" + QFileInfo(iniFile).fileName(), + game->documentsDirectory().absoluteFilePath(iniFile), false, + false}); + } + } + + return result; +} |
