From 19e6d83da7796b9479ef49afc7dda82db3520bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Capelle?= Date: Sun, 28 Jul 2024 13:48:25 +0200 Subject: [PATCH] Fix FIXABLE status for ModDataChecker. --- src/game_features.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/game_features.cpp b/src/game_features.cpp index bc083bc80..9505c8dcb 100644 --- a/src/game_features.cpp +++ b/src/game_features.cpp @@ -45,20 +45,29 @@ class GameFeatures::CombinedModDataChecker : public ModDataChecker { 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 @@ -100,7 +109,6 @@ class GameFeatures::CombinedModDataContent : public ModDataContent std::make_move_iterator(contents.end())); // increase offset for next mod data content - offset += contents.size(); } }