summaryrefslogtreecommitdiffstats
path: root/src/CompositeChat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/CompositeChat.cpp')
-rw-r--r--src/CompositeChat.cpp266
1 files changed, 143 insertions, 123 deletions
diff --git a/src/CompositeChat.cpp b/src/CompositeChat.cpp
index 94ed78197..3a676c23b 100644
--- a/src/CompositeChat.cpp
+++ b/src/CompositeChat.cpp
@@ -45,16 +45,20 @@ void cCompositeChat::Clear(void)
void cCompositeChat::AddTextPart(const AString & a_Message, const AString & a_Style)
{
- m_Parts.push_back(TextPart{{ a_Message, a_Style, {} } });
+ m_Parts.push_back(TextPart {{a_Message, a_Style, {}}});
}
-void cCompositeChat::AddClientTranslatedPart(const AString & a_TranslationID, const AStringVector & a_Parameters, const AString & a_Style)
+void cCompositeChat::AddClientTranslatedPart(
+ const AString & a_TranslationID,
+ const AStringVector & a_Parameters,
+ const AString & a_Style
+)
{
- m_Parts.push_back(ClientTranslatedPart{{ a_TranslationID, a_Style, {} }, a_Parameters });
+ m_Parts.push_back(ClientTranslatedPart {{a_TranslationID, a_Style, {}}, a_Parameters});
}
@@ -63,7 +67,7 @@ void cCompositeChat::AddClientTranslatedPart(const AString & a_TranslationID, co
void cCompositeChat::AddUrlPart(const AString & a_Text, const AString & a_Url, const AString & a_Style)
{
- m_Parts.push_back(UrlPart{{ a_Text, a_Style, {} }, a_Url });
+ m_Parts.push_back(UrlPart {{a_Text, a_Style, {}}, a_Url});
}
@@ -72,38 +76,46 @@ void cCompositeChat::AddUrlPart(const AString & a_Text, const AString & a_Url, c
void cCompositeChat::AddRunCommandPart(const AString & a_Text, const AString & a_Command, const AString & a_Style)
{
- m_Parts.push_back(RunCommandPart{{{ a_Text, a_Style, {} }, a_Command } });
+ m_Parts.push_back(RunCommandPart {{{a_Text, a_Style, {}}, a_Command}});
}
-void cCompositeChat::AddSuggestCommandPart(const AString & a_Text, const AString & a_SuggestedCommand, const AString & a_Style)
+void cCompositeChat::AddSuggestCommandPart(
+ const AString & a_Text,
+ const AString & a_SuggestedCommand,
+ const AString & a_Style
+)
{
- m_Parts.push_back(SuggestCommandPart{{{ a_Text, a_Style, {} }, a_SuggestedCommand } });
+ m_Parts.push_back(SuggestCommandPart {{{a_Text, a_Style, {}}, a_SuggestedCommand}});
}
-void cCompositeChat::AddShowAchievementPart(const AString & a_PlayerName, const AString & a_Achievement, const AString & a_Style)
+void cCompositeChat::AddShowAchievementPart(
+ const AString & a_PlayerName,
+ const AString & a_Achievement,
+ const AString & a_Style
+)
{
- m_Parts.push_back(ShowAchievementPart{{ a_Achievement, a_Style, {} }, a_PlayerName });
+ m_Parts.push_back(ShowAchievementPart {{a_Achievement, a_Style, {}}, a_PlayerName});
}
/**
-* Parse the input message to add colors or link then add it to the object.
-*
-* It detects every & of the message and the next character for it to colorize.
-* It detect : in the text to detect link structures.
-*
-* @param a_ParseText The input text to parse
-*/
+ * Parse the input message to add colors or link then add it to the object.
+ *
+ * It detects every & of the message and the next character for it to colorize.
+ * It detect : in the text to detect link structures.
+ *
+ * @param a_ParseText The input text to parse
+ */
void cCompositeChat::ParseText(const AString & a_ParseText)
{
size_t len = a_ParseText.length();
@@ -117,7 +129,7 @@ void cCompositeChat::ParseText(const AString & a_ParseText)
{
case '&': //< Color code
{
- if ((i != 0) && (a_ParseText[i-1] == '\\'))
+ if ((i != 0) && (a_ParseText[i - 1] == '\\'))
{
CurrentText.append(a_ParseText, cursor, i - cursor - 1).append("&");
AddTextPart(CurrentText, CurrentStyle);
@@ -148,26 +160,20 @@ void cCompositeChat::ParseText(const AString & a_ParseText)
case ':':
{
- static const constexpr std::array<std::string_view, 2> LinkPrefixes =
- {
- {
- "http",
- "https"
- }
- };
+ static const constexpr std::array<std::string_view, 2> LinkPrefixes = {{"http", "https"}};
for (const auto & Prefix : LinkPrefixes)
{
size_t PrefixLen = Prefix.size();
- if (
- (i >= cursor + PrefixLen) && // There is enough space in front of the colon for the prefix
- (std::string_view(a_ParseText).substr(i - PrefixLen, PrefixLen) == Prefix) // the prefix matches
+ if ((i >= cursor + PrefixLen) && // There is enough space in front of the colon for the prefix
+ (std::string_view(a_ParseText).substr(i - PrefixLen, PrefixLen) == Prefix
+ ) // the prefix matches
)
{
// Add everything before this as a text part:
- if (i > cursor+ PrefixLen)
+ if (i > cursor + PrefixLen)
{
CurrentText.append(a_ParseText.c_str() + cursor, i - cursor - PrefixLen);
- cursor= i - PrefixLen;
+ cursor = i - PrefixLen;
}
if (!CurrentText.empty())
{
@@ -183,7 +189,11 @@ void cCompositeChat::ParseText(const AString & a_ParseText)
break;
}
}
- AddUrlPart(a_ParseText.substr(cursor, i - cursor), a_ParseText.substr(cursor, i - cursor), CurrentStyle);
+ AddUrlPart(
+ a_ParseText.substr(cursor, i - cursor),
+ a_ParseText.substr(cursor, i - cursor),
+ CurrentStyle
+ );
cursor = i;
break;
}
@@ -218,15 +228,17 @@ void cCompositeChat::UnderlineUrls(void)
{
for (auto & Part : m_Parts)
{
- std::visit(OverloadedVariantAccess
- {
- [](TextPart & a_Part) { },
- [](ClientTranslatedPart & a_Part) { },
- [](UrlPart & a_Part) { a_Part.Style += 'n'; },
- [](RunCommandPart & a_Part) { },
- [](SuggestCommandPart & a_Part) { },
- [](ShowAchievementPart & a_Part) { },
- }, Part);
+ std::visit(
+ OverloadedVariantAccess {
+ [](TextPart & a_Part) {},
+ [](ClientTranslatedPart & a_Part) {},
+ [](UrlPart & a_Part) { a_Part.Style += 'n'; },
+ [](RunCommandPart & a_Part) {},
+ [](SuggestCommandPart & a_Part) {},
+ [](ShowAchievementPart & a_Part) {},
+ },
+ Part
+ );
}
}
@@ -239,15 +251,17 @@ AString cCompositeChat::ExtractText(void) const
AString Msg;
for (const auto & Part : m_Parts)
{
- std::visit(OverloadedVariantAccess
- {
- [&Msg](const TextPart & a_Part) { Msg.append(a_Part.Text); },
- [&Msg](const ClientTranslatedPart & a_Part) { Msg.append(a_Part.Text); },
- [&Msg](const UrlPart & a_Part) { Msg.append(a_Part.Url); },
- [&Msg](const RunCommandPart & a_Part) { Msg.append(a_Part.Text); },
- [&Msg](const SuggestCommandPart & a_Part) { Msg.append(a_Part.Text); },
- [ ](const ShowAchievementPart & a_Part) { },
- }, Part);
+ std::visit(
+ OverloadedVariantAccess {
+ [&Msg](const TextPart & a_Part) { Msg.append(a_Part.Text); },
+ [&Msg](const ClientTranslatedPart & a_Part) { Msg.append(a_Part.Text); },
+ [&Msg](const UrlPart & a_Part) { Msg.append(a_Part.Url); },
+ [&Msg](const RunCommandPart & a_Part) { Msg.append(a_Part.Text); },
+ [&Msg](const SuggestCommandPart & a_Part) { Msg.append(a_Part.Text); },
+ [](const ShowAchievementPart & a_Part) {},
+ },
+ Part
+ );
}
return Msg;
}
@@ -270,7 +284,7 @@ eLogLevel cCompositeChat::MessageTypeToLogLevel(eMessageType a_MessageType)
case mtPrivateMessage: return eLogLevel::Regular;
case mtJoin: return eLogLevel::Regular;
case mtLeave: return eLogLevel::Regular;
- case mtMaxPlusOne: break;
+ case mtMaxPlusOne: break;
}
ASSERT(!"Unhandled MessageType");
return eLogLevel::Error;
@@ -283,95 +297,101 @@ eLogLevel cCompositeChat::MessageTypeToLogLevel(eMessageType a_MessageType)
AString cCompositeChat::CreateJsonString(bool a_ShouldUseChatPrefixes) const
{
Json::Value Message;
- Message["text"] = cClientHandle::FormatMessageType(a_ShouldUseChatPrefixes, GetMessageType(), GetAdditionalMessageTypeData()); // The client crashes without this field being present
+ Message["text"] = cClientHandle::FormatMessageType(
+ a_ShouldUseChatPrefixes,
+ GetMessageType(),
+ GetAdditionalMessageTypeData()
+ ); // The client crashes without this field being present
for (const auto & Part : m_Parts)
{
Json::Value JsonPart;
- std::visit(OverloadedVariantAccess
- {
- [this, &JsonPart](const TextPart & a_Part)
- {
- JsonPart["text"] = a_Part.Text;
- AddChatPartStyle(JsonPart, a_Part.Style);
- },
- [this, &JsonPart](const ClientTranslatedPart & a_Part)
- {
- JsonPart["translate"] = a_Part.Text;
- Json::Value With;
- for (const auto & Parameter : a_Part.Parameters)
+ std::visit(
+ OverloadedVariantAccess {
+ [this, &JsonPart](const TextPart & a_Part)
{
- With.append(Parameter);
- }
- if (!a_Part.Parameters.empty())
+ JsonPart["text"] = a_Part.Text;
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
+ [this, &JsonPart](const ClientTranslatedPart & a_Part)
{
- JsonPart["with"] = With;
- }
- AddChatPartStyle(JsonPart, a_Part.Style);
- },
- [this, &JsonPart](const UrlPart & a_Part)
- {
- JsonPart["text"] = a_Part.Text;
- Json::Value Url;
- Url["action"] = "open_url";
- Url["value"] = a_Part.Url;
- JsonPart["clickEvent"] = Url;
- AddChatPartStyle(JsonPart, a_Part.Style);
- },
- [this, &JsonPart](const RunCommandPart & a_Part)
- {
- JsonPart["text"] = a_Part.Text;
- Json::Value Cmd;
- Cmd["action"] = "run_command";
- Cmd["value"] = a_Part.Command;
- JsonPart["clickEvent"] = Cmd;
- AddChatPartStyle(JsonPart, a_Part.Style);
- },
- [this, &JsonPart](const SuggestCommandPart & a_Part)
- {
- JsonPart["text"] = a_Part.Text;
- Json::Value Cmd;
- Cmd["action"] = "suggest_command";
- Cmd["value"] = a_Part.Command;
- JsonPart["clickEvent"] = Cmd;
- AddChatPartStyle(JsonPart, a_Part.Style);
- },
- [this, &JsonPart](const ShowAchievementPart & a_Part)
- {
- JsonPart["translate"] = "chat.type.achievement";
+ JsonPart["translate"] = a_Part.Text;
+ Json::Value With;
+ for (const auto & Parameter : a_Part.Parameters)
+ {
+ With.append(Parameter);
+ }
+ if (!a_Part.Parameters.empty())
+ {
+ JsonPart["with"] = With;
+ }
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
+ [this, &JsonPart](const UrlPart & a_Part)
+ {
+ JsonPart["text"] = a_Part.Text;
+ Json::Value Url;
+ Url["action"] = "open_url";
+ Url["value"] = a_Part.Url;
+ JsonPart["clickEvent"] = Url;
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
+ [this, &JsonPart](const RunCommandPart & a_Part)
+ {
+ JsonPart["text"] = a_Part.Text;
+ Json::Value Cmd;
+ Cmd["action"] = "run_command";
+ Cmd["value"] = a_Part.Command;
+ JsonPart["clickEvent"] = Cmd;
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
+ [this, &JsonPart](const SuggestCommandPart & a_Part)
+ {
+ JsonPart["text"] = a_Part.Text;
+ Json::Value Cmd;
+ Cmd["action"] = "suggest_command";
+ Cmd["value"] = a_Part.Command;
+ JsonPart["clickEvent"] = Cmd;
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
+ [this, &JsonPart](const ShowAchievementPart & a_Part)
+ {
+ JsonPart["translate"] = "chat.type.achievement";
- Json::Value Ach;
- Ach["action"] = "show_achievement";
- Ach["value"] = a_Part.Text;
+ Json::Value Ach;
+ Ach["action"] = "show_achievement";
+ Ach["value"] = a_Part.Text;
- Json::Value AchColourAndName;
- AchColourAndName["color"] = "green";
- AchColourAndName["translate"] = a_Part.Text;
- AchColourAndName["hoverEvent"] = Ach;
+ Json::Value AchColourAndName;
+ AchColourAndName["color"] = "green";
+ AchColourAndName["translate"] = a_Part.Text;
+ AchColourAndName["hoverEvent"] = Ach;
- Json::Value Extra;
- Extra.append(AchColourAndName);
+ Json::Value Extra;
+ Extra.append(AchColourAndName);
- Json::Value Name;
- Name["text"] = a_Part.PlayerName;
+ Json::Value Name;
+ Name["text"] = a_Part.PlayerName;
- Json::Value With;
- With.append(Name);
- With.append(Extra);
+ Json::Value With;
+ With.append(Name);
+ With.append(Extra);
- JsonPart["with"] = With;
- AddChatPartStyle(JsonPart, a_Part.Style);
+ JsonPart["with"] = With;
+ AddChatPartStyle(JsonPart, a_Part.Style);
+ },
},
- }, Part);
+ Part
+ );
Message["extra"].append(JsonPart);
} // for itr - Parts[]
- #if 1
- // Serialize as machine-readable string (no whitespace):
- return JsonUtils::WriteFastString(Message);
- #else
- // Serialize as human-readable string (pretty-printed):
- return JsonUtils::WriteStyledString(msg);
- #endif
+#if 1
+ // Serialize as machine-readable string (no whitespace):
+ return JsonUtils::WriteFastString(Message);
+#else
+ // Serialize as human-readable string (pretty-printed):
+ return JsonUtils::WriteStyledString(msg);
+#endif
}