From 4804023a988a5f20babc3574205b2e501ed9055f Mon Sep 17 00:00:00 2001 From: Honey Date: Fri, 19 Jun 2026 10:23:59 +0200 Subject: [PATCH] fix(backend): don't abort cascade on yt-dlp non-zero exit (e.g. video not available) spawnYtdlp now always resolves so the hasAudio() cascade continues when a single YTM result is geo-blocked or unavailable. Error is still logged. Co-Authored-By: Claude Sonnet 4.6 --- backend/lib/ytdlp.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/lib/ytdlp.js b/backend/lib/ytdlp.js index 4f5067f..2155b67 100644 --- a/backend/lib/ytdlp.js +++ b/backend/lib/ytdlp.js @@ -173,10 +173,13 @@ async function downloadTrack({ jobId, artist, rawArtist, albumArtist, title, alb .filter(l => l.trim() && !l.startsWith('[debug]')) .forEach(l => log(jobId, l.trim())); }); - proc.on('error', reject); - proc.on('close', code => - (code === 0 || code === 101) ? resolve() : reject(new Error(`yt-dlp code ${code}: ${stderr.slice(-300)}`)) - ); + proc.on('error', resolve); + proc.on('close', code => { + // Treat all non-zero exits as "no result" so the cascade continues. + // Fatal errors (network, bad args) are logged via stderr above; hasAudio() decides outcome. + if (code !== 0 && code !== 101) log(jobId, `⚠️ yt-dlp exit ${code}: ${stderr.slice(-200).trim()}`); + resolve(); + }); }); const YTM_SONGS_PARAM = 'EgWKAQIIAWoKEAkQBRAKEAMQBA%3D%3D';