refactor: merge adjecent words into one TextElement (#5847)
This commit is contained in:
@@ -526,8 +526,7 @@ MessageBuilder::MessageBuilder(SystemMessageTag, const QString &text,
|
||||
continue;
|
||||
}
|
||||
|
||||
this->emplace<TextElement>(word, MessageElementFlag::Text,
|
||||
MessageColor::System);
|
||||
this->appendOrEmplaceText(word, MessageColor::System);
|
||||
}
|
||||
this->message().flags.set(MessageFlag::System);
|
||||
this->message().flags.set(MessageFlag::DoNotTriggerNotification);
|
||||
@@ -552,8 +551,7 @@ MessagePtrMut MessageBuilder::makeSystemMessageWithUser(
|
||||
continue;
|
||||
}
|
||||
|
||||
builder.emplace<TextElement>(word, MessageElementFlag::Text,
|
||||
MessageColor::System);
|
||||
builder.appendOrEmplaceText(word, MessageColor::System);
|
||||
}
|
||||
|
||||
builder->flags.set(MessageFlag::System);
|
||||
@@ -619,8 +617,7 @@ MessagePtrMut MessageBuilder::makeSubgiftMessage(const QString &text,
|
||||
continue;
|
||||
}
|
||||
|
||||
builder.emplace<TextElement>(word, MessageElementFlag::Text,
|
||||
MessageColor::System);
|
||||
builder.appendOrEmplaceText(word, MessageColor::System);
|
||||
}
|
||||
|
||||
builder->flags.set(MessageFlag::System);
|
||||
@@ -743,18 +740,18 @@ MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
|
||||
this->emplaceSystemTextAndUpdate("were", text);
|
||||
if (action.isBan())
|
||||
{
|
||||
this->emplaceSystemTextAndUpdate("banned", text);
|
||||
this->appendOrEmplaceSystemTextAndUpdate("banned", text);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->emplaceSystemTextAndUpdate(
|
||||
this->appendOrEmplaceSystemTextAndUpdate(
|
||||
QString("timed out for %1").arg(formatTime(action.duration)),
|
||||
text);
|
||||
}
|
||||
|
||||
if (!action.source.login.isEmpty())
|
||||
{
|
||||
this->emplaceSystemTextAndUpdate("by", text);
|
||||
this->appendOrEmplaceSystemTextAndUpdate("by", text);
|
||||
this->emplaceSystemTextAndUpdate(
|
||||
action.source.login + (action.reason.isEmpty() ? "." : ":"),
|
||||
text)
|
||||
@@ -763,7 +760,7 @@ MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
|
||||
|
||||
if (!action.reason.isEmpty())
|
||||
{
|
||||
this->emplaceSystemTextAndUpdate(
|
||||
this->appendOrEmplaceSystemTextAndUpdate(
|
||||
QString("\"%1\".").arg(action.reason), text);
|
||||
}
|
||||
}
|
||||
@@ -812,7 +809,7 @@ MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
this->emplaceSystemTextAndUpdate(
|
||||
this->appendOrEmplaceSystemTextAndUpdate(
|
||||
QString("(%1 times)").arg(count), text);
|
||||
}
|
||||
}
|
||||
@@ -1226,6 +1223,42 @@ bool MessageBuilder::isIgnored(const QString &originalMessage,
|
||||
});
|
||||
}
|
||||
|
||||
void MessageBuilder::appendOrEmplaceText(const QString &text,
|
||||
MessageColor color)
|
||||
{
|
||||
auto fallback = [&] {
|
||||
this->emplace<TextElement>(text, MessageElementFlag::Text, color);
|
||||
};
|
||||
if (this->message_->elements.empty())
|
||||
{
|
||||
fallback();
|
||||
return;
|
||||
}
|
||||
|
||||
auto *back =
|
||||
dynamic_cast<TextElement *>(this->message_->elements.back().get());
|
||||
if (!back || //
|
||||
dynamic_cast<MentionElement *>(back) || //
|
||||
dynamic_cast<LinkElement *>(back) || //
|
||||
!back->hasTrailingSpace() || //
|
||||
back->getFlags() != MessageElementFlag::Text || //
|
||||
back->color() != color)
|
||||
{
|
||||
fallback();
|
||||
return;
|
||||
}
|
||||
|
||||
back->appendText(text);
|
||||
}
|
||||
|
||||
void MessageBuilder::appendOrEmplaceSystemTextAndUpdate(const QString &text,
|
||||
QString &toUpdate)
|
||||
{
|
||||
toUpdate.append(text);
|
||||
toUpdate.append(' ');
|
||||
this->appendOrEmplaceText(text, MessageColor::System);
|
||||
}
|
||||
|
||||
void MessageBuilder::triggerHighlights(const Channel *channel,
|
||||
const HighlightAlert &alert)
|
||||
{
|
||||
@@ -1759,22 +1792,19 @@ MessagePtr MessageBuilder::makeAutomodInfoMessage(
|
||||
QString info("Hey! Your message is being checked "
|
||||
"by mods and has not been sent.");
|
||||
text += info;
|
||||
builder.emplace<TextElement>(info, MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
builder.appendOrEmplaceText(info, MessageColor::Text);
|
||||
}
|
||||
break;
|
||||
case AutomodInfoAction::Denied: {
|
||||
QString info("Mods have removed your message.");
|
||||
text += info;
|
||||
builder.emplace<TextElement>(info, MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
builder.appendOrEmplaceText(info, MessageColor::Text);
|
||||
}
|
||||
break;
|
||||
case AutomodInfoAction::Approved: {
|
||||
QString info("Mods have accepted your message.");
|
||||
text += info;
|
||||
builder.emplace<TextElement>(info, MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
builder.appendOrEmplaceText(info, MessageColor::Text);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2019,7 +2049,7 @@ MessagePtrMut MessageBuilder::makeClearChatMessage(const QDateTime &now,
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
builder.emplaceSystemTextAndUpdate(
|
||||
builder.appendOrEmplaceSystemTextAndUpdate(
|
||||
'(' % QString::number(count) % u" times)", messageText);
|
||||
}
|
||||
|
||||
@@ -2332,7 +2362,7 @@ void MessageBuilder::addTextOrEmote(TextState &state, QString string)
|
||||
}
|
||||
}
|
||||
|
||||
this->emplace<TextElement>(string, MessageElementFlag::Text, textColor);
|
||||
this->appendOrEmplaceText(string, textColor);
|
||||
}
|
||||
|
||||
bool MessageBuilder::isEmpty() const
|
||||
|
||||
Reference in New Issue
Block a user