mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 10:11:41 -05:00
68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
/*
|
|
This file is part of Telegram Desktop,
|
|
the official desktop application for the Telegram messaging service.
|
|
|
|
For license and copyright information please follow this link:
|
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
*/
|
|
#include "ui/basic_click_handlers.h"
|
|
|
|
#include "ui/widgets/tooltip.h"
|
|
#include "ui/text/text_entity.h"
|
|
#include "ui/ui_integration.h"
|
|
#include "base/qthelp_url.h"
|
|
|
|
#include <QtCore/QUrl>
|
|
#include <QtCore/QRegularExpression>
|
|
#include <QtGui/QDesktopServices>
|
|
#include <QtGui/QGuiApplication>
|
|
|
|
UrlClickHandler::UrlClickHandler(const QString &url, bool fullDisplayed)
|
|
: TextClickHandler(fullDisplayed)
|
|
, _originalUrl(url) {
|
|
if (isEmail()) {
|
|
_readable = _originalUrl;
|
|
} else {
|
|
const auto original = QUrl(_originalUrl);
|
|
const auto good = QUrl(original.isValid()
|
|
? original.toEncoded()
|
|
: QString());
|
|
_readable = good.isValid() ? good.toDisplayString() : _originalUrl;
|
|
}
|
|
}
|
|
|
|
QString UrlClickHandler::copyToClipboardContextItemText() const {
|
|
return isEmail()
|
|
? Ui::Integration::Instance().phraseContextCopyEmail()
|
|
: Ui::Integration::Instance().phraseContextCopyLink();
|
|
}
|
|
|
|
QString UrlClickHandler::url() const {
|
|
if (isEmail()) {
|
|
return _originalUrl;
|
|
}
|
|
|
|
QUrl u(_originalUrl), good(u.isValid() ? u.toEncoded() : QString());
|
|
QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _originalUrl);
|
|
|
|
if (!result.isEmpty()
|
|
&& !QRegularExpression(
|
|
QStringLiteral("^[a-zA-Z]+:")).match(result).hasMatch()) {
|
|
// No protocol.
|
|
return QStringLiteral("http://") + result;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void UrlClickHandler::Open(QString url, QVariant context) {
|
|
Ui::Tooltip::Hide();
|
|
if (!Ui::Integration::Instance().handleUrlClick(url, context)
|
|
&& !url.isEmpty()) {
|
|
QDesktopServices::openUrl(url);
|
|
}
|
|
}
|
|
|
|
auto UrlClickHandler::getTextEntity() const -> TextEntity {
|
|
const auto type = isEmail() ? EntityType::Email : EntityType::Url;
|
|
return { type, _originalUrl };
|
|
}
|