diff --git a/include/loot/database_interface.h b/include/loot/database_interface.h index f727ecf6..fd0eb908 100644 --- a/include/loot/database_interface.h +++ b/include/loot/database_interface.h @@ -224,47 +224,6 @@ public: */ virtual void DiscardAllUserMetadata() = 0; - /** - * @deprecated - * @brief Outputs the Bash Tags suggested for addition and removal by the - * database for the given plugin. - * @param plugin - * The filename of the plugin to look up Bash Tag suggestions for. - * @returns Bash Tag data for the plugin. - */ - virtual PluginTags GetPluginTags(const std::string& plugin) const = 0; - - /** - * @deprecated - * @brief Outputs the messages associated with the given plugin in the - * database. - * @param plugin - * The filename of the plugin to look up messages for. - * @param language - * The language to use when choosing which message content strings - * to return. - * @returns A vector of messages associated with the specified plugin. Empty - * if the plugin has no messages associated with it. - */ - virtual std::vector GetPluginMessages(const std::string& plugin, - const LanguageCode language) const = 0; - - /** - * @deprecated - * @brief Determines the database's knowledge of a plugin's cleanliness. - * @details Outputs whether the plugin should be cleaned or not, or if - * no data is available. The mechanism used to determine that - * a plugin should not be cleaned is not very reliable, and is - * likely to fail if `EvalLists()` was called with a - * language other than English. As such, some plugins that should - * not be cleaned may have the `PluginCleanliness::unknown` - * code outputted. - * @param plugin - * The plugin to look up the cleanliness state for. - * @returns A plugin cleanliness code. - */ - virtual PluginCleanliness GetPluginCleanliness(const std::string& plugin) const = 0; - /** @} */ }; } diff --git a/src/api/api_database.cpp b/src/api/api_database.cpp index d4389480..af045fdd 100644 --- a/src/api/api_database.cpp +++ b/src/api/api_database.cpp @@ -111,6 +111,10 @@ MasterlistInfo ApiDatabase::GetMasterlistRevision(const std::string& masterlistP return Masterlist::GetInfo(masterlistPath, getShortID); } +////////////////////////// +// DB Access Functions +////////////////////////// + std::set ApiDatabase::GetKnownBashTags() const { auto masterlistTags = game_.GetMasterlist().BashTags(); auto userlistTags = game_.GetUserlist().BashTags(); @@ -161,80 +165,6 @@ void ApiDatabase::DiscardAllUserMetadata() { game_.GetUserlist().Clear(); } -////////////////////////// -// DB Access Functions -////////////////////////// - -PluginTags ApiDatabase::GetPluginTags(const std::string& plugin) const { - PluginTags tags; - - PluginMetadata pluginMetadata = game_.GetMasterlist().FindPlugin(PluginMetadata(plugin)); - for (const auto &tag : pluginMetadata.Tags()) { - if (tag.IsAddition()) - tags.added.insert(tag.Name()); - else - tags.removed.insert(tag.Name()); - } - - pluginMetadata = game_.GetUserlist().FindPlugin(PluginMetadata(plugin)); - tags.userlist_modified = !pluginMetadata.Tags().empty(); - for (const auto &tag : pluginMetadata.Tags()) { - if (tag.IsAddition()) - tags.added.insert(tag.Name()); - else - tags.removed.insert(tag.Name()); - } - - return tags; -} - -std::vector ApiDatabase::GetPluginMessages(const std::string& plugin, - const LanguageCode language) const { - std::vector messages; - - PluginMetadata pluginMetadata = game_.GetMasterlist().FindPlugin(PluginMetadata(plugin)); - for (const auto& message : pluginMetadata.SimpleMessages(language)) { - messages.push_back(message); - } - - pluginMetadata = game_.GetUserlist().FindPlugin(PluginMetadata(plugin)); - for (const auto& message : pluginMetadata.SimpleMessages(language)) { - messages.push_back(message); - } - - return messages; -} - -PluginCleanliness ApiDatabase::GetPluginCleanliness(const std::string& plugin) const { - // Is there any dirty info? Testing for applicability happens in loot_eval_lists(). - if (!game_.GetMasterlist().FindPlugin(PluginMetadata(plugin)).DirtyInfo().empty() - || !game_.GetUserlist().FindPlugin(PluginMetadata(plugin)).DirtyInfo().empty()) { - return PluginCleanliness::dirty; - } - - // Is there a message beginning with the substring "Do not clean."? - // This isn't a very reliable system, because if the lists have been evaluated in some language - // other than English, the strings will be in different languages (and the API can't tell what they'd be) - // and the strings may be non-standard and begin with something other than "Do not clean." anyway. - std::vector messages(game_.GetMasterlist().FindPlugin(PluginMetadata(plugin)).Messages()); - - for (const auto& message : messages) { - if (boost::starts_with(message.GetContent(LanguageCode::english).GetText(), "Do not clean")) { - return PluginCleanliness::do_not_clean; - } - } - - messages = game_.GetUserlist().FindPlugin(PluginMetadata(plugin)).Messages(); - - for (const auto& message : messages) { - if (boost::starts_with(message.GetContent(LanguageCode::english).GetText(), "Do not clean")) { - return PluginCleanliness::do_not_clean; - } - } - - return PluginCleanliness::unknown; -} - // Writes a minimal masterlist that only contains mods that have Bash Tag suggestions, // and/or dirty messages, plus the Tag suggestions and/or messages themselves and their // conditions, in order to create the Wrye Bash taglist. outputFile is the path to use diff --git a/src/api/api_database.h b/src/api/api_database.h index fdd28b52..8247e501 100644 --- a/src/api/api_database.h +++ b/src/api/api_database.h @@ -72,13 +72,6 @@ struct ApiDatabase : public DatabaseInterface { void DiscardPluginUserMetadata(const std::string& plugin); void DiscardAllUserMetadata(); - - PluginTags GetPluginTags(const std::string& plugin) const; - - std::vector GetPluginMessages(const std::string& plugin, - const LanguageCode language) const; - - PluginCleanliness GetPluginCleanliness(const std::string& plugin) const; private: Game& game_; diff --git a/src/tests/api/interface/database_interface_test.h b/src/tests/api/interface/database_interface_test.h index 5aee2001..ccddbb78 100644 --- a/src/tests/api/interface/database_interface_test.h +++ b/src/tests/api/interface/database_interface_test.h @@ -551,159 +551,6 @@ TEST_P(DatabaseInterfaceTest, discardAllUserMetadataShouldDiscardAllUserMetadata EXPECT_EQ(expectedTags, tags); } -TEST_P(DatabaseInterfaceTest, getPluginTagsShouldReturnOkAndOutputEmptyNonModifiedArraysIfAPluginWithoutTagsIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - PluginTags tags; - EXPECT_NO_THROW(tags = db_->GetPluginTags(blankEsp)); - - EXPECT_TRUE(tags.added.empty()); - EXPECT_TRUE(tags.removed.empty()); - EXPECT_FALSE(tags.userlist_modified); -} - -TEST_P(DatabaseInterfaceTest, getPluginTagsShouldReturnOkAndNonEmptyNonModifiedArraysIfAPluginWithTagsIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - PluginTags tags; - EXPECT_NO_THROW(tags = db_->GetPluginTags(blankEsm)); - - EXPECT_EQ(std::set({ - "Actors.ACBS", - "Actors.AIData", - }), tags.added); - EXPECT_EQ(std::set({ - "C.Water", - }), tags.removed); - EXPECT_FALSE(tags.userlist_modified); -} - -TEST_P(DatabaseInterfaceTest, getPluginTagsShouldReturnOkAndNonEmptyModifiedArraysIfAPluginWithTagsIsQueriedAndMetadataWasAlsoLoadedFromAUserlist) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), masterlistPath.string())); - - PluginTags tags; - EXPECT_NO_THROW(tags = db_->GetPluginTags(blankEsm)); - - EXPECT_EQ(std::set({ - "Actors.ACBS", - "Actors.AIData", - }), tags.added); - EXPECT_EQ(std::set({ - "C.Water", - }), tags.removed); - EXPECT_TRUE(tags.userlist_modified); -} - -TEST_P(DatabaseInterfaceTest, getPluginTagsShouldOutputTheCorrectBashTagsForPluginsWhenMakingConsecutiveCalls) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - PluginTags tags; - EXPECT_NO_THROW(tags = db_->GetPluginTags(blankEsm)); - - EXPECT_EQ(std::set({ - "Actors.ACBS", - "Actors.AIData", - }), tags.added); - EXPECT_EQ(std::set({ - "C.Water", - }), tags.removed); - EXPECT_FALSE(tags.userlist_modified); - - EXPECT_NO_THROW(tags = db_->GetPluginTags(blankEsp)); - - EXPECT_TRUE(tags.added.empty()); - EXPECT_TRUE(tags.removed.empty()); - EXPECT_FALSE(tags.userlist_modified); -} - -TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputANullArrayIfAPluginWithNoMessagesIsQueried) { - std::vector messages; - EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsp, LanguageCode::english)); - EXPECT_TRUE(messages.empty()); -} - -TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputANoteIfAPluginWithANoteMessageIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - std::vector messages; - EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsm, LanguageCode::english)); - ASSERT_EQ(1, messages.size()); - EXPECT_EQ(MessageType::say, messages[0].type); - EXPECT_EQ(LanguageCode::english, messages[0].language); - EXPECT_EQ(noteMessage, messages[0].text); -} - -TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputAWarningIfAPluginWithAWarningMessageIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - std::vector messages; - EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsm, LanguageCode::english)); - ASSERT_EQ(1, messages.size()); - EXPECT_EQ(MessageType::warn, messages[0].type); - EXPECT_EQ(LanguageCode::english, messages[0].language); - EXPECT_EQ(warningMessage, messages[0].text); -} - -TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputAnErrorIfAPluginWithAnErrorMessageIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - std::vector messages; - EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsp, LanguageCode::english)); - ASSERT_EQ(1, messages.size()); - EXPECT_EQ(MessageType::error, messages[0].type); - EXPECT_EQ(LanguageCode::english, messages[0].language); - EXPECT_EQ(errorMessage, messages[0].text); -} - -TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputMultipleMessagesIfAPluginWithMultipleMessagesIsQueried) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - std::vector messages; - EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentMasterDependentEsp, LanguageCode::english)); - ASSERT_EQ(3, messages.size()); - EXPECT_EQ(MessageType::say, messages[0].type); - EXPECT_EQ(LanguageCode::english, messages[0].language); - EXPECT_EQ(noteMessage, messages[0].text); - EXPECT_EQ(MessageType::warn, messages[1].type); - EXPECT_EQ(LanguageCode::english, messages[1].language); - EXPECT_EQ(warningMessage, messages[1].text); - EXPECT_EQ(MessageType::error, messages[2].type); - EXPECT_EQ(LanguageCode::english, messages[2].language); - EXPECT_EQ(errorMessage, messages[2].text); -} - -TEST_P(DatabaseInterfaceTest, getPluginCleanlinessShouldReturnOkAndOutputUnknownForAPluginWithNoDirtyInfo) { - PluginCleanliness cleanliness; - EXPECT_NO_THROW(cleanliness = db_->GetPluginCleanliness(blankEsp)); - EXPECT_EQ(PluginCleanliness::unknown, cleanliness); -} - -TEST_P(DatabaseInterfaceTest, getPluginCleanlinessShouldReturnOkAndOutputYesForAPluginWithDirtyInfo) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - PluginCleanliness cleanliness; - EXPECT_NO_THROW(cleanliness = db_->GetPluginCleanliness(blankDifferentEsm)); - EXPECT_EQ(PluginCleanliness::dirty, cleanliness); -} - -TEST_P(DatabaseInterfaceTest, getPluginCleanlinessShouldReturnOkAndOutputNoForAPluginWithADoNotCleanMessage) { - ASSERT_NO_THROW(GenerateMasterlist()); - ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), "")); - - PluginCleanliness cleanliness; - EXPECT_NO_THROW(cleanliness = db_->GetPluginCleanliness(blankEsm)); - EXPECT_EQ(PluginCleanliness::do_not_clean, cleanliness); -} - TEST_P(DatabaseInterfaceTest, writeMinimalListShouldReturnOkAndWriteToFileIfArgumentsGivenAreValid) { EXPECT_NO_THROW(db_->WriteMinimalList(minimalOutputPath_.string(), false)); EXPECT_TRUE(boost::filesystem::exists(minimalOutputPath_));