Return nullopt if condition eval removes all metadata

This commit is contained in:
Oliver Hamlet
2025-05-08 17:02:02 +01:00
parent 070822f37f
commit 2a7520cbdc
4 changed files with 13 additions and 9 deletions
+5 -1
View File
@@ -119,7 +119,7 @@ bool ConditionEvaluator::Evaluate(const std::string& condition) {
return result == LCI_RESULT_TRUE;
}
PluginMetadata ConditionEvaluator::EvaluateAll(
std::optional<PluginMetadata> ConditionEvaluator::EvaluateAll(
const PluginMetadata& pluginMetadata) {
PluginMetadata evaluatedMetadata(pluginMetadata.GetName());
evaluatedMetadata.SetLocations(pluginMetadata.GetLocations());
@@ -179,6 +179,10 @@ PluginMetadata ConditionEvaluator::EvaluateAll(
evaluatedMetadata.SetCleanInfo(infoVector);
}
if (evaluatedMetadata.HasNameOnly()) {
return std::nullopt;
}
return evaluatedMetadata;
}
+2 -1
View File
@@ -44,7 +44,8 @@ public:
const std::filesystem::path& dataPath);
bool Evaluate(const std::string& condition);
PluginMetadata EvaluateAll(const PluginMetadata& pluginMetadata);
std::optional<PluginMetadata> EvaluateAll(
const PluginMetadata& pluginMetadata);
void ClearConditionCache();
void RefreshActivePluginsState(
@@ -93,16 +93,16 @@ TEST_P(GameInterfaceTest, setAdditionalDataPathsShouldClearTheConditionCache) {
handle_->GetDatabase().SetPluginUserMetadata(metadata);
auto evaluatedMetadata =
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true).value();
EXPECT_TRUE(evaluatedMetadata.GetLoadAfterFiles().empty());
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true);
EXPECT_FALSE(evaluatedMetadata.has_value());
const auto dataFilePath = gamePath.parent_path() / "Data" / "plugin.esp";
touch(dataFilePath);
handle_->SetAdditionalDataPaths({dataFilePath.parent_path()});
evaluatedMetadata =
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true).value();
EXPECT_FALSE(evaluatedMetadata.GetLoadAfterFiles().empty());
handle_->GetDatabase().GetPluginUserMetadata(blankEsm, true);
EXPECT_FALSE(evaluatedMetadata.value().GetLoadAfterFiles().empty());
}
TEST_P(GameInterfaceTest,
@@ -174,7 +174,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
plugin.SetDirtyInfo({info1, info2});
plugin.SetCleanInfo({info1, info2});
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin));
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin).value());
std::vector<File> expectedFiles({file1});
EXPECT_EQ("group1", plugin.GetGroup().value());
@@ -190,8 +190,7 @@ TEST_P(ConditionEvaluatorTest, evaluateAllShouldEvaluateAllMetadataConditions) {
TEST_P(ConditionEvaluatorTest, evaluateAllShouldPreserveGroupExplicitness) {
PluginMetadata plugin(blankEsm);
EXPECT_NO_THROW(plugin = evaluator_.EvaluateAll(plugin));
EXPECT_FALSE(plugin.GetGroup());
EXPECT_FALSE(evaluator_.EvaluateAll(plugin).has_value());
}
TEST_P(ConditionEvaluatorTest,