[mastodon-client] fix mentions of remote local users without host

This commit is contained in:
Laura Hausmann 2023-07-18 17:08:13 +02:00
parent 006ff07a0c
commit 870618a196
Signed by: zotan
GPG key ID: D044E84C5BE01605

View file

@ -1277,16 +1277,26 @@ export default class Misskey implements MegalodonInterface {
if (status.quote != null)
status.quote = await this.addMentionsToStatus(status.quote, cache);
status.mentions = (await this.getMentions(status.plain_content!, cache)).filter(p => p != null);
const idx = status.account.acct.indexOf('@');
const origin = idx < 0 ? null : status.account.acct.substring(idx + 1);
status.mentions = (await this.getMentions(status.plain_content!, origin, cache)).filter(p => p != null);
for (const m of status.mentions.filter((value, index, array) => array.indexOf(value) === index)) {
const regexFull = new RegExp(`(?<=^|\\s|>)@${m.acct}(?=[^a-zA-Z0-9]|$)`, 'gi');
const regexLocalUser = new RegExp(`(?<=^|\\s|>)@${m.acct}@${this.baseUrlToHost(this.baseUrl)}(?=[^a-zA-Z0-9]|$)`, 'gi');
const regexRemoteUser = new RegExp(`(?<=^|\\s|>)@${m.username}(?=[^a-zA-Z0-9@]|$)`, 'gi');
if (m.acct == m.username)
status.content = status.content.replace(new RegExp(`(?<=^|\\s|>)@${m.acct}@${this.baseUrlToHost(this.baseUrl)}(?=[^a-zA-Z0-9]|$)`, 'g'), `@${m.acct}`);
status.content = status.content.replace(new RegExp(`(?<=^|\\s|>)@${m.acct}(?=[^a-zA-Z0-9]|$)`, 'g'), `<a href="${m.url}" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@${m.acct}</a>`);
status.content = status.content.replace(regexLocalUser, `@${m.acct}`);
else if (!status.content.match(regexFull))
status.content = status.content.replace(regexRemoteUser, `@${m.acct}`);
status.content = status.content.replace(regexFull, `<a href="${m.url}" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@${m.acct}</a>`);
}
return status;
}
public async getMentions(text: string, cache: AccountCache): Promise<Entity.Mention[]> {
public async getMentions(text: string, origin: string | null, cache: AccountCache): Promise<Entity.Mention[]> {
const mentions :Entity.Mention[] = [];
if (text == undefined)
@ -1299,7 +1309,7 @@ export default class Misskey implements MegalodonInterface {
if (m.groups == null)
continue;
const account = await this.getAccountByNameCached(m.groups.user, m.groups.host, cache);
const account = await this.getAccountByNameCached(m.groups.user, m.groups.host ?? origin, cache);
if (account == null)
continue;