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:
Oliver Hamlet
2016-08-24 08:08:27 +01:00
parent 1292815e48
commit d439d7ac52
8 changed files with 66 additions and 18 deletions
+4 -14
View File
@@ -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;
}
}
-2
View File
@@ -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_;
+10
View File
@@ -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 {
+5 -2
View File
@@ -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_;
+9
View File
@@ -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;
}
+2
View File
@@ -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);
+14
View File
@@ -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());