mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 12:12:00 -06:00
Add option so specify different proxies for api and download requests (#282)
This commit is contained in:
parent
f1d266c940
commit
e3a7fd9246
2 changed files with 85 additions and 38 deletions
|
|
@ -1,13 +1,46 @@
|
|||
use crate::utils::parse::parse_resolution;
|
||||
use crunchyroll_rs::media::Resolution;
|
||||
use regex::Regex;
|
||||
use reqwest::Proxy;
|
||||
|
||||
pub fn clap_parse_resolution(s: &str) -> Result<Resolution, String> {
|
||||
parse_resolution(s.to_string()).map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
pub fn clap_parse_proxy(s: &str) -> Result<Proxy, String> {
|
||||
Proxy::all(s).map_err(|e| e.to_string())
|
||||
pub fn clap_parse_proxies(s: &str) -> Result<(Option<Proxy>, Option<Proxy>), String> {
|
||||
let double_proxy_regex =
|
||||
Regex::new(r"^(?P<first>(https?|socks5h?)://.+):(?P<second>(https?|socks5h?)://.+)$")
|
||||
.unwrap();
|
||||
|
||||
if let Some(capture) = double_proxy_regex.captures(s) {
|
||||
// checks if the input is formatted like 'https://example.com:socks5://examples.com' and
|
||||
// splits the string into 2 separate proxies at the middle colon
|
||||
|
||||
let first = capture.name("first").unwrap().as_str();
|
||||
let second = capture.name("second").unwrap().as_str();
|
||||
Ok((
|
||||
Some(Proxy::all(first).map_err(|e| format!("first proxy: {e}"))?),
|
||||
Some(Proxy::all(second).map_err(|e| format!("second proxy: {e}"))?),
|
||||
))
|
||||
} else if s.starts_with(':') {
|
||||
// checks if the input is formatted like ':https://example.com' and returns a proxy on the
|
||||
// second tuple position
|
||||
Ok((
|
||||
None,
|
||||
Some(Proxy::all(s.trim_start_matches(':')).map_err(|e| e.to_string())?),
|
||||
))
|
||||
} else if s.ends_with(':') {
|
||||
// checks if the input is formatted like 'https://example.com:' and returns a proxy on the
|
||||
// first tuple position
|
||||
Ok((
|
||||
Some(Proxy::all(s.trim_end_matches(':')).map_err(|e| e.to_string())?),
|
||||
None,
|
||||
))
|
||||
} else {
|
||||
// returns the same proxy for both tuple positions
|
||||
let proxy = Proxy::all(s).map_err(|e| e.to_string())?;
|
||||
Ok((Some(proxy.clone()), Some(proxy)))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn clap_parse_speed_limit(s: &str) -> Result<u32, String> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue