diff --git a/src/messages/MessageElement.hpp b/src/messages/MessageElement.hpp index 76410164..89f2f2f3 100644 --- a/src/messages/MessageElement.hpp +++ b/src/messages/MessageElement.hpp @@ -96,6 +96,10 @@ public: BoldUsername = (1 << 27), NonBoldUsername = (1 << 28), + // for links + LowercaseLink = (1 << 29), + OriginalLink = (1 << 30), + Default = Timestamp | Badges | Username | BitsStatic | FfzEmoteImage | BttvEmoteImage | TwitchEmoteImage | BitsAmount | Text | AlwaysShow, }; diff --git a/src/providers/twitch/TwitchMessageBuilder.cpp b/src/providers/twitch/TwitchMessageBuilder.cpp index 4b75ecd5..55d1d175 100644 --- a/src/providers/twitch/TwitchMessageBuilder.cpp +++ b/src/providers/twitch/TwitchMessageBuilder.cpp @@ -220,35 +220,34 @@ MessagePtr TwitchMessageBuilder::build() Link link; if (linkString.isEmpty()) { - link = Link(); + if (string.startsWith('@')) { + this->emplace(string, TextElement::BoldUsername, textColor, + FontStyle::ChatMediumBold); + this->emplace(string, TextElement::NonBoldUsername, textColor); + } else { + this->emplace(string, TextElement::Text, textColor); + } } else { - if (app->settings->lowercaseLink) { - QRegularExpression httpRegex("\\bhttps?://", - QRegularExpression::CaseInsensitiveOption); - QRegularExpression ftpRegex("\\bftps?://", - QRegularExpression::CaseInsensitiveOption); - QRegularExpression getDomain("\\/\\/([^\\/]*)"); - QString tempString = string; + static QRegularExpression domainRegex( + R"(^(?:(?:ftp|http)s?:\/\/)?([^\/:]+)(?:\/.*)?$)", + QRegularExpression::CaseInsensitiveOption); - if (!string.contains(httpRegex)) { - if (!string.contains(ftpRegex)) { - tempString.insert(0, "http://"); - } - } - QString domain = getDomain.match(tempString).captured(1); - string.replace(domain, domain.toLower()); + QString lowercaseLinkString; + auto match = domainRegex.match(string); + if (match.isValid()) { + lowercaseLinkString = string.mid(0, match.capturedStart(1)) + + match.captured(1).toLower() + + string.mid(match.capturedEnd(1)); + } else { + lowercaseLinkString = string; } link = Link(Link::Url, linkString); + textColor = MessageColor(MessageColor::Link); - } - if (string.startsWith('@')) { - this->emplace(string, TextElement::BoldUsername, textColor, - FontStyle::ChatMediumBold) // + this->emplace(lowercaseLinkString, TextElement::LowercaseLink, + textColor) ->setLink(link); - this->emplace(string, TextElement::NonBoldUsername, textColor) // - ->setLink(link); - } else { - this->emplace(string, TextElement::Text, textColor) // + this->emplace(string, TextElement::OriginalLink, textColor) ->setLink(link); } diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index 1eda0e81..94690461 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -82,7 +82,7 @@ public: /// Links BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false}; - BoolSetting lowercaseLink = {"/links/linkLowercase", true}; + BoolSetting enableLowercaseLink = {"/links/linkLowercase", true}; /// Ingored Users BoolSetting enableTwitchIgnoredUsers = {"/ignore/enableTwitchIgnoredUsers", true}; diff --git a/src/singletons/WindowManager.cpp b/src/singletons/WindowManager.cpp index 2e43f7d1..4a6483ea 100644 --- a/src/singletons/WindowManager.cpp +++ b/src/singletons/WindowManager.cpp @@ -68,6 +68,7 @@ WindowManager::WindowManager() this->wordFlagsListener_.addSetting(settings->enableFfzEmotes); this->wordFlagsListener_.addSetting(settings->enableTwitchEmotes); this->wordFlagsListener_.addSetting(settings->enableUsernameBold); + this->wordFlagsListener_.addSetting(settings->enableLowercaseLink); this->wordFlagsListener_.cb = [this](auto) { this->updateWordTypeMask(); // }; @@ -111,6 +112,7 @@ void WindowManager::updateWordTypeMask() flags |= MEF::AlwaysShow; flags |= MEF::Collapsed; flags |= settings->enableUsernameBold ? MEF::BoldUsername : MEF::NonBoldUsername; + flags |= settings->enableLowercaseLink ? MEF::LowercaseLink : MEF::OriginalLink; // update flags MessageElement::Flags newFlags = static_cast(flags); diff --git a/src/widgets/settingspages/LookPage.cpp b/src/widgets/settingspages/LookPage.cpp index 6f556f02..919b726d 100644 --- a/src/widgets/settingspages/LookPage.cpp +++ b/src/widgets/settingspages/LookPage.cpp @@ -141,7 +141,7 @@ void LookPage::addMessageTab(LayoutCreator layout) layout.emplace(false); // lowercase links - layout.append(this->createCheckBox("Lowercase domains", getSettings()->lowercaseLink)); + layout.append(this->createCheckBox("Lowercase domains", getSettings()->enableLowercaseLink)); // bold usernames layout.append(this->createCheckBox("Bold @usernames", getSettings()->enableUsernameBold)); @@ -286,7 +286,9 @@ ChannelPtr LookPage::createPreviewChannel() message->addElement(new TextElement("This is a preview message", MessageElement::Text)); message->addElement(new EmoteElement(EmoteData(getApp()->resources->pajaDank), MessageElement::Flags::AlwaysShow)); - // message->addElement(new) + message->addElement(new TextElement("@fourtf", TextElement::BoldUsername, + MessageColor::Text, FontStyle::ChatMediumBold)); + message->addElement(new TextElement("@fourtf", TextElement::NonBoldUsername)); channel->addMessage(message); } { @@ -300,7 +302,10 @@ ChannelPtr LookPage::createPreviewChannel() message->addElement( new EmoteElement(EmoteData(getApp()->resources->ppHop), MessageElement::BttvEmote)); message->addElement( - (new TextElement("www.fourtf.com", MessageElement::Text, MessageColor::Link)) + (new TextElement("www.fourtf.com", MessageElement::LowercaseLink, MessageColor::Link)) + ->setLink(Link(Link::Url, "https://www.fourtf.com"))); + message->addElement( + (new TextElement("wWw.FoUrTf.CoM", MessageElement::OriginalLink, MessageColor::Link)) ->setLink(Link(Link::Url, "https://www.fourtf.com"))); channel->addMessage(message); }