huge refactor of the entire codebase, with the goal of improving maintainability, readability, and extensibility. This commit includes changes to almost every file in the project, including:
This commit is contained in:
+13
-47
@@ -154,47 +154,7 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
|
||||
|
||||
if urls_to_download and len(urls_to_download) >= 2:
|
||||
try:
|
||||
# Compute a batch hint (audio vs video + single-format id) once.
|
||||
mode_hint: Optional[str] = None
|
||||
forced_format: Optional[str] = None
|
||||
try:
|
||||
from tool.ytdlp import YtDlpTool, list_formats
|
||||
|
||||
sample_url = urls_to_download[0]
|
||||
cookiefile = None
|
||||
try:
|
||||
cookie_path = YtDlpTool(config).resolve_cookiefile()
|
||||
if cookie_path is not None and cookie_path.is_file():
|
||||
cookiefile = str(cookie_path)
|
||||
except Exception:
|
||||
cookiefile = None
|
||||
|
||||
fmts = list_formats(
|
||||
sample_url,
|
||||
no_playlist=False,
|
||||
playlist_items=None,
|
||||
cookiefile=cookiefile
|
||||
)
|
||||
if isinstance(fmts, list) and fmts:
|
||||
has_video = False
|
||||
for f in fmts:
|
||||
if not isinstance(f, dict):
|
||||
continue
|
||||
vcodec = str(f.get("vcodec", "none") or "none").strip().lower()
|
||||
if vcodec and vcodec != "none":
|
||||
has_video = True
|
||||
break
|
||||
mode_hint = "video" if has_video else "audio"
|
||||
|
||||
if len(fmts) == 1 and isinstance(fmts[0], dict):
|
||||
fid = str(fmts[0].get("format_id") or "").strip()
|
||||
if fid:
|
||||
forced_format = fid
|
||||
except Exception:
|
||||
mode_hint = None
|
||||
forced_format = None
|
||||
|
||||
from cmdlet.download_file import Download_File
|
||||
from ProviderCore.registry import get_plugin_for_url
|
||||
|
||||
expanded: List[Dict[str, Any]] = []
|
||||
downloaded_any = False
|
||||
@@ -207,12 +167,18 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
|
||||
expanded.append(it)
|
||||
continue
|
||||
|
||||
downloaded = Download_File.download_streaming_url_as_pipe_objects(
|
||||
u,
|
||||
config,
|
||||
mode_hint=mode_hint,
|
||||
ytdl_format_hint=forced_format,
|
||||
)
|
||||
downloaded = []
|
||||
try:
|
||||
plugin = get_plugin_for_url(u, config)
|
||||
except Exception:
|
||||
plugin = None
|
||||
if plugin is not None and hasattr(plugin, "download_url_as_pipe_objects"):
|
||||
try:
|
||||
downloaded = plugin.download_url_as_pipe_objects(u)
|
||||
except TypeError:
|
||||
downloaded = plugin.download_url_as_pipe_objects(u, output_dir=None)
|
||||
except Exception:
|
||||
downloaded = []
|
||||
if downloaded:
|
||||
expanded.extend(downloaded)
|
||||
downloaded_any = True
|
||||
|
||||
Reference in New Issue
Block a user