From 700c9fc4f20aee51da7582af97fb9b85171cfac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82?= Date: Fri, 14 Jan 2022 02:44:13 +0100 Subject: [PATCH] Don't crash upon right-clicking automod badge (#3496) --- CHANGELOG.md | 1 + src/messages/MessageBuilder.cpp | 20 ++++++++++++-------- src/widgets/helper/ChannelView.cpp | 10 +++++----- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb6af5e6..5d85484d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -81,6 +81,7 @@ - Bugfix: Fixed crash that could occur if the user opens/closes ChannelViews (e.g. EmotePopup, or Splits) then modifies the showLastMessageIndicator setting. (#3444) - Bugfix: Removed ability to reload emotes really fast (#3450) - Bugfix: Re-add date of build to the "About" page on nightly versions. (#3464) +- Bugfix: Fixed crash that would occur if the user right-clicked AutoMod badge. (#3496) - Dev: Batch checking live status for channels with live notifications that aren't connected. (#3442) - Dev: Add GitHub action to test builds without precompiled headers enabled. (#3327) - Dev: Renamed CMake's build option `USE_SYSTEM_QT5KEYCHAIN` to `USE_SYSTEM_QTKEYCHAIN`. (#3103) diff --git a/src/messages/MessageBuilder.cpp b/src/messages/MessageBuilder.cpp index 5b44b6ae..3fe81686 100644 --- a/src/messages/MessageBuilder.cpp +++ b/src/messages/MessageBuilder.cpp @@ -28,6 +28,14 @@ MessagePtr makeSystemMessage(const QString &text, const QTime &time) return MessageBuilder(systemMessage, text, time).release(); } +EmotePtr makeAutoModBadge() +{ + return std::make_shared(Emote{ + EmoteName{}, ImageSet{Image::fromPixmap(getResources().twitch.automod)}, + Tooltip{"AutoMod"}, + Url{"https://dashboard.twitch.tv/settings/moderation/automod"}}); +} + MessagePtr makeAutomodInfoMessage(const AutomodInfoAction &action) { auto builder = MessageBuilder(); @@ -37,10 +45,8 @@ MessagePtr makeAutomodInfoMessage(const AutomodInfoAction &action) builder.message().flags.set(MessageFlag::PubSub); // AutoMod shield badge - builder - .emplace(Image::fromPixmap(getResources().twitch.automod), - MessageElementFlag::BadgeChannelAuthority) - ->setTooltip("AutoMod"); + builder.emplace(makeAutoModBadge(), + MessageElementFlag::BadgeChannelAuthority); // AutoMod "username" builder.emplace("AutoMod:", MessageElementFlag::BoldUsername, MessageColor(QColor("blue")), @@ -95,10 +101,8 @@ std::pair makeAutomodMessage( builder.message().flags.set(MessageFlag::PubSub); // AutoMod shield badge - builder - .emplace(Image::fromPixmap(getResources().twitch.automod), - MessageElementFlag::BadgeChannelAuthority) - ->setTooltip("AutoMod"); + builder.emplace(makeAutoModBadge(), + MessageElementFlag::BadgeChannelAuthority); // AutoMod "username" builder.emplace("AutoMod:", MessageElementFlag::BoldUsername, MessageColor(QColor("blue")), diff --git a/src/widgets/helper/ChannelView.cpp b/src/widgets/helper/ChannelView.cpp index b3fd327e..61e9f2af 100644 --- a/src/widgets/helper/ChannelView.cpp +++ b/src/widgets/helper/ChannelView.cpp @@ -1860,19 +1860,19 @@ void ChannelView::addContextMenuItems( auto menu = new QMenu; previousMenu = menu; + // Badge actions if (creatorFlags.hasAny({MessageElementFlag::Badges})) { - auto badgeElement = dynamic_cast(&creator); - addEmoteContextMenuItems(*badgeElement->getEmote(), creatorFlags, - *menu); + if (auto badgeElement = dynamic_cast(&creator)) + addEmoteContextMenuItems(*badgeElement->getEmote(), creatorFlags, + *menu); } // Emote actions if (creatorFlags.hasAny( {MessageElementFlag::EmoteImages, MessageElementFlag::EmojiImage})) { - const auto emoteElement = dynamic_cast(&creator); - if (emoteElement) + if (auto emoteElement = dynamic_cast(&creator)) addEmoteContextMenuItems(*emoteElement->getEmote(), creatorFlags, *menu); }