aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_fomod_plus/installer/integration
diff options
context:
space:
mode:
Diffstat (limited to 'libs/installer_fomod_plus/installer/integration')
-rw-r--r--libs/installer_fomod_plus/installer/integration/FomodDataContent.cpp50
-rw-r--r--libs/installer_fomod_plus/installer/integration/FomodDataContent.h21
2 files changed, 71 insertions, 0 deletions
diff --git a/libs/installer_fomod_plus/installer/integration/FomodDataContent.cpp b/libs/installer_fomod_plus/installer/integration/FomodDataContent.cpp
new file mode 100644
index 0000000..ac4508d
--- /dev/null
+++ b/libs/installer_fomod_plus/installer/integration/FomodDataContent.cpp
@@ -0,0 +1,50 @@
+#include "FomodDataContent.h"
+
+#include <ifiletree.h>
+
+#include "stringutil.h"
+
+#include <iplugingame.h>
+
+FomodDataContent::FomodDataContent(MOBase::IOrganizer* organizer) : mOrganizer(organizer)
+{
+}
+
+std::vector<MOBase::ModDataContent::Content> FomodDataContent::getAllContents() const
+{
+ static const std::vector<Content> contents = {
+ {FomodDataContentConstants::FOMOD_CONTENT_ID, "FOMOD", ":/fomod/hat", false}
+ };
+
+ return contents;
+}
+
+// Confirmed working, no need to update
+std::vector<int> FomodDataContent::getContentsFor(const std::shared_ptr<const MOBase::IFileTree> fileTree) const
+{
+ std::vector<int> contents;
+ if (!mOrganizer || !fileTree) {
+ return contents;
+ }
+
+ const auto modList = mOrganizer->modList();
+ if (!modList) {
+ return contents;
+ }
+
+ const auto mod = modList->getMod(fileTree->name());
+ if (modHasFomodContent(mod)) {
+ contents.emplace_back(FomodDataContentConstants::FOMOD_CONTENT_ID);
+ }
+ return contents;
+}
+
+bool FomodDataContent::modHasFomodContent(const MOBase::IModInterface* mod)
+{
+ if (!mod) {
+ return false;
+ }
+ const auto pluginName = QString::fromStdString(StringConstants::Plugin::NAME.data());
+ const auto fomodMeta = mod->pluginSetting(pluginName, "fomod", 0);
+ return fomodMeta != 0;
+}
diff --git a/libs/installer_fomod_plus/installer/integration/FomodDataContent.h b/libs/installer_fomod_plus/installer/integration/FomodDataContent.h
new file mode 100644
index 0000000..4ffa3d7
--- /dev/null
+++ b/libs/installer_fomod_plus/installer/integration/FomodDataContent.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <imoinfo.h>
+#include <moddatacontent.h>
+
+namespace FomodDataContentConstants {
+constexpr int FOMOD_CONTENT_ID = 400400;
+}
+
+class FomodDataContent final : public MOBase::ModDataContent {
+public:
+ explicit FomodDataContent(MOBase::IOrganizer* organizer);
+
+ [[nodiscard]] std::vector<Content> getAllContents() const override;
+
+ [[nodiscard]] std::vector<int> getContentsFor(std::shared_ptr<const MOBase::IFileTree> fileTree) const override;
+
+private:
+ MOBase::IOrganizer* mOrganizer;
+ static bool modHasFomodContent(const MOBase::IModInterface* mod);
+};