mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
Made links clickable in sent whispers.
This commit is contained in:
parent
3f41dfeff9
commit
497c958485
|
@ -189,8 +189,16 @@ QString CommandController::execCommand(const QString &textNoEmoji,
|
|||
void operator()(const QString &string,
|
||||
MessageBuilder &b) const
|
||||
{
|
||||
b.emplace<TextElement>(
|
||||
string, MessageElementFlag::Text);
|
||||
auto linkString = b.matchLink(string);
|
||||
if (linkString.isEmpty())
|
||||
{
|
||||
b.emplace<TextElement>(
|
||||
string, MessageElementFlag::Text);
|
||||
}
|
||||
else
|
||||
{
|
||||
b.addLink(string, linkString);
|
||||
}
|
||||
}
|
||||
} visitor;
|
||||
boost::apply_visitor(
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "messages/Image.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageElement.hpp"
|
||||
#include "providers/LinkResolver.hpp"
|
||||
#include "providers/twitch/PubsubActions.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
|
@ -352,4 +353,57 @@ QString MessageBuilder::matchLink(const QString &string)
|
|||
return captured;
|
||||
}
|
||||
|
||||
void MessageBuilder::addLink(const QString &origLink,
|
||||
const QString &matchedLink)
|
||||
{
|
||||
static QRegularExpression domainRegex(
|
||||
R"(^(?:(?:ftp|http)s?:\/\/)?([^\/]+)(?:\/.*)?$)",
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
|
||||
QString lowercaseLinkString;
|
||||
auto match = domainRegex.match(origLink);
|
||||
if (match.isValid())
|
||||
{
|
||||
lowercaseLinkString = origLink.mid(0, match.capturedStart(1)) +
|
||||
match.captured(1).toLower() +
|
||||
origLink.mid(match.capturedEnd(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
lowercaseLinkString = origLink;
|
||||
}
|
||||
auto linkElement = Link(Link::Url, matchedLink);
|
||||
|
||||
auto textColor = MessageColor(MessageColor::Link);
|
||||
auto linkMELowercase =
|
||||
this->emplace<TextElement>(lowercaseLinkString,
|
||||
MessageElementFlag::LowercaseLink, textColor)
|
||||
->setLink(linkElement);
|
||||
auto linkMEOriginal =
|
||||
this->emplace<TextElement>(origLink, MessageElementFlag::OriginalLink,
|
||||
textColor)
|
||||
->setLink(linkElement);
|
||||
|
||||
LinkResolver::getLinkInfo(matchedLink, [weakMessage = this->weakOf(),
|
||||
linkMELowercase, linkMEOriginal,
|
||||
matchedLink](QString tooltipText,
|
||||
Link originalLink) {
|
||||
auto shared = weakMessage.lock();
|
||||
if (!shared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!tooltipText.isEmpty())
|
||||
{
|
||||
linkMELowercase->setTooltip(tooltipText);
|
||||
linkMEOriginal->setTooltip(tooltipText);
|
||||
}
|
||||
if (originalLink.value != matchedLink && !originalLink.value.isEmpty())
|
||||
{
|
||||
linkMELowercase->setLink(originalLink)->updateLink();
|
||||
linkMEOriginal->setLink(originalLink)->updateLink();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
|
|
|
@ -54,6 +54,7 @@ public:
|
|||
|
||||
void append(std::unique_ptr<MessageElement> element);
|
||||
QString matchLink(const QString &string);
|
||||
void addLink(const QString &origLink, const QString &matchedLink);
|
||||
|
||||
template <typename T, typename... Args>
|
||||
T *emplace(Args &&... args)
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include "controllers/ignores/IgnoreController.hpp"
|
||||
#include "debug/Log.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "providers/LinkResolver.hpp"
|
||||
#include "providers/chatterino/ChatterinoBadges.hpp"
|
||||
#include "providers/twitch/TwitchBadges.hpp"
|
||||
#include "providers/twitch/TwitchChannel.hpp"
|
||||
|
@ -512,56 +511,7 @@ void TwitchMessageBuilder::addTextOrEmoji(const QString &string_)
|
|||
}
|
||||
else
|
||||
{
|
||||
static QRegularExpression domainRegex(
|
||||
R"(^(?:(?:ftp|http)s?:\/\/)?([^\/]+)(?:\/.*)?$)",
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
|
||||
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);
|
||||
auto linkMELowercase =
|
||||
this->emplace<TextElement>(lowercaseLinkString,
|
||||
MessageElementFlag::LowercaseLink,
|
||||
textColor)
|
||||
->setLink(link);
|
||||
auto linkMEOriginal =
|
||||
this->emplace<TextElement>(string, MessageElementFlag::OriginalLink,
|
||||
textColor)
|
||||
->setLink(link);
|
||||
|
||||
LinkResolver::getLinkInfo(
|
||||
linkString,
|
||||
[weakMessage = this->weakOf(), linkMELowercase, linkMEOriginal,
|
||||
linkString](QString tooltipText, Link originalLink) {
|
||||
auto shared = weakMessage.lock();
|
||||
if (!shared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!tooltipText.isEmpty())
|
||||
{
|
||||
linkMELowercase->setTooltip(tooltipText);
|
||||
linkMEOriginal->setTooltip(tooltipText);
|
||||
}
|
||||
if (originalLink.value != linkString &&
|
||||
!originalLink.value.isEmpty())
|
||||
{
|
||||
linkMELowercase->setLink(originalLink)->updateLink();
|
||||
linkMEOriginal->setLink(originalLink)->updateLink();
|
||||
}
|
||||
});
|
||||
this->addLink(string, linkString);
|
||||
}
|
||||
|
||||
// if (!linkString.isEmpty()) {
|
||||
|
|
Loading…
Reference in a new issue