Browse Source

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

master
Eduard Kuzmenko 3 years ago
parent
commit
4e35e481fd
  1. 27
      src/lib/appManagers/appImManager.ts
  2. 32
      src/lib/richtextprocessor.ts

27
src/lib/appManagers/appImManager.ts

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

32
src/lib/richtextprocessor.ts

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

Loading…
Cancel
Save