diff options
| author | Mikaƫl Capelle <capelle.mikael@gmail.com> | 2024-07-28 14:39:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-28 14:39:20 +0200 |
| commit | f11925ab88cd5881c7e5dd35c40744d95b3eab2d (patch) | |
| tree | d97bf8ede38ce5b25f56a8ac4bf91bb084d3757b | |
| parent | 2395c13c25b5b93a1cf7c5f18921ff8503015834 (diff) | |
Fix FIXABLE status for ModDataChecker. (#2080)
* Fix FIXABLE status for ModDataChecker.
* Fix issue with registerFeature() without games.
| -rw-r--r-- | src/game_features.cpp | 18 | ||||
| -rw-r--r-- | src/gamefeaturesproxy.cpp | 2 |
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) |
