mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Refactor Message -> SimpleMessage conversion
Make it a member function so that it can also be used in the GUI code.
This commit is contained in:
@@ -168,13 +168,13 @@ std::vector<SimpleMessage> ApiDatabase::GetPluginMessages(const std::string& plu
|
||||
std::vector<SimpleMessage> messages;
|
||||
|
||||
PluginMetadata pluginMetadata = game_.GetMasterlist().FindPlugin(PluginMetadata(plugin));
|
||||
for (const auto& message : pluginMetadata.Messages()) {
|
||||
messages.push_back(convertMessage(message, language));
|
||||
for (const auto& message : pluginMetadata.SimpleMessages(language)) {
|
||||
messages.push_back(message);
|
||||
}
|
||||
|
||||
pluginMetadata = game_.GetUserlist().FindPlugin(PluginMetadata(plugin));
|
||||
for (const auto& message : pluginMetadata.Messages()) {
|
||||
messages.push_back(convertMessage(message, language));
|
||||
for (const auto& message : pluginMetadata.SimpleMessages(language)) {
|
||||
messages.push_back(message);
|
||||
}
|
||||
|
||||
return messages;
|
||||
@@ -243,14 +243,4 @@ void ApiDatabase::WriteMinimalList(const std::string& outputFile, const bool ove
|
||||
out << yout.c_str();
|
||||
out.close();
|
||||
}
|
||||
SimpleMessage ApiDatabase::convertMessage(const Message& message, const LanguageCode language) {
|
||||
SimpleMessage pluginMessage;
|
||||
MessageContent content = message.GetContent(language);
|
||||
|
||||
pluginMessage.type = message.GetType();
|
||||
pluginMessage.language = content.GetLanguage();
|
||||
pluginMessage.text = content.GetText();
|
||||
|
||||
return pluginMessage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,8 +62,6 @@ struct ApiDatabase : public DatabaseInterface {
|
||||
void WriteMinimalList(const std::string& outputFile,
|
||||
const bool overwrite);
|
||||
private:
|
||||
SimpleMessage convertMessage(const Message& message, const LanguageCode language);
|
||||
|
||||
Game game_;
|
||||
|
||||
Masterlist unevaluatedMasterlist_;
|
||||
|
||||
@@ -74,6 +74,16 @@ std::vector<MessageContent> Message::GetContent() const {
|
||||
MessageContent Message::GetContent(const LanguageCode language) const {
|
||||
return MessageContent::Choose(content_, language);
|
||||
}
|
||||
SimpleMessage Message::ToSimpleMessage(const LanguageCode language) const {
|
||||
MessageContent content = GetContent(language);
|
||||
SimpleMessage simpleMessage;
|
||||
|
||||
simpleMessage.type = GetType();
|
||||
simpleMessage.language = content.GetLanguage();
|
||||
simpleMessage.text = content.GetText();
|
||||
|
||||
return simpleMessage;
|
||||
}
|
||||
}
|
||||
|
||||
namespace YAML {
|
||||
|
||||
@@ -31,10 +31,11 @@
|
||||
#include <boost/format.hpp>
|
||||
#include <yaml-cpp/yaml.h>
|
||||
|
||||
#include "loot/message_type.h"
|
||||
#include "backend/helpers/language.h"
|
||||
#include "backend/metadata/conditional_metadata.h"
|
||||
#include "backend/metadata/message_content.h"
|
||||
#include "loot/language_code.h"
|
||||
#include "loot/message_type.h"
|
||||
#include "loot/simple_message.h"
|
||||
|
||||
namespace loot {
|
||||
class Message : public ConditionalMetadata {
|
||||
@@ -51,6 +52,8 @@ public:
|
||||
MessageType GetType() const;
|
||||
std::vector<MessageContent> GetContent() const;
|
||||
MessageContent GetContent(const LanguageCode language) const;
|
||||
|
||||
SimpleMessage ToSimpleMessage(const LanguageCode language) const;
|
||||
private:
|
||||
MessageType type_;
|
||||
std::vector<MessageContent> content_;
|
||||
|
||||
@@ -301,6 +301,15 @@ std::set<Location> PluginMetadata::Locations() const {
|
||||
return locations_;
|
||||
}
|
||||
|
||||
std::list<SimpleMessage> PluginMetadata::SimpleMessages(const LanguageCode language) const {
|
||||
std::list<SimpleMessage> simpleMessages(messages_.size());
|
||||
std::transform(begin(messages_), end(messages_), begin(simpleMessages), [&](const Message& message) {
|
||||
return message.ToSimpleMessage(language);
|
||||
});
|
||||
|
||||
return simpleMessages;
|
||||
}
|
||||
|
||||
void PluginMetadata::Enabled(const bool e) {
|
||||
enabled_ = e;
|
||||
}
|
||||
|
||||
@@ -77,6 +77,8 @@ public:
|
||||
std::set<PluginCleaningData> CleanInfo() const;
|
||||
std::set<Location> Locations() const;
|
||||
|
||||
std::list<SimpleMessage> SimpleMessages(const LanguageCode language) const;
|
||||
|
||||
void Enabled(const bool enabled);
|
||||
void LocalPriority(const Priority& priority);
|
||||
void GlobalPriority(const Priority& priority);
|
||||
|
||||
@@ -139,6 +139,20 @@ TEST_P(MessageTest, getContentShouldSelectTheContentStringIfOnlyOneExists) {
|
||||
EXPECT_EQ("content1", message.GetContent(LanguageCode::english).GetText());
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, toSimpleMessageShouldSelectTextAndLanguageUsingGetContent) {
|
||||
Message message(MessageType::warn, MessageContents({
|
||||
MessageContent("content1", LanguageCode::german),
|
||||
MessageContent("content2", LanguageCode::english),
|
||||
MessageContent("content3", LanguageCode::french),
|
||||
}));
|
||||
|
||||
SimpleMessage simpleMessage = message.ToSimpleMessage(LanguageCode::french);
|
||||
|
||||
EXPECT_EQ(MessageType::warn, simpleMessage.type);
|
||||
EXPECT_EQ("content3", simpleMessage.text);
|
||||
EXPECT_EQ(LanguageCode::french, simpleMessage.language);
|
||||
}
|
||||
|
||||
TEST_P(MessageTest, emittingAsYamlShouldOutputNoteMessageTypeCorrectly) {
|
||||
Message message(MessageType::say, "content1");
|
||||
YAML::Emitter emitter;
|
||||
|
||||
@@ -634,6 +634,28 @@ TEST_P(PluginMetadataTest, newMetadataShouldOutputLocationsThatAreNotCommonToBot
|
||||
EXPECT_EQ(std::set<Location>({location2}), newMetadata.Locations());
|
||||
}
|
||||
|
||||
TEST_P(PluginMetadataTest, simpleMessagesShouldReturnMessagesAsSimpleMessages) {
|
||||
PluginMetadata plugin;
|
||||
plugin.Messages({
|
||||
Message(MessageType::say, "content1"),
|
||||
Message(MessageType::warn, {{"content2",LanguageCode::french}, {"other content2", LanguageCode::english}}),
|
||||
Message(MessageType::error, "content3"),
|
||||
});
|
||||
|
||||
auto simpleMessages = plugin.SimpleMessages(LanguageCode::french);
|
||||
|
||||
EXPECT_EQ(3, simpleMessages.size());
|
||||
EXPECT_EQ(MessageType::say, simpleMessages.front().type);
|
||||
EXPECT_EQ(LanguageCode::english, simpleMessages.front().language);
|
||||
EXPECT_EQ("content1", simpleMessages.front().text);
|
||||
EXPECT_EQ(MessageType::warn, (++simpleMessages.begin())->type);
|
||||
EXPECT_EQ(LanguageCode::french, (++simpleMessages.begin())->language);
|
||||
EXPECT_EQ("content2", (++simpleMessages.begin())->text);
|
||||
EXPECT_EQ(MessageType::error, simpleMessages.back().type);
|
||||
EXPECT_EQ(LanguageCode::english, simpleMessages.back().language);
|
||||
EXPECT_EQ("content3", simpleMessages.back().text);
|
||||
}
|
||||
|
||||
TEST_P(PluginMetadataTest, evalAllConditionsShouldEvaluateAllMetadataConditions) {
|
||||
Game game(GetParam());
|
||||
game.SetGamePath(dataPath.parent_path());
|
||||
|
||||
Reference in New Issue
Block a user