From fc626ced2450e128c80ceb7d3ec55343450e4ea8 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Tue, 31 Jan 2017 19:09:59 +0000 Subject: [PATCH] Add getting only masterlist metadata to the API --- include/loot/database_interface.h | 7 ++++++- src/api/api_database.cpp | 8 ++++++-- src/api/api_database.h | 3 ++- src/tests/api/database_interface_test.h | 17 +++++++++++++++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/include/loot/database_interface.h b/include/loot/database_interface.h index dee22058..77c5e41c 100644 --- a/include/loot/database_interface.h +++ b/include/loot/database_interface.h @@ -179,11 +179,16 @@ public: * @brief Get all a plugin's loaded metadata. * @param plugin * The filename of the plugin to look up metadata for. + * @param includeUserMetadata + * If true, any user metadata the plugin has is included in the + * returned metadata, otherwise the metadata returned only includes + * metadata from the masterlist. * @returns A PluginMetadata object containing all the plugin's metadata. * If the plugin has no metadata, PluginMetadata.IsNameOnly() * will return true. */ - virtual PluginMetadata GetPluginMetadata(const std::string& plugin) = 0; + virtual PluginMetadata GetPluginMetadata(const std::string& plugin, + bool includeUserMetadata = true) = 0; /** * @brief Get a plugin's metadata loaded from the given userlist. diff --git a/src/api/api_database.cpp b/src/api/api_database.cpp index ae24d41e..929ea1df 100644 --- a/src/api/api_database.cpp +++ b/src/api/api_database.cpp @@ -133,9 +133,13 @@ std::vector ApiDatabase::GetGeneralMessages() { return masterlistMessages; } -PluginMetadata ApiDatabase::GetPluginMetadata(const std::string& plugin) { +PluginMetadata ApiDatabase::GetPluginMetadata(const std::string& plugin, + bool includeUserMetadata) { PluginMetadata metadata = game_.GetMasterlist().FindPlugin(plugin); - metadata.MergeMetadata(game_.GetUserlist().FindPlugin(plugin)); + + if (includeUserMetadata) { + metadata.MergeMetadata(game_.GetUserlist().FindPlugin(plugin)); + } return metadata; } diff --git a/src/api/api_database.h b/src/api/api_database.h index 09a30a1f..0025f922 100644 --- a/src/api/api_database.h +++ b/src/api/api_database.h @@ -62,7 +62,8 @@ struct ApiDatabase : public DatabaseInterface { std::vector GetGeneralMessages(); - PluginMetadata GetPluginMetadata(const std::string& plugin); + PluginMetadata GetPluginMetadata(const std::string& plugin, + bool includeUserMetadata = true); PluginMetadata GetPluginUserMetadata(const std::string& plugin); diff --git a/src/tests/api/database_interface_test.h b/src/tests/api/database_interface_test.h index d8254808..a0181aa3 100644 --- a/src/tests/api/database_interface_test.h +++ b/src/tests/api/database_interface_test.h @@ -355,12 +355,12 @@ TEST_P(DatabaseInterfaceTest, getPluginMetadataShouldReturnAnEmptyPluginMetadata EXPECT_TRUE(metadata.HasNameOnly()); } -TEST_P(DatabaseInterfaceTest, getPluginMetadataShouldReturnMergedMasterAndUserMetadataForTheGivenPlugin) { +TEST_P(DatabaseInterfaceTest, getPluginMetadataShouldReturnMergedMasterAndUserMetadataForTheGivenPluginIfIncludeUserMetadataIsTrue) { ASSERT_NO_THROW(GenerateMasterlist()); ASSERT_NO_THROW(GenerateUserlist()); ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), userlistPath_.string())); - auto metadata = db_->GetPluginMetadata(blankEsm); + auto metadata = db_->GetPluginMetadata(blankEsm, true); std::set expectedLoadAfter({ File(masterFile), @@ -369,6 +369,19 @@ TEST_P(DatabaseInterfaceTest, getPluginMetadataShouldReturnMergedMasterAndUserMe EXPECT_EQ(expectedLoadAfter, metadata.LoadAfter()); } +TEST_P(DatabaseInterfaceTest, getPluginMetadataShouldReturnOnlyMasterlistMetadataForTheGivenPluginIfIncludeUserMetadataIsFalse) { + ASSERT_NO_THROW(GenerateMasterlist()); + ASSERT_NO_THROW(GenerateUserlist()); + ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), userlistPath_.string())); + + auto metadata = db_->GetPluginMetadata(blankEsm, false); + + std::set expectedLoadAfter({ + File(masterFile), + }); + EXPECT_EQ(expectedLoadAfter, metadata.LoadAfter()); +} + TEST_P(DatabaseInterfaceTest, getPluginUserMetadataShouldReturnAnEmptyPluginMetadataObjectIfThePluginHasNoUserMetadata) { ASSERT_NO_THROW(GenerateMasterlist()); ASSERT_NO_THROW(GenerateUserlist());