summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaƫl Capelle <capelle.mikael@gmail.com>2024-07-28 14:39:20 +0200
committerGitHub <noreply@github.com>2024-07-28 14:39:20 +0200
commitf11925ab88cd5881c7e5dd35c40744d95b3eab2d (patch)
treed97bf8ede38ce5b25f56a8ac4bf91bb084d3757b
parent2395c13c25b5b93a1cf7c5f18921ff8503015834 (diff)
Fix FIXABLE status for ModDataChecker. (#2080)
* Fix FIXABLE status for ModDataChecker. * Fix issue with registerFeature() without games.
-rw-r--r--src/game_features.cpp18
-rw-r--r--src/gamefeaturesproxy.cpp2
2 files changed, 14 insertions, 6 deletions
diff --git a/src/game_features.cpp b/src/game_features.cpp
index bc083bc8..9505c8dc 100644
--- a/src/game_features.cpp
+++ b/src/game_features.cpp
@@ -45,20 +45,29 @@ public:
{
m_fixer = nullptr;
- for (auto& modDataChecker : m_modDataCheckers) {
+ // go through the available mod-data checker, if any returns valid, we also
+ // return valid, otherwise, return the first one that is fixable
+ for (const auto& modDataChecker : m_modDataCheckers) {
auto check = modDataChecker->dataLooksValid(fileTree);
switch (check) {
case CheckReturn::FIXABLE:
- m_fixer = modDataChecker;
- [[fallthrough]];
+ // only update fixer if there is not one with higher priority
+ if (!m_fixer) {
+ m_fixer = modDataChecker;
+ }
+ break;
case CheckReturn::VALID:
+ // clear fixer if one were found before and return VALID, not mandatory
+ // but cleaner
+ m_fixer = nullptr;
return CheckReturn::VALID;
case CheckReturn::INVALID:
break;
}
}
- return CheckReturn::INVALID;
+
+ return m_fixer ? CheckReturn::FIXABLE : CheckReturn::INVALID;
}
std::shared_ptr<MOBase::IFileTree>
@@ -100,7 +109,6 @@ public:
std::make_move_iterator(contents.end()));
// increase offset for next mod data content
-
offset += contents.size();
}
}
diff --git a/src/gamefeaturesproxy.cpp b/src/gamefeaturesproxy.cpp
index 3adac353..1c833a2f 100644
--- a/src/gamefeaturesproxy.cpp
+++ b/src/gamefeaturesproxy.cpp
@@ -28,7 +28,7 @@ bool GameFeaturesProxy::registerFeature(MOBase::IPluginGame* game,
bool GameFeaturesProxy::registerFeature(std::shared_ptr<MOBase::GameFeature> feature,
int priority, bool replace)
{
- return registerFeature({}, feature, priority, replace);
+ return registerFeature(QStringList(), feature, priority, replace);
}
bool GameFeaturesProxy::unregisterFeature(std::shared_ptr<MOBase::GameFeature> feature)