From 83abbdb25a7d8192e92bdb9dbcbc9f4db66ca21a Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Sun, 12 Mar 2023 19:11:54 +0200 Subject: [PATCH] add caching to getCoverBuffer when downloading an album, will no longer re-download an encode identical cover images --- plugins/downloader/back.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/plugins/downloader/back.js b/plugins/downloader/back.js index 150a06c7..044ba3f9 100644 --- a/plugins/downloader/back.js +++ b/plugins/downloader/back.js @@ -23,6 +23,13 @@ const ffmpeg = require("@ffmpeg/ffmpeg").createFFmpeg({ }); const ffmpegMutex = new Mutex(); +const cache = { + getCoverBuffer: { + buffer: null, + url: null, + } +} + const config = require("./config"); /** @type {Innertube} */ @@ -189,13 +196,25 @@ async function iterableStreamToMP3(stream, metadata, content_length, sendFeedbac } } +async function getCoverBuffer(url) { + const store = cache.getCoverBuffer; + if (store.url === url) { + return store.buffer; + } + store.url = url; + + const nativeImage = cropMaxWidth(await getImage(url)); + store.buffer = nativeImage && !nativeImage.isEmpty() ? + nativeImage.toPNG() : null; + + return store.buffer; +} + async function writeID3(buffer, metadata, sendFeedback) { try { sendFeedback("Writing ID3 tags..."); - const nativeImage = cropMaxWidth(await getImage(metadata.image)); - const coverBuffer = nativeImage && !nativeImage.isEmpty() ? - nativeImage.toPNG() : null; + const coverBuffer = await getCoverBuffer(metadata.image); const writer = new ID3Writer(buffer);