From 81b08bebd00a939b2e0729460fadff2426a0852a Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Fri, 15 Sep 2023 18:12:58 +0200 Subject: [PATCH] [mastodon-client] Fix mentions --- .../backend/src/server/api/mastodon/converters/mention.ts | 8 ++++++-- .../backend/src/server/api/mastodon/converters/note.ts | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/converters/mention.ts b/packages/backend/src/server/api/mastodon/converters/mention.ts index ea9fbdffd..9825ad237 100644 --- a/packages/backend/src/server/api/mastodon/converters/mention.ts +++ b/packages/backend/src/server/api/mastodon/converters/mention.ts @@ -1,19 +1,23 @@ import { User } from "@/models/entities/user.js"; import config from "@/config/index.js"; +import { IMentionedRemoteUsers } from "@/models/entities/note.js"; export class MentionConverter { - public static encode(u: User): MastodonEntity.Mention { + public static encode(u: User, m: IMentionedRemoteUsers): MastodonEntity.Mention { let acct = u.username; let acctUrl = `https://${u.host || config.host}/@${u.username}`; + let url: string | null = null; if (u.host) { + const info = m.find(r => r.username === u.username && r.host === u.host); acct = `${u.username}@${u.host}`; acctUrl = `https://${u.host}/@${u.username}`; + if (info) url = info.url ?? info.uri; } return { id: u.id, username: u.username, acct: acct, - url: u.uri ?? acctUrl, + url: url ?? acctUrl, }; } } diff --git a/packages/backend/src/server/api/mastodon/converters/note.ts b/packages/backend/src/server/api/mastodon/converters/note.ts index d70fba390..51fac6d54 100644 --- a/packages/backend/src/server/api/mastodon/converters/note.ts +++ b/packages/backend/src/server/api/mastodon/converters/note.ts @@ -73,7 +73,7 @@ export class NoteConverter { const mentions = Promise.all(note.mentions.map(p => getUser(p) - .then(u => MentionConverter.encode(u)) + .then(u => MentionConverter.encode(u, JSON.parse(note.mentionedRemoteUsers))) .catch(() => null))) .then(p => p.filter(m => m)) as Promise;