fdsfjlk
This commit is contained in:
@@ -29,6 +29,7 @@ import tempfile
|
||||
import time
|
||||
import logging
|
||||
import re
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
@@ -259,6 +260,53 @@ def _run_op(op: str, data: Any) -> Dict[str, Any]:
|
||||
with yt_dlp.YoutubeDL(ydl_opts) as ydl: # type: ignore[attr-defined]
|
||||
info = ydl.extract_info(url, download=False)
|
||||
|
||||
# Debug: dump a short summary of the format list to the helper log.
|
||||
try:
|
||||
formats_any = info.get("formats") if isinstance(info, dict) else None
|
||||
count = len(formats_any) if isinstance(formats_any, list) else 0
|
||||
_append_helper_log(f"[ytdlp-formats] extracted formats count={count} url={url}")
|
||||
|
||||
if isinstance(formats_any, list) and formats_any:
|
||||
limit = 60
|
||||
for i, f in enumerate(formats_any[:limit], start=1):
|
||||
if not isinstance(f, dict):
|
||||
continue
|
||||
fid = str(f.get("format_id") or "")
|
||||
ext = str(f.get("ext") or "")
|
||||
note = f.get("format_note") or f.get("format") or ""
|
||||
vcodec = str(f.get("vcodec") or "")
|
||||
acodec = str(f.get("acodec") or "")
|
||||
size = f.get("filesize") or f.get("filesize_approx")
|
||||
res = str(f.get("resolution") or "")
|
||||
if not res:
|
||||
try:
|
||||
w = f.get("width")
|
||||
h = f.get("height")
|
||||
if w and h:
|
||||
res = f"{int(w)}x{int(h)}"
|
||||
elif h:
|
||||
res = f"{int(h)}p"
|
||||
except Exception:
|
||||
res = ""
|
||||
_append_helper_log(
|
||||
f"[ytdlp-format {i:02d}] id={fid} ext={ext} res={res} note={note} codecs={vcodec}/{acodec} size={size}"
|
||||
)
|
||||
if count > limit:
|
||||
_append_helper_log(f"[ytdlp-formats] (truncated; total={count})")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Optional: dump the full extracted JSON for inspection.
|
||||
try:
|
||||
dump = os.environ.get("MEDEIA_MPV_YTDLP_DUMP", "").strip()
|
||||
if dump and dump != "0" and isinstance(info, dict):
|
||||
h = hashlib.sha1(url.encode("utf-8", errors="replace")).hexdigest()[:10]
|
||||
out_path = _repo_root() / "Log" / f"ytdlp-probe-{h}.json"
|
||||
out_path.write_text(json.dumps(info, ensure_ascii=False, indent=2), encoding="utf-8", errors="replace")
|
||||
_append_helper_log(f"[ytdlp-formats] wrote probe json: {out_path}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not isinstance(info, dict):
|
||||
return {
|
||||
"success": False,
|
||||
@@ -577,7 +625,9 @@ def main(argv: Optional[list[str]] = None) -> int:
|
||||
# Mirror mpv's own log messages into our helper log file so debugging does
|
||||
# not depend on the mpv on-screen console or mpv's log-file.
|
||||
try:
|
||||
level = "debug" if debug_enabled else "warn"
|
||||
# IMPORTANT: mpv debug logs can be extremely chatty (especially ytdl_hook)
|
||||
# and can starve request handling. Default to warn unless explicitly overridden.
|
||||
level = os.environ.get("MEDEIA_MPV_HELPER_MPVLOG", "").strip() or "warn"
|
||||
client.send_command_no_wait(["request_log_messages", level])
|
||||
_append_helper_log(f"[helper] requested mpv log messages level={level}")
|
||||
except Exception:
|
||||
@@ -666,8 +716,17 @@ def main(argv: Optional[list[str]] = None) -> int:
|
||||
if msg.get("id") != OBS_ID_REQUEST:
|
||||
continue
|
||||
|
||||
req = _parse_request(msg.get("data"))
|
||||
raw = msg.get("data")
|
||||
req = _parse_request(raw)
|
||||
if not req:
|
||||
try:
|
||||
if isinstance(raw, str) and raw.strip():
|
||||
snippet = raw.strip().replace("\r", "").replace("\n", " ")
|
||||
if len(snippet) > 220:
|
||||
snippet = snippet[:220] + "…"
|
||||
_append_helper_log(f"[request-raw] could not parse request json: {snippet}")
|
||||
except Exception:
|
||||
pass
|
||||
continue
|
||||
|
||||
req_id = str(req.get("id") or "")
|
||||
|
||||
Reference in New Issue
Block a user