mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Specify language in DatabaseInterface::GetPluginMessages
This can be useful if getting messages before metadata evaluation and a non-English string is wanted.
This commit is contained in:
@@ -170,10 +170,16 @@ public:
|
||||
* 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. This has no effect if `EvalLists` has been called,
|
||||
* as it selects content strings, discarding non-selected strings,
|
||||
* during its operation.
|
||||
* @returns A vector of messages associated with the specified plugin. Empty
|
||||
* if the plugin has no messages associated with it.
|
||||
*/
|
||||
virtual std::vector<PluginMessage> GetPluginMessages(const std::string& plugin) = 0;
|
||||
virtual std::vector<PluginMessage> GetPluginMessages(const std::string& plugin,
|
||||
const LanguageCode language) = 0;
|
||||
|
||||
/**
|
||||
* @brief Determines the database's knowledge of a plugin's cleanliness.
|
||||
|
||||
@@ -163,14 +163,15 @@ PluginTags ApiDatabase::GetPluginTags(const std::string& plugin) {
|
||||
return tags;
|
||||
}
|
||||
|
||||
std::vector<PluginMessage> ApiDatabase::GetPluginMessages(const std::string& plugin) {
|
||||
std::vector<PluginMessage> ApiDatabase::GetPluginMessages(const std::string& plugin,
|
||||
const LanguageCode language) {
|
||||
std::vector<PluginMessage> messages;
|
||||
|
||||
PluginMetadata pluginMetadata = game_.GetMasterlist().FindPlugin(PluginMetadata(plugin));
|
||||
for (const auto& message : pluginMetadata.Messages()) {
|
||||
PluginMessage pluginMessage;
|
||||
pluginMessage.type = message.GetType();
|
||||
pluginMessage.text = message.GetText();
|
||||
pluginMessage.text = message.GetContent(language).GetText();
|
||||
messages.push_back(pluginMessage);
|
||||
}
|
||||
|
||||
@@ -178,7 +179,7 @@ std::vector<PluginMessage> ApiDatabase::GetPluginMessages(const std::string& plu
|
||||
for (const auto& message : pluginMetadata.Messages()) {
|
||||
PluginMessage pluginMessage;
|
||||
pluginMessage.type = message.GetType();
|
||||
pluginMessage.text = message.GetText();
|
||||
pluginMessage.text = message.GetContent(language).GetText();
|
||||
messages.push_back(pluginMessage);
|
||||
}
|
||||
|
||||
@@ -199,7 +200,7 @@ PluginCleanliness ApiDatabase::GetPluginCleanliness(const std::string& plugin) {
|
||||
std::list<Message> messages(game_.GetMasterlist().FindPlugin(PluginMetadata(plugin)).Messages());
|
||||
|
||||
for (const auto& message : messages) {
|
||||
if (boost::starts_with(message.GetText(), "Do not clean")) {
|
||||
if (boost::starts_with(message.GetContent(LanguageCode::english).GetText(), "Do not clean")) {
|
||||
return PluginCleanliness::do_not_clean;
|
||||
}
|
||||
}
|
||||
@@ -207,7 +208,7 @@ PluginCleanliness ApiDatabase::GetPluginCleanliness(const std::string& plugin) {
|
||||
messages = game_.GetUserlist().FindPlugin(PluginMetadata(plugin)).Messages();
|
||||
|
||||
for (const auto& message : messages) {
|
||||
if (boost::starts_with(message.GetText(), "Do not clean")) {
|
||||
if (boost::starts_with(message.GetContent(LanguageCode::english).GetText(), "Do not clean")) {
|
||||
return PluginCleanliness::do_not_clean;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,8 @@ struct ApiDatabase : public DatabaseInterface {
|
||||
|
||||
PluginTags GetPluginTags(const std::string& plugin);
|
||||
|
||||
std::vector<PluginMessage> GetPluginMessages(const std::string& plugin);
|
||||
std::vector<PluginMessage> GetPluginMessages(const std::string& plugin,
|
||||
const LanguageCode language);
|
||||
|
||||
PluginCleanliness GetPluginCleanliness(const std::string& plugin);
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ Message::Message(const MessageType type, const std::vector<MessageContent>& cont
|
||||
|
||||
bool Message::operator < (const Message& rhs) const {
|
||||
if (!content_.empty() && !rhs.GetContent().empty())
|
||||
return boost::ilexicographical_compare(ChooseContent(LanguageCode::english).GetText(), rhs.ChooseContent(LanguageCode::english).GetText());
|
||||
return boost::ilexicographical_compare(GetContent(LanguageCode::english).GetText(), rhs.GetContent(LanguageCode::english).GetText());
|
||||
else if (content_.empty() && !rhs.GetContent().empty())
|
||||
return true;
|
||||
else
|
||||
@@ -66,27 +66,21 @@ bool Message::operator == (const Message& rhs) const {
|
||||
|
||||
bool Message::EvalCondition(loot::Game& game, const LanguageCode language) {
|
||||
BOOST_LOG_TRIVIAL(trace) << "Choosing message content for language: " << Language(language).GetName();
|
||||
content_.assign({ChooseContent(language)});
|
||||
content_.assign({GetContent(language)});
|
||||
|
||||
return ConditionalMetadata::EvalCondition(game);
|
||||
}
|
||||
|
||||
MessageContent Message::ChooseContent(const LanguageCode language) const {
|
||||
BOOST_LOG_TRIVIAL(trace) << "Choosing message content.";
|
||||
return MessageContent::Choose(content_, language);
|
||||
}
|
||||
|
||||
MessageType Message::GetType() const {
|
||||
return type_;
|
||||
}
|
||||
|
||||
std::string Message::GetText() const {
|
||||
return ChooseContent(LanguageCode::english).GetText();
|
||||
}
|
||||
|
||||
std::vector<MessageContent> Message::GetContent() const {
|
||||
return content_;
|
||||
}
|
||||
MessageContent Message::GetContent(const LanguageCode language) const {
|
||||
return MessageContent::Choose(content_, language);
|
||||
}
|
||||
}
|
||||
|
||||
namespace YAML {
|
||||
|
||||
@@ -53,11 +53,9 @@ public:
|
||||
bool EvalCondition(Game& game, const LanguageCode language);
|
||||
|
||||
MessageType GetType() const;
|
||||
std::string GetText() const;
|
||||
std::vector<MessageContent> GetContent() const;
|
||||
MessageContent GetContent(const LanguageCode language) const;
|
||||
private:
|
||||
MessageContent ChooseContent(const LanguageCode language) const;
|
||||
|
||||
MessageType type_;
|
||||
std::vector<MessageContent> content_;
|
||||
};
|
||||
|
||||
@@ -350,7 +350,7 @@ TEST_P(DatabaseInterfaceTest, getPluginTagsShouldOutputTheCorrectBashTagsForPlug
|
||||
|
||||
TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputANullArrayIfAPluginWithNoMessagesIsQueried) {
|
||||
std::vector<PluginMessage> messages;
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsp));
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsp, LanguageCode::english));
|
||||
EXPECT_TRUE(messages.empty());
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputANoteIfAPl
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
|
||||
|
||||
std::vector<PluginMessage> messages;
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsm));
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankEsm, LanguageCode::english));
|
||||
ASSERT_EQ(1, messages.size());
|
||||
EXPECT_EQ(MessageType::say, messages[0].type);
|
||||
EXPECT_EQ(noteMessage, messages[0].text);
|
||||
@@ -370,7 +370,7 @@ TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputAWarningIf
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
|
||||
|
||||
std::vector<PluginMessage> messages;
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsm));
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsm, LanguageCode::english));
|
||||
ASSERT_EQ(1, messages.size());
|
||||
EXPECT_EQ(MessageType::warn, messages[0].type);
|
||||
EXPECT_EQ(warningMessage, messages[0].text);
|
||||
@@ -381,7 +381,7 @@ TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputAnErrorIfA
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
|
||||
|
||||
std::vector<PluginMessage> messages;
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsp));
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentEsp, LanguageCode::english));
|
||||
ASSERT_EQ(1, messages.size());
|
||||
EXPECT_EQ(MessageType::error, messages[0].type);
|
||||
EXPECT_EQ(errorMessage, messages[0].text);
|
||||
@@ -392,7 +392,7 @@ TEST_P(DatabaseInterfaceTest, getPluginMessagesShouldReturnOkAndOutputMultipleMe
|
||||
ASSERT_NO_THROW(db_->LoadLists(masterlistPath.string(), ""));
|
||||
|
||||
std::vector<PluginMessage> messages;
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentMasterDependentEsp));
|
||||
EXPECT_NO_THROW(messages = db_->GetPluginMessages(blankDifferentMasterDependentEsp, LanguageCode::english));
|
||||
ASSERT_EQ(3, messages.size());
|
||||
EXPECT_EQ(MessageType::say, messages[0].type);
|
||||
EXPECT_EQ(noteMessage, messages[0].text);
|
||||
|
||||
@@ -158,7 +158,7 @@ TEST_P(MessageTest, evalConditionShouldSelectTheEnglishStringIfNoStringExistsFor
|
||||
EXPECT_EQ(MessageContents({content}), message.GetContent());
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, getTextShouldSelectTheEnglishStringIfThereAreMultipleContentStrings) {
|
||||
TEST_P(MessageTest, getContentShouldSelectTheEnglishStringIfThereIsNoStringForTheGivenLanguage) {
|
||||
Game game(GetParam());
|
||||
game.SetGamePath(dataPath.parent_path());
|
||||
ASSERT_NO_THROW(game.Init(false, localPath));
|
||||
@@ -169,7 +169,21 @@ TEST_P(MessageTest, getTextShouldSelectTheEnglishStringIfThereAreMultipleContent
|
||||
MessageContent("content3", LanguageCode::french),
|
||||
}));
|
||||
|
||||
EXPECT_EQ("content2", message.GetText());
|
||||
EXPECT_EQ("content2", message.GetContent(LanguageCode::korean).GetText());
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, getContentShouldSelectTheGivenLanguageStringIfItExists) {
|
||||
Game game(GetParam());
|
||||
game.SetGamePath(dataPath.parent_path());
|
||||
ASSERT_NO_THROW(game.Init(false, localPath));
|
||||
|
||||
Message message(MessageType::say, MessageContents({
|
||||
MessageContent("content1", LanguageCode::german),
|
||||
MessageContent("content2", LanguageCode::english),
|
||||
MessageContent("content3", LanguageCode::french),
|
||||
}));
|
||||
|
||||
EXPECT_EQ("content3", message.GetContent(LanguageCode::french).GetText());
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, getTextShouldSelectTheContentStringIfOnlyOneExists) {
|
||||
@@ -181,7 +195,7 @@ TEST_P(MessageTest, getTextShouldSelectTheContentStringIfOnlyOneExists) {
|
||||
MessageContent("content1", LanguageCode::german),
|
||||
}));
|
||||
|
||||
EXPECT_EQ("content1", message.GetText());
|
||||
EXPECT_EQ("content1", message.GetContent(LanguageCode::english).GetText());
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, emittingAsYamlShouldOutputNoteMessageTypeCorrectly) {
|
||||
|
||||
@@ -71,35 +71,35 @@ TEST_P(PluginCleaningDataTest, contentConstructorShouldStoreAllGivenData) {
|
||||
TEST_P(PluginCleaningDataTest, asMessageShouldOutputAllNonZeroCounts) {
|
||||
Message message = PluginCleaningData(0x12345678, "cleaner", info_, 2, 10, 30).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 2 ITM records, 10 deleted references and 30 deleted navmeshes. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 2 ITM records, 10 deleted references and 30 deleted navmeshes. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 0, 0, 0).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found dirty edits. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found dirty edits. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 0, 10, 30).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 10 deleted references and 30 deleted navmeshes. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 10 deleted references and 30 deleted navmeshes. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 0, 0, 30).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 30 deleted navmeshes. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 30 deleted navmeshes. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 0, 10, 0).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 10 deleted references. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 10 deleted references. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 2, 0, 30).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 2 ITM records and 30 deleted navmeshes. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 2 ITM records and 30 deleted navmeshes. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 2, 0, 0).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 2 ITM records. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 2 ITM records. info", message.GetContent(LanguageCode::english).GetText());
|
||||
|
||||
message = PluginCleaningData(0x12345678, "cleaner", info_, 2, 10, 0).AsMessage();
|
||||
EXPECT_EQ(MessageType::warn, message.GetType());
|
||||
EXPECT_EQ("cleaner found 2 ITM records and 10 deleted references. info", message.GetText());
|
||||
EXPECT_EQ("cleaner found 2 ITM records and 10 deleted references. info", message.GetContent(LanguageCode::english).GetText());
|
||||
}
|
||||
|
||||
TEST_P(PluginCleaningDataTest, dirtyInfoShouldBeEqualIfCrcValuesAreEqual) {
|
||||
|
||||
Reference in New Issue
Block a user