aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_fomod_plus/scanner/FomodPlusScanner.h
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-14 02:45:12 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-14 02:45:25 -0600
commit817e8f5cd26739c69d930d21cd9dc4c0b6e4984e (patch)
tree52aed11d6751bb7d20b06acf197d56fac113203d /libs/installer_fomod_plus/scanner/FomodPlusScanner.h
parent51a9f8f197727f00896e5de44569b098923527dd (diff)
Add FUSE external mapping support, BG3/Oblivion Remastered fixes, fomod-plus and NaK integration
FUSE VFS now deploys non-data-dir mod mappings (Paks, OBSE, UE4SS, etc.) via real symlinks and injects file-level data-dir mappings (plugins.txt, loadorder.txt) into the VFS tree. Fixes game launches for Oblivion Remastered (Root Builder path resolution, script extender support) and BG3 (Wine prefix documents directory, file mapper symlinks on Linux). Vendors mo2-fomod-plus plugin and NaK crate for FOMOD installer and game finder/runtime support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/installer_fomod_plus/scanner/FomodPlusScanner.h')
-rw-r--r--libs/installer_fomod_plus/scanner/FomodPlusScanner.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/libs/installer_fomod_plus/scanner/FomodPlusScanner.h b/libs/installer_fomod_plus/scanner/FomodPlusScanner.h
new file mode 100644
index 0000000..b7893f7
--- /dev/null
+++ b/libs/installer_fomod_plus/scanner/FomodPlusScanner.h
@@ -0,0 +1,64 @@
+#ifndef FOMODPLUSSCANNER_H
+#define FOMODPLUSSCANNER_H
+
+#include "archiveparser.h"
+
+#include <iplugin.h>
+#include <iplugintool.h>
+
+#include <QDialog>
+#include <QProgressBar>
+
+using namespace MOBase;
+
+class FomodPlusScanner final : public IPluginTool {
+ Q_OBJECT
+ Q_INTERFACES(MOBase::IPlugin MOBase::IPluginTool)
+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
+ Q_PLUGIN_METADATA(IID "io.clearing.FomodPlusScanner" FILE "fomodplusscanner.json")
+#endif
+
+public:
+ ~FomodPlusScanner() override
+ {
+ delete mDialog;
+ mDialog = nullptr;
+ mProgressBar = nullptr;
+ }
+
+ bool init(IOrganizer* organizer) override;
+
+ void onScanClicked() const;
+
+ void cleanup() const;
+
+ [[nodiscard]] QString name() const override { return "FOMOD Scanner"; } // This should not be translated
+ [[nodiscard]] QString author() const override { return "clearing"; }
+ [[nodiscard]] QString description() const override { return tr("Scans modlist for files installed via FOMOD"); }
+ [[nodiscard]] VersionInfo version() const override { return {1, 0, 0, VersionInfo::RELEASE_FINAL}; }
+
+ [[nodiscard]] QList<PluginSetting> settings() const override { return {}; }
+
+ [[nodiscard]] QString displayName() const override { return tr("FOMOD Scanner"); }
+
+ [[nodiscard]] QString tooltip() const override { return tr("Scan modlist for files installed via FOMOD"); }
+
+ [[nodiscard]] QIcon icon() const override { return QIcon(":/fomod/hat"); }
+
+ void display() const override;
+
+ int scanLoadOrder(const std::function<bool(IModInterface*, ScanResult result)> &callback) const;
+
+ ScanResult openInstallationArchive(const IModInterface* mod) const;
+
+ static bool setFomodInfoForMod(IModInterface *mod, ScanResult result);
+
+ static bool removeFomodInfoFromMod(IModInterface *mod, ScanResult);
+
+private:
+ QDialog* mDialog{ nullptr };
+ QProgressBar* mProgressBar{ nullptr };
+ IOrganizer* mOrganizer{ nullptr };
+};
+
+#endif // FOMODPLUSSCANNER_H \ No newline at end of file