refactor: merge adjecent words into one TextElement (#5847)

This commit is contained in:
nerix
2025-01-22 23:25:00 +01:00
committed by GitHub
parent ea02a42162
commit 0a3cc1deed
42 changed files with 289 additions and 2719 deletions
+49 -19
View File
@@ -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