From fa59e0c0e5a7c173e022516cc134b1dd8a649882 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 23 Sep 2025 10:50:53 +0300 Subject: [PATCH] fix(yt): cookies --- Cargo.lock | 1 - Cargo.toml | 1 - docker-compose.yml | 3 +-- src/download.rs | 43 +++++++++++++++++++++++++++---------------- src/error.rs | 3 --- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f9e85b3..592b21a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1746,7 +1746,6 @@ dependencies = [ "rand", "regex", "serde", - "shlex", "teloxide", "tempfile", "thiserror 2.0.16", diff --git a/Cargo.toml b/Cargo.toml index 136d03f..965a5a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ infer = "0.19" rand = "0.9" regex = "1.11" serde = { version = "1.0", features = ["derive"] } -shlex = "1.3.0" teloxide = { version = "0.17", features = ["macros"] } tempfile = "3" thiserror = "2.0" diff --git a/docker-compose.yml b/docker-compose.yml index c531164..b24963b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,9 +8,8 @@ services: environment: TELOXIDE_TOKEN: ${TELOXIDE_TOKEN} COOKIES_PATH: ${COOKIES_PATH:-/app/yt-cookies.txt} - COOKIES: ${COOKIES:-false} RUST_LOG: ${RUST_LOG:-info} restart: unless-stopped volumes: - ./comments.txt:/app/comments.txt:ro - - /etc/secrets/yt-cookies.txt:/app/yt-cookies.txt:ro + - /etc/secrets/yt-cookies.txt:/app/yt-cookies.txt diff --git a/src/download.rs b/src/download.rs index bc11624..793b8b1 100644 --- a/src/download.rs +++ b/src/download.rs @@ -121,22 +121,24 @@ pub async fn download_instaloader(shortcode: &str) -> Result { run_command_in_tempdir("instaloader", &args).await } -/// Download a URL with yt-dlp. `format` can be "best" or a merged selector -/// like "bestvideo[ext=mp4]+bestaudio/best". +/// Download a URL with yt-dlp. /// /// # Errors /// /// - Propagates `run_command_in_tempdir` errors. -pub async fn download_ytdlp(url: &str, cookies: Option<&str>) -> Result { +pub async fn download_ytdlp>( + url: &str, + cookies_path: Option

, +) -> Result { let default_format = "bestvideo[ext=mp4][vcodec^=avc1]+bestaudio/best"; let format_selector = env::var("YTDLP_FORMAT").unwrap_or_else(|_| default_format.into()); - let mut args = vec![ + let base_args = [ "--no-playlist", "--merge-output-format", "mp4", "-f", - &format_selector, + // format_selector "--restrict-filenames", "-o", "%(id)s.%(ext)s", @@ -144,22 +146,31 @@ pub async fn download_ytdlp(url: &str, cookies: Option<&str>) -> Result() - .unwrap_or(false); - if with_cookies && let Some(cookie_path) = cookies { - if Path::new(cookie_path).exists() { - args.extend(["--cookies", cookie_path]); + let mut args = base_args + .iter() + .map(ToString::to_string) + .collect::>(); + + match args.iter().position(|s| s == "-f") { + Some(pos) => args.insert(pos + 1, format_selector), + None => args.extend(["-f".into(), format_selector]), + } + + if let Some(cookie_path) = cookies_path { + let path = cookie_path.as_ref(); + let path_str = path.to_string_lossy().to_string(); + if path.exists() { + args.extend(["--cookies".into(), path_str]); } else { - warn!("Cookies file not found: {cookie_path}"); + warn!("Cookies file not found: {path_str}"); } } - let quoted_url = shlex::try_quote(url)?; - args.push("ed_url); + args.push(url.into()); - run_command_in_tempdir("yt-dlp", &args).await + let args_ref = args.iter().map(String::as_ref).collect::>(); + + run_command_in_tempdir("yt-dlp", &args_ref).await } /// Post-process a `DownloadResult`. diff --git a/src/error.rs b/src/error.rs index d71979b..d68306d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -29,9 +29,6 @@ pub enum Error { #[error("rate limit exceeded")] RateLimit, - #[error("")] - QuoteError(#[from] shlex::QuoteError), - #[error("other: {0}")] Other(String), }