Open .ton as a tonsite.

This commit is contained in:
John Preston 2024-07-31 18:59:31 +02:00
parent a422aec99a
commit 148690d8b1
4 changed files with 18 additions and 5 deletions

View file

@ -122,7 +122,9 @@ void HiddenUrlClickHandler::Open(QString url, QVariant context) {
return result; return result;
}())); }()));
} else { } else {
const auto parsedUrl = QUrl::fromUserInput(url); const auto parsedUrl = url.startsWith(u"tonsite://"_q)
? QUrl(url)
: QUrl::fromUserInput(url);
if (UrlRequiresConfirmation(parsedUrl) && !base::IsCtrlPressed()) { if (UrlRequiresConfirmation(parsedUrl) && !base::IsCtrlPressed()) {
const auto my = context.value<ClickHandlerContext>(); const auto my = context.value<ClickHandlerContext>();
if (!my.show) { if (!my.show) {

View file

@ -1337,6 +1337,13 @@ QString TryConvertUrlToLocal(QString url) {
using namespace qthelp; using namespace qthelp;
auto matchOptions = RegExOption::CaseInsensitive; auto matchOptions = RegExOption::CaseInsensitive;
auto tonsiteMatch = (url.indexOf(u".ton") >= 0)
? regex_match(u"^(https?://)?[^/@:]+\\.ton($|/)"_q, url, matchOptions)
: RegularExpressionMatch(QRegularExpressionMatch());
if (tonsiteMatch) {
const auto protocol = tonsiteMatch->captured(1);
return u"tonsite://"_q + url.mid(protocol.size());
}
auto subdomainMatch = regex_match(u"^(https?://)?([a-zA-Z0-9\\_]+)\\.t\\.me(/\\d+)?/?(\\?.+)?"_q, url, matchOptions); auto subdomainMatch = regex_match(u"^(https?://)?([a-zA-Z0-9\\_]+)\\.t\\.me(/\\d+)?/?(\\?.+)?"_q, url, matchOptions);
if (subdomainMatch) { if (subdomainMatch) {
const auto name = subdomainMatch->captured(2); const auto name = subdomainMatch->captured(2);

View file

@ -166,12 +166,16 @@ namespace {
}; };
auto parsed = QUrl(value); auto parsed = QUrl(value);
if (parsed.isValid()) { if (parsed.isValid()) {
const auto host = ChangeHost(parsed.host());
const auto emptyPath = parsed.path().isEmpty();
parsed.setScheme("tonsite"); parsed.setScheme("tonsite");
parsed.setHost(ChangeHost(parsed.host())); parsed.setHost(host);
if (parsed.path().isEmpty()) { if (emptyPath) {
parsed.setPath(u"/"_q); parsed.setPath(u"/"_q);
} }
return parsed.toString(); if (parsed.isValid()) {
return parsed.toString();
}
} }
const auto part = value.mid(u"https://"_q.size()); const auto part = value.mid(u"https://"_q.size());
const auto split = part.indexOf('/'); const auto split = part.indexOf('/');

@ -1 +1 @@
Subproject commit 97bfa6cef474b3b311a178ff1a1042d09972a7c7 Subproject commit 8db5d1aa533334c75ed2598ecf3607768ae9b418