From d439d7ac524f2a7744c23a854c17784a139ad2ac Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sat, 20 Aug 2016 10:43:11 +0100 Subject: [PATCH] Refactor Message -> SimpleMessage conversion Make it a member function so that it can also be used in the GUI code. --- src/api/api_database.cpp | 18 ++++----------- src/api/api_database.h | 2 -- src/backend/metadata/message.cpp | 10 +++++++++ src/backend/metadata/message.h | 7 ++++-- src/backend/metadata/plugin_metadata.cpp | 9 ++++++++ src/backend/metadata/plugin_metadata.h | 2 ++ src/tests/backend/metadata/message_test.h | 14 ++++++++++++ .../backend/metadata/plugin_metadata_test.h | 22 +++++++++++++++++++ 8 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/api/api_database.cpp b/src/api/api_database.cpp index ec957f75..b15529cc 100644 --- a/src/api/api_database.cpp +++ b/src/api/api_database.cpp @@ -168,13 +168,13 @@ std::vector ApiDatabase::GetPluginMessages(const std::string& plu std::vector 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; -} } diff --git a/src/api/api_database.h b/src/api/api_database.h index 42e2ac12..f7e8d24e 100644 --- a/src/api/api_database.h +++ b/src/api/api_database.h @@ -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_; diff --git a/src/backend/metadata/message.cpp b/src/backend/metadata/message.cpp index 6e83c7f6..16d38d79 100644 --- a/src/backend/metadata/message.cpp +++ b/src/backend/metadata/message.cpp @@ -74,6 +74,16 @@ std::vector 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 { diff --git a/src/backend/metadata/message.h b/src/backend/metadata/message.h index 40340990..cf30814d 100644 --- a/src/backend/metadata/message.h +++ b/src/backend/metadata/message.h @@ -31,10 +31,11 @@ #include #include -#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 GetContent() const; MessageContent GetContent(const LanguageCode language) const; + + SimpleMessage ToSimpleMessage(const LanguageCode language) const; private: MessageType type_; std::vector content_; diff --git a/src/backend/metadata/plugin_metadata.cpp b/src/backend/metadata/plugin_metadata.cpp index 0ddd035f..3cd11c07 100644 --- a/src/backend/metadata/plugin_metadata.cpp +++ b/src/backend/metadata/plugin_metadata.cpp @@ -301,6 +301,15 @@ std::set PluginMetadata::Locations() const { return locations_; } +std::list PluginMetadata::SimpleMessages(const LanguageCode language) const { + std::list 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; } diff --git a/src/backend/metadata/plugin_metadata.h b/src/backend/metadata/plugin_metadata.h index f7e32b47..9f7afa60 100644 --- a/src/backend/metadata/plugin_metadata.h +++ b/src/backend/metadata/plugin_metadata.h @@ -77,6 +77,8 @@ public: std::set CleanInfo() const; std::set Locations() const; + std::list SimpleMessages(const LanguageCode language) const; + void Enabled(const bool enabled); void LocalPriority(const Priority& priority); void GlobalPriority(const Priority& priority); diff --git a/src/tests/backend/metadata/message_test.h b/src/tests/backend/metadata/message_test.h index 45964969..c5748d64 100644 --- a/src/tests/backend/metadata/message_test.h +++ b/src/tests/backend/metadata/message_test.h @@ -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; diff --git a/src/tests/backend/metadata/plugin_metadata_test.h b/src/tests/backend/metadata/plugin_metadata_test.h index e481db97..9067e574 100644 --- a/src/tests/backend/metadata/plugin_metadata_test.h +++ b/src/tests/backend/metadata/plugin_metadata_test.h @@ -634,6 +634,28 @@ TEST_P(PluginMetadataTest, newMetadataShouldOutputLocationsThatAreNotCommonToBot EXPECT_EQ(std::set({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());