Support t.me/c/[0-9]+/[0-9]+ urls

This commit is contained in:
Eduard Kuzmenko 2021-02-03 06:15:28 +02:00
parent 4aab2c8b6f
commit bc38237782
2 changed files with 36 additions and 21 deletions

View File

@ -126,19 +126,28 @@ export class AppImManager {
params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);
});
this.log('hashchange', splitted[0], params);
this.log('hashchange', hash, splitted[0], params);
switch(splitted[0]) {
case '#/im': {
const p = params.p;
if(p[0] === '@') {
let postId = params.post !== undefined ? appMessagesManager.generateMessageId(+params.post) : undefined;
appUsersManager.resolveUsername(p).then(peer => {
const isUser = peer._ == 'user';
const peerId = isUser ? peer.id : -peer.id;
let postId = params.post !== undefined ? appMessagesManager.generateMessageId(+params.post) : undefined;
this.setInnerPeer(peerId, postId);
});
switch(p[0]) {
case '@': {
appUsersManager.resolveUsername(p).then(peer => {
const isUser = peer._ == 'user';
const peerId = isUser ? peer.id : -peer.id;
this.setInnerPeer(peerId, postId);
});
break;
}
default: { // peerId
this.setInnerPeer(postId ? -+p : +p, postId);
break;
}
}
}
}

View File

@ -668,13 +668,13 @@ namespace RichTextProcessor {
url = 'https://' + url;
}
var tgMeMatch;
var telescoPeMatch;
let tgMeMatch;
let telescoPeMatch;
/* if(unsafe == 2) {
url = 'tg://unsafe_url?url=' + encodeURIComponent(url);
} else */if((tgMeMatch = url.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/))) {
var fullPath = tgMeMatch[1];
var path = fullPath.split('/');
const fullPath = tgMeMatch[1];
const path = fullPath.split('/');
switch(path[0]) {
case 'joinchat':
url = 'tg://join?invite=' + path[1];
@ -685,15 +685,19 @@ namespace RichTextProcessor {
break;
default:
if(path[1] && path[1].match(/^\d+$/)) {
url = siteMentions['Telegram'].replace('{1}', path[0] + '&post=' + path[1]);
//url = 'tg://resolve?domain=' + path[0] + '&post=' + path[1];
} else if(path.length == 1) {
var domainQuery = path[0].split('?');
var domain = domainQuery[0];
var query = domainQuery[1];
if(domain == 'iv') {
var match = (query || '').match(/url=([^&=]+)/);
if(path[1] && path[1].match(/^\d+$/)) { // https://t.me/.+/[0-9]+ (channel w/ username)
if(path[0] === 'c' && path[2]) { // https://t.me/c/111111111/111 (channel w/o username)
url = '#/im?p=' + path[1] + '&post=' + path[2];
} else { // https://t.me/durov/151 (channel w/ username)
url = siteMentions['Telegram'].replace('{1}', path[0] + '&post=' + path[1]);
}
} else if(path.length === 1) {
const domainQuery = path[0].split('?');
const domain = domainQuery[0];
const query = domainQuery[1];
if(domain === 'iv') {
const match = (query || '').match(/url=([^&=]+)/);
if(match) {
url = match[1];
try {
@ -707,6 +711,8 @@ namespace RichTextProcessor {
url = siteMentions['Telegram'].replace('{1}', domain + (query ? '&' + query : ''));
//url = 'tg://resolve?domain=' + domain + (query ? '&' + query : '');
}
break;
}
} else if((telescoPeMatch = url.match(/^https?:\/\/telesco\.pe\/([^/?]+)\/(\d+)/))) {
url = 'tg://resolve?domain=' + telescoPeMatch[1] + '&post=' + telescoPeMatch[2];