feat: dynamically track mutability of messages (#6367)

This commit is contained in:
nerix
2025-08-04 21:04:59 +02:00
committed by GitHub
parent 0085b64418
commit 4ffdc2fa7b
171 changed files with 233 additions and 0 deletions
+16
View File
@@ -79,6 +79,8 @@ LimitedQueueSnapshot<MessagePtr> Channel::getMessageSnapshot()
void Channel::addMessage(MessagePtr message, MessageContext context,
std::optional<MessageFlags> overridingFlags)
{
message->freeze();
MessagePtr deleted;
if (context == MessageContext::Original && this->getType() != Type::None)
@@ -157,6 +159,11 @@ void Channel::disableAllMessages()
void Channel::addMessagesAtStart(const std::vector<MessagePtr> &_messages)
{
for (const auto &msg : _messages)
{
msg->freeze();
}
std::vector<MessagePtr> addedMessages =
this->messages_.pushFront(_messages);
@@ -172,6 +179,10 @@ void Channel::fillInMissingMessages(const std::vector<MessagePtr> &messages)
{
return;
}
for (const auto &msg : messages)
{
msg->freeze();
}
auto snapshot = this->getMessageSnapshot();
if (snapshot.size() == 0)
@@ -256,6 +267,7 @@ void Channel::fillInMissingMessages(const std::vector<MessagePtr> &messages)
void Channel::replaceMessage(const MessagePtr &message,
const MessagePtr &replacement)
{
replacement->freeze();
int index = this->messages_.replaceItem(message, replacement);
if (index >= 0)
@@ -266,6 +278,8 @@ void Channel::replaceMessage(const MessagePtr &message,
void Channel::replaceMessage(size_t index, const MessagePtr &replacement)
{
replacement->freeze();
MessagePtr prev;
if (this->messages_.replaceItem(index, replacement, &prev))
{
@@ -276,6 +290,8 @@ void Channel::replaceMessage(size_t index, const MessagePtr &replacement)
void Channel::replaceMessage(size_t hint, const MessagePtr &message,
const MessagePtr &replacement)
{
replacement->freeze();
auto index = this->messages_.replaceItem(hint, message, replacement);
if (index >= 0)
{