fix several mastodon converters

This commit is contained in:
Hazelnoot 2025-03-21 21:47:32 -04:00
parent 75b6c63f44
commit 67e57ab50a

View file

@ -196,7 +196,7 @@ export class MastoConverters {
}); });
} }
public async getEdits(id: string, me?: MiLocalUser | null) { public async getEdits(id: string, me?: MiLocalUser | null): Promise<StatusEdit[]> {
const note = await this.mastodonDataService.getNote(id, me); const note = await this.mastodonDataService.getNote(id, me);
if (!note) { if (!note) {
return []; return [];
@ -280,6 +280,7 @@ export class MastoConverters {
: ''; : '';
const reblogged = await this.mastodonDataService.hasReblog(note.id, me); const reblogged = await this.mastodonDataService.hasReblog(note.id, me);
const reactions = await Promise.all(status.emoji_reactions.map(r => this.convertReaction(r)));
// noinspection ES6MissingAwait // noinspection ES6MissingAwait
return await awaitAll({ return await awaitAll({
@ -312,8 +313,8 @@ export class MastoConverters {
application: null, //FIXME application: null, //FIXME
language: null, //FIXME language: null, //FIXME
pinned: false, //FIXME pinned: false, //FIXME
reactions: status.emoji_reactions, reactions,
emoji_reactions: status.emoji_reactions, emoji_reactions: reactions,
bookmarked: false, //FIXME bookmarked: false, //FIXME
quote: isQuote ? await this.convertReblog(status.reblog, me) : null, quote: isQuote ? await this.convertReblog(status.reblog, me) : null,
edited_at: note.updatedAt?.toISOString() ?? null, edited_at: note.updatedAt?.toISOString() ?? null,
@ -338,6 +339,13 @@ export class MastoConverters {
type: notification.type, type: notification.type,
}; };
} }
public async convertReaction(reaction: Entity.Reaction): Promise<Entity.Reaction> {
if (reaction.accounts) {
reaction.accounts = await Promise.all(reaction.accounts.map(a => this.convertAccount(a)));
}
return reaction;
}
} }
function simpleConvert<T>(data: T): T { function simpleConvert<T>(data: T): T {
@ -345,12 +353,13 @@ function simpleConvert<T>(data: T): T {
return Object.assign({}, data); return Object.assign({}, data);
} }
export function convertAccount(account: Entity.Account) { export function convertAnnouncement(announcement: Entity.Announcement): MastodonEntity.Announcement {
return simpleConvert(account); return {
} ...announcement,
export function convertAnnouncement(announcement: Entity.Announcement) { updated_at: announcement.updated_at ?? announcement.published_at,
return simpleConvert(announcement); };
} }
export function convertAttachment(attachment: Entity.Attachment): MastodonEntity.Attachment { export function convertAttachment(attachment: Entity.Attachment): MastodonEntity.Attachment {
const { width, height } = attachment.meta?.original ?? attachment.meta ?? {}; const { width, height } = attachment.meta?.original ?? attachment.meta ?? {};
const size = (width && height) ? `${width}x${height}` : undefined; const size = (width && height) ? `${width}x${height}` : undefined;
@ -376,28 +385,24 @@ export function convertAttachment(attachment: Entity.Attachment): MastodonEntity
} : null, } : null,
}; };
} }
export function convertFilter(filter: Entity.Filter) { export function convertFilter(filter: Entity.Filter): MastodonEntity.Filter {
return simpleConvert(filter); return simpleConvert(filter);
} }
export function convertList(list: Entity.List) { export function convertList(list: Entity.List): MastodonEntity.List {
return simpleConvert(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); return simpleConvert(tag);
} }
export function convertPoll(poll: Entity.Poll) { export function convertPoll(poll: Entity.Poll): MastodonEntity.Poll {
return simpleConvert(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 // Megalodon sometimes returns broken / stubbed relationship data
export function convertRelationship(relationship: Partial<Entity.Relationship> & { id: string }): MastodonEntity.Relationship { export function convertRelationship(relationship: Partial<Entity.Relationship> & { id: string }): MastodonEntity.Relationship {
return { return {
@ -420,6 +425,6 @@ export function convertRelationship(relationship: Partial<Entity.Relationship> &
} }
// noinspection JSUnusedGlobalSymbols // noinspection JSUnusedGlobalSymbols
export function convertStatusSource(status: Entity.StatusSource) { export function convertStatusSource(status: Entity.StatusSource): MastodonEntity.StatusSource {
return simpleConvert(status); return simpleConvert(status);
} }