fix(yt): én hentning ad gangen, nye forsøg ved 403, genoptag afbrudte
Tre fejl, der forstærkede hinanden: - Hver tilføjelse startede sin egen kø-tømning, så flere hentninger kørte samtidig (og natlig timer kunne køre oveni). Mange samtidige hentninger fra samme IP er netop det YouTube svarer 403 på. Køen har nu en fil-lås (yt_koe.lock), så kun én kørsel henter, også på tværs af processer. - yt-dlp gentager ikke selv en 403. Midlertidige fejl (403/429/timeout) prøves nu igen op til to gange med pause og en anden YouTube-klient (tv,web_safari og mweb). Permanente fejl prøves ikke igen. - Et job der stod som "running", da portalen genstartede, blev hængende for altid. Med låsen ved vi, at et sådant job er afbrudt, og det lægges i kø igen ved næste kørsel. Fejlede job har en "Prøv igen"-knap (og "Prøv alle fejlede igen"), og den natlige kørsel opdaterer yt-dlp, før den henter. Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
This commit is contained in:
@@ -13,11 +13,27 @@ import asyncio
|
||||
import ytdl
|
||||
|
||||
|
||||
async def opdater_ytdlp():
|
||||
"""YouTube ændrer ofte noget, der giver 403, indtil yt-dlp er opdateret.
|
||||
Derfor opdateres den hver nat, før der hentes."""
|
||||
try:
|
||||
proc = await asyncio.create_subprocess_exec(
|
||||
ytdl.config.YT_DLP_BIN, "-U",
|
||||
stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT)
|
||||
out, _ = await asyncio.wait_for(proc.communicate(), timeout=180)
|
||||
sidste = (out.decode("utf-8", "replace").strip().splitlines() or [""])[-1]
|
||||
print(f"yt_job: yt-dlp -U: {sidste[:160]}")
|
||||
except Exception as e: # noqa: BLE001
|
||||
print(f"yt_job: yt-dlp kunne ikke opdateres: {e}")
|
||||
|
||||
|
||||
async def main():
|
||||
if not ytdl.configured():
|
||||
print("yt_job: ikke konfigureret (mangler EMBY-env, yt-dlp eller download-mappe)")
|
||||
return
|
||||
|
||||
await opdater_ytdlp()
|
||||
|
||||
sub = await ytdl.sync_subs()
|
||||
if sub["checked"] or sub["errors"]:
|
||||
print(f"yt_job: abonnementer tjekket={sub['checked']} nye_i_koe={sub['queued']}")
|
||||
|
||||
Reference in New Issue
Block a user