From c8b999a1f7a808e89aab968c24ae2bf467fb4a8f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 18 May 2024 15:36:17 -0500 Subject: [PATCH] imeta: don't get attachment ID from a tag --- src/upload.ts | 13 ++++--------- src/views/mastodon/attachments.ts | 14 +++++--------- src/views/mastodon/statuses.ts | 2 +- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/upload.ts b/src/upload.ts index d815bd8..40184f0 100644 --- a/src/upload.ts +++ b/src/upload.ts @@ -1,5 +1,5 @@ import { Conf } from '@/config.ts'; -import { insertUnattachedMedia } from '@/db/unattached-media.ts'; +import { insertUnattachedMedia, UnattachedMedia } from '@/db/unattached-media.ts'; import { configUploader as uploader } from '@/uploaders/config.ts'; interface FileMeta { @@ -8,7 +8,7 @@ interface FileMeta { } /** Upload a file, track it in the database, and return the resulting media object. */ -async function uploadFile(file: File, meta: FileMeta, signal?: AbortSignal): Promise { +async function uploadFile(file: File, meta: FileMeta, signal?: AbortSignal): Promise { const { type, size } = file; const { pubkey, description } = meta; @@ -36,18 +36,13 @@ async function uploadFile(file: File, meta: FileMeta, signal?: AbortSignal): Pro data.push(['alt', description]); } - const uuid = crypto.randomUUID(); - data.push(['uuid', uuid]); - - await insertUnattachedMedia({ - id: uuid, + return insertUnattachedMedia({ + id: crypto.randomUUID(), pubkey, url, data, uploaded_at: Date.now(), }); - - return data; } export { uploadFile }; diff --git a/src/views/mastodon/attachments.ts b/src/views/mastodon/attachments.ts index 9f8e5c3..273b460 100644 --- a/src/views/mastodon/attachments.ts +++ b/src/views/mastodon/attachments.ts @@ -1,21 +1,17 @@ -import * as TypeFest from 'type-fest'; +/** Render Mastodon media attachment. */ +function renderAttachment(media: { id?: string; data: string[][] }) { + const { id, data: tags } = media; -import { UnattachedMedia } from '@/db/unattached-media.ts'; - -type DittoAttachment = TypeFest.SetOptional; - -function renderAttachment(tags: string[][]) { const m = tags.find(([name]) => name === 'm')?.[1]; const url = tags.find(([name]) => name === 'url')?.[1]; const alt = tags.find(([name]) => name === 'alt')?.[1]; const cid = tags.find(([name]) => name === 'cid')?.[1]; - const uuid = tags.find(([name]) => name === 'uuid')?.[1]; const blurhash = tags.find(([name]) => name === 'blurhash')?.[1]; if (!url) return; return { - id: uuid ?? url, + id: id ?? url, type: getAttachmentType(m ?? ''), url, preview_url: url, @@ -40,4 +36,4 @@ function getAttachmentType(mime: string): string { } } -export { type DittoAttachment, renderAttachment }; +export { renderAttachment }; diff --git a/src/views/mastodon/statuses.ts b/src/views/mastodon/statuses.ts index 16ba482..c674e16 100644 --- a/src/views/mastodon/statuses.ts +++ b/src/views/mastodon/statuses.ts @@ -106,7 +106,7 @@ async function renderStatus(event: DittoEvent, opts: RenderStatusOpts): Promise< pinned: Boolean(pinEvent), reblog: null, application: null, - media_attachments: media.map(renderAttachment).filter(Boolean), + media_attachments: media.map((m) => renderAttachment({ data: m })).filter(Boolean), mentions, tags: [], emojis: renderEmojis(event),