From 67e57ab50af284e6ef45bd005d85dfca53a3eab4 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 21 Mar 2025 21:47:32 -0400 Subject: [PATCH] fix several mastodon converters --- .../src/server/api/mastodon/converters.ts | 49 ++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/converters.ts b/packages/backend/src/server/api/mastodon/converters.ts index d1bd92b618..9d8e031831 100644 --- a/packages/backend/src/server/api/mastodon/converters.ts +++ b/packages/backend/src/server/api/mastodon/converters.ts @@ -196,7 +196,7 @@ export class MastoConverters { }); } - public async getEdits(id: string, me?: MiLocalUser | null) { + public async getEdits(id: string, me?: MiLocalUser | null): Promise { const note = await this.mastodonDataService.getNote(id, me); if (!note) { return []; @@ -280,6 +280,7 @@ export class MastoConverters { : ''; const reblogged = await this.mastodonDataService.hasReblog(note.id, me); + const reactions = await Promise.all(status.emoji_reactions.map(r => this.convertReaction(r))); // noinspection ES6MissingAwait return await awaitAll({ @@ -312,8 +313,8 @@ export class MastoConverters { application: null, //FIXME language: null, //FIXME pinned: false, //FIXME - reactions: status.emoji_reactions, - emoji_reactions: status.emoji_reactions, + reactions, + emoji_reactions: reactions, bookmarked: false, //FIXME quote: isQuote ? await this.convertReblog(status.reblog, me) : null, edited_at: note.updatedAt?.toISOString() ?? null, @@ -338,6 +339,13 @@ export class MastoConverters { type: notification.type, }; } + + public async convertReaction(reaction: Entity.Reaction): Promise { + if (reaction.accounts) { + reaction.accounts = await Promise.all(reaction.accounts.map(a => this.convertAccount(a))); + } + return reaction; + } } function simpleConvert(data: T): T { @@ -345,12 +353,13 @@ function simpleConvert(data: T): T { return Object.assign({}, data); } -export function convertAccount(account: Entity.Account) { - return simpleConvert(account); -} -export function convertAnnouncement(announcement: Entity.Announcement) { - return simpleConvert(announcement); +export function convertAnnouncement(announcement: Entity.Announcement): MastodonEntity.Announcement { + return { + ...announcement, + updated_at: announcement.updated_at ?? announcement.published_at, + }; } + export function convertAttachment(attachment: Entity.Attachment): MastodonEntity.Attachment { const { width, height } = attachment.meta?.original ?? attachment.meta ?? {}; const size = (width && height) ? `${width}x${height}` : undefined; @@ -376,28 +385,24 @@ export function convertAttachment(attachment: Entity.Attachment): MastodonEntity } : null, }; } -export function convertFilter(filter: Entity.Filter) { +export function convertFilter(filter: Entity.Filter): MastodonEntity.Filter { return simpleConvert(filter); } -export function convertList(list: Entity.List) { - return simpleConvert(list); +export function convertList(list: Entity.List): MastodonEntity.List { + return { + id: list.id, + title: list.title, + replies_policy: list.replies_policy ?? 'followed', + }; } -export function convertFeaturedTag(tag: Entity.FeaturedTag) { +export function convertFeaturedTag(tag: Entity.FeaturedTag): MastodonEntity.FeaturedTag { return simpleConvert(tag); } -export function convertPoll(poll: Entity.Poll) { +export function convertPoll(poll: Entity.Poll): MastodonEntity.Poll { return simpleConvert(poll); } -// noinspection JSUnusedGlobalSymbols -export function convertReaction(reaction: Entity.Reaction) { - if (reaction.accounts) { - reaction.accounts = reaction.accounts.map(convertAccount); - } - return reaction; -} - // Megalodon sometimes returns broken / stubbed relationship data export function convertRelationship(relationship: Partial & { id: string }): MastodonEntity.Relationship { return { @@ -420,6 +425,6 @@ export function convertRelationship(relationship: Partial & } // noinspection JSUnusedGlobalSymbols -export function convertStatusSource(status: Entity.StatusSource) { +export function convertStatusSource(status: Entity.StatusSource): MastodonEntity.StatusSource { return simpleConvert(status); }