diff --git a/src/views/mastodon/relationships.ts b/src/views/mastodon/relationships.ts index e5ce2807..ca2778b9 100644 --- a/src/views/mastodon/relationships.ts +++ b/src/views/mastodon/relationships.ts @@ -2,13 +2,18 @@ import { eventsDB } from '@/db/events.ts'; import { hasTag } from '@/tags.ts'; async function renderRelationship(sourcePubkey: string, targetPubkey: string) { - const [event3, target3, event10000, target10000] = await eventsDB.getEvents([ + const events = await eventsDB.getEvents([ { kinds: [3], authors: [sourcePubkey], limit: 1 }, { kinds: [3], authors: [targetPubkey], limit: 1 }, { kinds: [10000], authors: [sourcePubkey], limit: 1 }, { kinds: [10000], authors: [targetPubkey], limit: 1 }, ]); + const event3 = events.find((event) => event.kind === 3 && event.pubkey === sourcePubkey); + const target3 = events.find((event) => event.kind === 3 && event.pubkey === targetPubkey); + const event10000 = events.find((event) => event.kind === 10000 && event.pubkey === sourcePubkey); + const target10000 = events.find((event) => event.kind === 10000 && event.pubkey === targetPubkey); + return { id: targetPubkey, following: event3 ? hasTag(event3.tags, ['p', targetPubkey]) : false, diff --git a/src/views/mastodon/statuses.ts b/src/views/mastodon/statuses.ts index b49be496..d8695633 100644 --- a/src/views/mastodon/statuses.ts +++ b/src/views/mastodon/statuses.ts @@ -30,14 +30,23 @@ async function renderStatus(event: DittoEvent<1>, viewerPubkey?: string) { const { html, links, firstUrl } = parseNoteContent(event.content); - const [mentions, card, [repostEvent], [reactionEvent]] = await Promise + const [mentions, card, relatedEvents] = await Promise .all([ Promise.all(mentionedPubkeys.map(toMention)), firstUrl ? unfurlCardCached(firstUrl) : null, - viewerPubkey ? eventsDB.getEvents([{ kinds: [6], '#e': [event.id], authors: [viewerPubkey] }], { limit: 1 }) : [], - viewerPubkey ? eventsDB.getEvents([{ kinds: [7], '#e': [event.id], authors: [viewerPubkey] }], { limit: 1 }) : [], + viewerPubkey + ? await eventsDB.getEvents([ + { kinds: [6], '#e': [event.id], authors: [viewerPubkey], limit: 1 }, + { kinds: [7], '#e': [event.id], authors: [viewerPubkey], limit: 1 }, + { kinds: [10003], '#e': [event.id], authors: [viewerPubkey], limit: 1 }, + ]) + : [], ]); + const reactionEvent = relatedEvents.find((event) => event.kind === 6); + const repostEvent = relatedEvents.find((event) => event.kind === 7); + const bookmarkEvent = relatedEvents.find((event) => event.kind === 10003); + const content = buildInlineRecipients(mentions) + html; const cw = event.tags.find(isCWTag); @@ -69,7 +78,7 @@ async function renderStatus(event: DittoEvent<1>, viewerPubkey?: string) { favourited: reactionEvent?.content === '+', reblogged: Boolean(repostEvent), muted: false, - bookmarked: false, + bookmarked: Boolean(bookmarkEvent), reblog: null, application: null, media_attachments: media.map(renderAttachment),