From 115031b7ace10d803aaaf8ea5784ac942db77b33 Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Fri, 22 Jun 2018 21:44:02 +0000 Subject: [PATCH] Clearchat now disables previous messages Fix #499 --- src/channel.cpp | 14 ++++++++++++++ src/channel.hpp | 1 + src/providers/twitch/ircmessagehandler.cpp | 1 + 3 files changed, 16 insertions(+) diff --git a/src/channel.cpp b/src/channel.cpp index b17555c9..4000662b 100644 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -150,6 +150,20 @@ void Channel::addOrReplaceTimeout(messages::MessagePtr message) // WindowManager::getInstance().repaintVisibleChatWidgets(this); } +void Channel::disableAllMessages() +{ + LimitedQueueSnapshot snapshot = this->getMessageSnapshot(); + int snapshotLength = snapshot.getLength(); + for (int i = 0; i < snapshotLength; i++) { + auto &s = snapshot[i]; + if (s->flags & Message::System || s->flags & Message::Timeout) { + continue; + } + + s->flags.EnableFlag(Message::Disabled); + } +} + void Channel::addMessagesAtStart(std::vector &_messages) { std::vector addedMessages = this->messages.pushFront(_messages); diff --git a/src/channel.hpp b/src/channel.hpp index 5a46c8f1..2c8e57f6 100644 --- a/src/channel.hpp +++ b/src/channel.hpp @@ -51,6 +51,7 @@ public: void addMessage(messages::MessagePtr message); void addMessagesAtStart(std::vector &messages); void addOrReplaceTimeout(messages::MessagePtr message); + void disableAllMessages(); void replaceMessage(messages::MessagePtr message, messages::MessagePtr replacement); virtual void addRecentChatter(const std::shared_ptr &message); diff --git a/src/providers/twitch/ircmessagehandler.cpp b/src/providers/twitch/ircmessagehandler.cpp index eaecb74b..7afa1a64 100644 --- a/src/providers/twitch/ircmessagehandler.cpp +++ b/src/providers/twitch/ircmessagehandler.cpp @@ -150,6 +150,7 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message) // check if the chat has been cleared by a moderator if (message->parameters().length() == 1) { + chan->disableAllMessages(); chan->addMessage(Message::createSystemMessage("Chat has been cleared by a moderator.")); return;