From 610394d696fdc643198bbaf928f8e923bcb08bde Mon Sep 17 00:00:00 2001 From: nerix Date: Mon, 10 Apr 2023 12:08:15 +0200 Subject: [PATCH] Fix Twitch-Specific Filters Not Being Applied (#4529) Co-authored-by: pajlada --- CHANGELOG.md | 1 + src/providers/twitch/TwitchChannel.cpp | 143 ++++++++++++------------- src/widgets/helper/ChannelView.cpp | 2 +- 3 files changed, 72 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0509dd4fc..535af2305 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - Bugfix: Fixed blocked user list sticking around when switching from a logged in user to being logged out. (#4437) - Bugfix: Fixed search popup ignoring setting for message scrollback limit. (#4496) - Bugfix: Fixed a memory leak that occurred when loading message history. This was mostly noticeable with unstable internet connections where reconnections were frequent or long-running instances of Chatterino. (#4499) +- Bugfix: Fixed Twitch channel-specific filters not being applied correctly. (#4529) - Bugfix: Fixed emote & badge tooltips not showing up when thumbnails were hidden. (#4509) - Dev: Disabling precompiled headers on Windows is now tested in CI. (#4472) - Dev: Themes are now stored as JSON files in `resources/themes`. (#4471, #4533) diff --git a/src/providers/twitch/TwitchChannel.cpp b/src/providers/twitch/TwitchChannel.cpp index 89972c8d0..96c3217cb 100644 --- a/src/providers/twitch/TwitchChannel.cpp +++ b/src/providers/twitch/TwitchChannel.cpp @@ -575,7 +575,7 @@ void TwitchChannel::setRoomModes(const RoomModes &_roomModes) bool TwitchChannel::isLive() const { - return this->streamStatus_.access()->live; + return this->streamStatus_.accessConst()->live; } SharedAccessGuard @@ -911,88 +911,85 @@ int TwitchChannel::chatterCount() void TwitchChannel::setLive(bool newLiveStatus) { - bool gotNewLiveStatus = false; { auto guard = this->streamStatus_.access(); - if (guard->live != newLiveStatus) + if (guard->live == newLiveStatus) { - gotNewLiveStatus = true; - if (newLiveStatus) + return; + } + guard->live = newLiveStatus; + } + + if (newLiveStatus) + { + if (getApp()->notifications->isChannelNotified(this->getName(), + Platform::Twitch)) + { + if (Toasts::isEnabled()) { - if (getApp()->notifications->isChannelNotified( - this->getName(), Platform::Twitch)) - { - if (Toasts::isEnabled()) - { - getApp()->toasts->sendChannelNotification( - this->getName(), guard->title, Platform::Twitch); - } - if (getSettings()->notificationPlaySound) - { - getApp()->notifications->playSound(); - } - if (getSettings()->notificationFlashTaskbar) - { - getApp()->windows->sendAlert(); - } - } - // Channel live message - MessageBuilder builder; - TwitchMessageBuilder::liveSystemMessage(this->getDisplayName(), - &builder); - this->addMessage(builder.release()); - - // Message in /live channel - MessageBuilder builder2; - TwitchMessageBuilder::liveMessage(this->getDisplayName(), - &builder2); - getApp()->twitch->liveChannel->addMessage(builder2.release()); - - // Notify on all channels with a ping sound - if (getSettings()->notificationOnAnyChannel && - !(isInStreamerMode() && - getSettings()->streamerModeSuppressLiveNotifications)) - { - getApp()->notifications->playSound(); - } + getApp()->toasts->sendChannelNotification( + this->getName(), this->accessStreamStatus()->title, + Platform::Twitch); } - else + if (getSettings()->notificationPlaySound) { - // Channel offline message - MessageBuilder builder; - TwitchMessageBuilder::offlineSystemMessage( - this->getDisplayName(), &builder); - this->addMessage(builder.release()); - - // "delete" old 'CHANNEL is live' message - LimitedQueueSnapshot snapshot = - getApp()->twitch->liveChannel->getMessageSnapshot(); - int snapshotLength = snapshot.size(); - - // MSVC hates this code if the parens are not there - int end = (std::max)(0, snapshotLength - 200); - auto liveMessageSearchText = - QString("%1 is live!").arg(this->getDisplayName()); - - for (int i = snapshotLength - 1; i >= end; --i) - { - auto &s = snapshot[i]; - - if (s->messageText == liveMessageSearchText) - { - s->flags.set(MessageFlag::Disabled); - break; - } - } + getApp()->notifications->playSound(); + } + if (getSettings()->notificationFlashTaskbar) + { + getApp()->windows->sendAlert(); + } + } + // Channel live message + MessageBuilder builder; + TwitchMessageBuilder::liveSystemMessage(this->getDisplayName(), + &builder); + this->addMessage(builder.release()); + + // Message in /live channel + MessageBuilder builder2; + TwitchMessageBuilder::liveMessage(this->getDisplayName(), &builder2); + getApp()->twitch->liveChannel->addMessage(builder2.release()); + + // Notify on all channels with a ping sound + if (getSettings()->notificationOnAnyChannel && + !(isInStreamerMode() && + getSettings()->streamerModeSuppressLiveNotifications)) + { + getApp()->notifications->playSound(); + } + } + else + { + // Channel offline message + MessageBuilder builder; + TwitchMessageBuilder::offlineSystemMessage(this->getDisplayName(), + &builder); + this->addMessage(builder.release()); + + // "delete" old 'CHANNEL is live' message + LimitedQueueSnapshot snapshot = + getApp()->twitch->liveChannel->getMessageSnapshot(); + int snapshotLength = snapshot.size(); + + // MSVC hates this code if the parens are not there + int end = (std::max)(0, snapshotLength - 200); + auto liveMessageSearchText = + QString("%1 is live!").arg(this->getDisplayName()); + + for (int i = snapshotLength - 1; i >= end; --i) + { + auto &s = snapshot[i]; + + if (s->messageText == liveMessageSearchText) + { + s->flags.set(MessageFlag::Disabled); + break; } - guard->live = newLiveStatus; } } - if (gotNewLiveStatus) - { - this->liveStatusChanged.invoke(); - } + this->liveStatusChanged.invoke(); } void TwitchChannel::refreshTitle() diff --git a/src/widgets/helper/ChannelView.cpp b/src/widgets/helper/ChannelView.cpp index b05b86239..ef8c45425 100644 --- a/src/widgets/helper/ChannelView.cpp +++ b/src/widgets/helper/ChannelView.cpp @@ -838,7 +838,7 @@ bool ChannelView::shouldIncludeMessage(const MessagePtr &m) const m->loginName, Qt::CaseInsensitive) == 0) return true; - return this->channelFilters_->filter(m, this->channel_); + return this->channelFilters_->filter(m, this->underlyingChannel_); } return true;