yt-dlp/ffmpeg: reinstall latest on failure, retry once
오래된 yt-dlp/ffmpeg 가 유튜브 변경을 못 따라가 다운로드가 실패할 때 최신 버전으로 강제 재설치 후 한 번 더 시도한다. - server youtube.ts: ensureYtDlp(force) 추가(캐시·zipapp 삭제 후 최신 재다운로드). fetchVideoMeta/fetchPlaylistEntries 를 runYtDlp 로 묶어 1차 실패 시 강제 재설치 후 재시도. - installer ytdlp.ts/ffmpeg.ts: ensure*Exe(log, force) 추가. - installer main.ts: 음악 워커가 곡 다운로드 실패 시 전역 1회 강제 재설치 (refreshBinariesOnce) 후 해당 곡을 1회 재시도.
This commit is contained in:
@@ -50,14 +50,20 @@ let installPromise: Promise<string> | null = null
|
||||
* ffmpeg.exe 만 추출해 설치하고 절대경로를 돌려준다.
|
||||
*/
|
||||
export async function ensureFfmpegExe(
|
||||
log?: (line: string) => void
|
||||
log?: (line: string) => void,
|
||||
force = false
|
||||
): Promise<string> {
|
||||
const target = getFfmpegExePath()
|
||||
await migrateLegacyExe(target)
|
||||
if (await canExecute(target)) {
|
||||
if (!force && await canExecute(target)) {
|
||||
log?.(t('log.ffmpegExists', { path: target }))
|
||||
return target
|
||||
}
|
||||
if (force) {
|
||||
// 강제 재설치: 오래됐을 수 있는 캐시본을 지워 최신 버전을 받게 한다.
|
||||
log?.(t('log.ffmpegReinstall'))
|
||||
try { await fs.unlink(target) } catch { /* noop */ }
|
||||
}
|
||||
if (installPromise) return installPromise
|
||||
|
||||
installPromise = (async () => {
|
||||
|
||||
Reference in New Issue
Block a user