refactor!: add client_type field to DownloadError, rename cli option po-token-cache to pot-cache

This commit is contained in:
ThetaDev 2025-02-06 13:47:10 +01:00
parent 5f5ac65ce9
commit 594e675b39
No known key found for this signature in database
GPG key ID: E319D3C5148D65B6
4 changed files with 23 additions and 11 deletions

View file

@ -146,6 +146,7 @@ Fetch a list of all the items saved in your YouTube/YouTube Music profile.
given path for generating PO tokens given path for generating PO tokens
- `--no-botguard` Disable Botguard, only download videos using clients that dont require - `--no-botguard` Disable Botguard, only download videos using clients that dont require
it it
- `--pot-cache` Enable caching for session-bound PO tokens
### Output format ### Output format

View file

@ -72,7 +72,7 @@ struct Cli {
no_botguard: bool, no_botguard: bool,
/// Enable caching for session-bound PO tokens /// Enable caching for session-bound PO tokens
#[clap(long, global = true)] #[clap(long, global = true)]
po_token_cache: bool, pot_cache: bool,
} }
#[derive(Parser)] #[derive(Parser)]
@ -916,7 +916,7 @@ async fn run() -> anyhow::Result<()> {
if cli.no_botguard { if cli.no_botguard {
rp = rp.no_botguard(); rp = rp.no_botguard();
} }
if cli.po_token_cache { if cli.pot_cache {
rp = rp.po_token_cache(); rp = rp.po_token_cache();
} }
if cli.auth { if cli.auth {

View file

@ -13,8 +13,13 @@ pub enum DownloadError {
#[error("http error: {0}")] #[error("http error: {0}")]
Http(#[from] reqwest::Error), Http(#[from] reqwest::Error),
/// 403 error trying to download video /// 403 error trying to download video
#[error("YouTube returned 403 error; visitor_data={}", .1.as_deref().unwrap_or_default())] #[error("YouTube returned 403 error; visitor_data={}", .visitor_data.as_deref().unwrap_or_default())]
Forbidden(ClientType, Option<String>), Forbidden {
/// Client type used to fetch the failed stream
client_type: ClientType,
/// Visitor data used to fetch the failed stream
visitor_data: Option<String>,
},
/// File IO error /// File IO error
#[error(transparent)] #[error(transparent)]
Io(#[from] std::io::Error), Io(#[from] std::io::Error),

View file

@ -660,9 +660,15 @@ impl DownloadQuery {
.await .await
{ {
Ok(res) => return Ok(res), Ok(res) => return Ok(res),
Err(DownloadError::Forbidden(c, vd)) => { Err(DownloadError::Forbidden {
failed_client = Some(c); client_type,
DownloadError::Forbidden(c, vd) visitor_data,
}) => {
failed_client = Some(client_type);
DownloadError::Forbidden {
client_type,
visitor_data,
}
} }
Err(DownloadError::Http(e)) => { Err(DownloadError::Http(e)) => {
if !e.is_timeout() { if !e.is_timeout() {
@ -842,10 +848,10 @@ impl DownloadQuery {
if let Some(vd) = &player_data.visitor_data { if let Some(vd) = &player_data.visitor_data {
q.remove_visitor_data(vd); q.remove_visitor_data(vd);
} }
return DownloadError::Forbidden( return DownloadError::Forbidden {
player_data.client_type, client_type: player_data.client_type,
player_data.visitor_data.clone(), visitor_data: player_data.visitor_data.clone(),
); };
} }
} }
e e