From db09a88c8da872cc4c66b27345a8abf6a77f9f5c Mon Sep 17 00:00:00 2001 From: Tal Neoran Date: Sun, 27 Jun 2021 16:50:12 +0300 Subject: [PATCH] Add clickable usernames in host offline messages (#2922) Co-authored-by: pajlada --- CHANGELOG.md | 1 + src/providers/twitch/IrcMessageHandler.cpp | 15 ++++++---- src/providers/twitch/TwitchMessageBuilder.cpp | 30 ++++++++++++++----- src/providers/twitch/TwitchMessageBuilder.hpp | 2 +- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a516571e..9d793f31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unversioned +- Minor: Channel name in ` has gone offline. Exiting host mode.` messages is now clickable. (#2922) - Minor: Added `/openurl` command. Usage: `/openurl `. Opens the provided URL in the browser. (#2461, #2926) - Bugfix: Fixed large timeout durations in moderation buttons overlapping with usernames or other buttons. (#2865, #2921) diff --git a/src/providers/twitch/IrcMessageHandler.cpp b/src/providers/twitch/IrcMessageHandler.cpp index ee5a7243..ba8a8365 100644 --- a/src/providers/twitch/IrcMessageHandler.cpp +++ b/src/providers/twitch/IrcMessageHandler.cpp @@ -819,21 +819,26 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message) "Usage: \"/delete \" - can't take more " "than one argument")); } - else if (tags == "host_on") + else if (tags == "host_on" || tags == "host_target_went_offline") { + bool hostOn = (tags == "host_on"); QStringList parts = msg->messageText.split(QLatin1Char(' ')); - if (parts.size() != 3) + if ((hostOn && parts.size() != 3) || (!hostOn && parts.size() != 7)) { return; } - auto &channelName = parts[2]; + auto &channelName = hostOn ? parts[2] : parts[0]; if (channelName.size() < 2) { return; } - channelName.chop(1); + if (hostOn) + { + channelName.chop(1); + } MessageBuilder builder; - TwitchMessageBuilder::hostingSystemMessage(channelName, &builder); + TwitchMessageBuilder::hostingSystemMessage(channelName, &builder, + hostOn); channel->addMessage(builder.release()); } else diff --git a/src/providers/twitch/TwitchMessageBuilder.cpp b/src/providers/twitch/TwitchMessageBuilder.cpp index c9845d69..8f1b0bf7 100644 --- a/src/providers/twitch/TwitchMessageBuilder.cpp +++ b/src/providers/twitch/TwitchMessageBuilder.cpp @@ -1337,17 +1337,33 @@ void TwitchMessageBuilder::offlineSystemMessage(const QString &channelName, } void TwitchMessageBuilder::hostingSystemMessage(const QString &channelName, - MessageBuilder *builder) + MessageBuilder *builder, + bool hostOn) { builder->emplace(); builder->message().flags.set(MessageFlag::System); builder->message().flags.set(MessageFlag::DoNotTriggerNotification); - builder->emplace("Now hosting", MessageElementFlag::Text, - MessageColor::System); - builder - ->emplace(channelName + ".", MessageElementFlag::Username, - MessageColor::System, FontStyle::ChatMediumBold) - ->setLink({Link::UserInfo, channelName}); + if (hostOn) + { + builder->emplace("Now hosting", MessageElementFlag::Text, + MessageColor::System); + builder + ->emplace( + channelName + ".", MessageElementFlag::Username, + MessageColor::System, FontStyle::ChatMediumBold) + ->setLink({Link::UserInfo, channelName}); + } + else + { + builder + ->emplace(channelName, MessageElementFlag::Username, + MessageColor::System, + FontStyle::ChatMediumBold) + ->setLink({Link::UserInfo, channelName}); + builder->emplace("has gone offline. Exiting host mode.", + MessageElementFlag::Text, + MessageColor::System); + } } // irc variant diff --git a/src/providers/twitch/TwitchMessageBuilder.hpp b/src/providers/twitch/TwitchMessageBuilder.hpp index 14d2430f..3e14412b 100644 --- a/src/providers/twitch/TwitchMessageBuilder.hpp +++ b/src/providers/twitch/TwitchMessageBuilder.hpp @@ -58,7 +58,7 @@ public: static void offlineSystemMessage(const QString &channelName, MessageBuilder *builder); static void hostingSystemMessage(const QString &channelName, - MessageBuilder *builder); + MessageBuilder *builder, bool hostOn); static void deletionMessage(const MessagePtr originalMessage, MessageBuilder *builder); static void deletionMessage(const DeleteAction &action,