From 325387e386c7b95ea4b6af1c9b704a2308c9bb72 Mon Sep 17 00:00:00 2001 From: morawskidotmy Date: Fri, 30 Jan 2026 13:21:35 +0100 Subject: [PATCH] parallel torrent searching instead of for loop --- src/lib/modules/extensions/extensions.ts | 39 +++++++++++++++--------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/lib/modules/extensions/extensions.ts b/src/lib/modules/extensions/extensions.ts index a7e6383b..d752afce 100644 --- a/src/lib/modules/extensions/extensions.ts +++ b/src/lib/modules/extensions/extensions.ts @@ -211,29 +211,38 @@ export const extensions = new class Extensions { debug(`Checking ${extensions.size} extensions for ${media.id}:${media.title?.userPreferred} ${episode} ${resolution} ${checkMovie ? 'movie' : ''} ${checkBatch ? 'batch' : ''}`) + const extensionPromises: Array> = [] + for (const [id, worker] of extensions.entries()) { const thisExtOpts = extopts[id]! if (!thisExtOpts.enabled) continue if (configs[id]!.type !== 'torrent') continue - try { - const promises: Array> = [] - promises.push(worker.single(options, thisExtOpts.options)) - if (checkMovie) promises.push(worker.movie(options, thisExtOpts.options)) - if (checkBatch) promises.push(worker.batch(options, thisExtOpts.options)) - - for (const result of await Promise.allSettled(promises)) { - if (result.status === 'fulfilled') { - results.push(...result.value.map(v => ({ ...v, extension: new Set([id]), parseObject: {} as unknown as AnitomyResult }))) - } else { - console.error(result.reason, id) - errors.push({ error: result.reason as unknown as Error, extension: id }) + + const extensionPromise = (async () => { + try { + const promises: Array> = [] + promises.push(worker.single(options, thisExtOpts.options)) + if (checkMovie) promises.push(worker.movie(options, thisExtOpts.options)) + if (checkBatch) promises.push(worker.batch(options, thisExtOpts.options)) + + for (const result of await Promise.allSettled(promises)) { + if (result.status === 'fulfilled') { + results.push(...result.value.map(v => ({ ...v, extension: new Set([id]), parseObject: {} as unknown as AnitomyResult }))) + } else { + console.error(result.reason, id) + errors.push({ error: result.reason as unknown as Error, extension: id }) + } } + } catch (error) { + errors.push({ error: error as Error, extension: id }) } - } catch (error) { - errors.push({ error: error as Error, extension: id }) - } + })() + + extensionPromises.push(extensionPromise) } + await Promise.all(extensionPromises) + try { const library = await native.library() const entry = library.find(lib => lib.mediaID === media.id && lib.episode === episode)