From 7dd8eaef61b390fcfa4c8f8f8dfa7977115b8110 Mon Sep 17 00:00:00 2001 From: Dustin Brett Date: Thu, 23 Jan 2025 20:26:11 -0800 Subject: [PATCH] Make cover art grabber generic --- .../system/Files/FileEntry/functions.ts | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/components/system/Files/FileEntry/functions.ts b/components/system/Files/FileEntry/functions.ts index 0e252484..c2775c54 100644 --- a/components/system/Files/FileEntry/functions.ts +++ b/components/system/Files/FileEntry/functions.ts @@ -261,6 +261,32 @@ const getIconsFromCache = (fs: FSModule, path: string): Promise => ); }); +export const getCoverArt = async ( + buffer: Buffer, + signal?: AbortSignal +): Promise => { + if (signal?.aborted) return undefined; + + try { + const { parseBuffer, selectCover } = await import("music-metadata-browser"); + const { common: { picture } = {} } = await parseBuffer( + buffer, + { mimeType: MP3_MIME_TYPE, size: buffer.length }, + { skipPostHeaders: true } + ); + + if (signal?.aborted) return undefined; + + const { data: coverPicture } = selectCover(picture) || {}; + + return coverPicture; + } catch { + // Ignore failure to get cover art + } + + return undefined; +}; + export const getInfoWithoutExtension = ( fs: FSModule, rootFs: RootFileSystem, @@ -539,28 +565,11 @@ export const getInfoWithExtension = ( (signal) => fs.readFile(path, (error, contents = Buffer.from("")) => { if (!error && !signal.aborted) { - import("music-metadata-browser").then( - ({ parseBuffer, selectCover }) => { - if (signal.aborted) return; - - parseBuffer( - contents, - { - mimeType: MP3_MIME_TYPE, - size: contents.length, - }, - { skipPostHeaders: true } - ).then(({ common: { picture } = {} }) => { - if (signal.aborted) return; - - const { data: coverPicture } = selectCover(picture) || {}; - - if (coverPicture) { - getInfoByFileExtension(bufferToUrl(coverPicture)); - } - }); + getCoverArt(contents, signal).then((coverPicture) => { + if (coverPicture) { + getInfoByFileExtension(bufferToUrl(coverPicture)); } - ); + }); } }) );