funkwhale/front/src/ui/workers/file-metadata-parser.ts

34 lines
779 B
TypeScript

/// <reference lib="webworker" />
import { getCoverUrl, getTags, type Tags } from '~/ui/composables/metadata'
export interface MetadataParsingSuccess {
id: string
status: 'success'
tags: Tags
coverUrl: string | undefined
}
export interface MetadataParsingFailure {
id: string
status: 'failure'
error: Error
}
export type MetadataParsingResult = MetadataParsingSuccess | MetadataParsingFailure
const parse = async (id: string, file: File) => {
try {
const tags = await getTags(file)
const coverUrl = await getCoverUrl(tags)
postMessage({ id, status: 'success', tags, coverUrl })
} catch (error) {
postMessage({ id, status: 'failure', error })
}
}
addEventListener('message', async (event) => {
parse(event.data.id, event.data.file)
})