feat: stack /clear messages (#5806)

This commit is contained in:
nerix
2025-01-12 12:54:14 +01:00
committed by GitHub
parent 7b33560fd9
commit 7dbb27e22e
17 changed files with 640 additions and 111 deletions
+8 -12
View File
@@ -197,9 +197,8 @@ std::optional<ClearChatMessage> parseClearChatMessage(
if (message->parameters().length() == 1)
{
return ClearChatMessage{
.message =
makeSystemMessage("Chat has been cleared by a moderator.",
calculateMessageTime(message).time()),
.message = MessageBuilder::makeClearChatMessage(
calculateMessageTime(message).time(), {}),
.disableAllMessages = true,
};
}
@@ -320,15 +319,14 @@ void IrcMessageHandler::parseMessageInto(Communi::IrcMessage *message,
return;
}
auto &clearChat = *cc;
auto time = calculateMessageTime(message).time();
if (clearChat.disableAllMessages)
{
sink.addMessage(std::move(clearChat.message),
MessageContext::Original);
sink.addOrReplaceClearChat(std::move(clearChat.message), time);
}
else
{
sink.addOrReplaceTimeout(std::move(clearChat.message),
calculateMessageTime(message).time());
sink.addOrReplaceTimeout(std::move(clearChat.message), time);
}
}
}
@@ -464,18 +462,16 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message)
return;
}
auto time = calculateMessageTime(message).time();
// chat has been cleared by a moderator
if (clearChat.disableAllMessages)
{
chan->disableAllMessages();
chan->addMessage(std::move(clearChat.message),
MessageContext::Original);
chan->addOrReplaceClearChat(std::move(clearChat.message), time);
return;
}
chan->addOrReplaceTimeout(std::move(clearChat.message),
calculateMessageTime(message).time());
chan->addOrReplaceTimeout(std::move(clearChat.message), time);
// refresh all
getApp()->getWindows()->repaintVisibleChatWidgets(chan.get());