pub struct Download {
pub urls: Vec<String>,
pub progress: Option<crate::Progress>,
pub file_name: std::path::PathBuf,
pub verify_callback: crate::Verify,
}
fn file_name_from_url(url: &str) -> std::path::PathBuf {
if url.is_empty() {
return std::path::PathBuf::new();
}
let Ok(url) = reqwest::Url::parse(url) else { return std::path::PathBuf::new() };
url.path_segments().map_or_else(std::path::PathBuf::new, |f| std::path::PathBuf::from(f.last().unwrap_or("")))
}
impl Download {
#[must_use]
pub fn new(url: &str) -> Self {
Self {
urls: vec![url.to_owned()],
progress: None,
file_name: file_name_from_url(url),
verify_callback: crate::verify::noop(),
}
}
#[must_use]
pub fn new_mirrored(urls: &[&str]) -> Self {
let urls: Vec<String> = urls.iter().map(|s| String::from(*s)).collect();
let url = urls.get(0).unwrap_or(&String::new()).clone();
Self {
urls,
progress: None,
file_name: file_name_from_url(&url),
verify_callback: crate::verify::noop(),
}
}
#[must_use]
pub fn file_name(mut self, path: &std::path::Path) -> Self {
self.file_name = path.to_owned();
self
}
#[must_use]
pub fn progress(mut self, progress: crate::Progress) -> Self {
self.progress = Some(progress);
self
}
#[must_use]
pub fn verify(mut self, func: crate::Verify) -> Self {
self.verify_callback = func;
self
}
}