From 00444c1d025dc1e1be4c9ea2e75efdf002232f7c Mon Sep 17 00:00:00 2001 From: lifegpc Date: Tue, 15 Mar 2022 19:06:16 +0800 Subject: [PATCH] Put overwrite ask before send requests --- src/download.rs | 36 ++++++++++++++++++++++++++++++++++-- src/webclient.rs | 15 +++++---------- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/download.rs b/src/download.rs index 92f51b5..76f6d1e 100644 --- a/src/download.rs +++ b/src/download.rs @@ -5,6 +5,7 @@ use crate::data::json::JSONDataFile; use crate::gettext; use crate::pixiv_link::PixivID; use crate::pixiv_web::PixivWebClient; +use crate::utils::ask_need_overwrite; use crate::utils::get_file_name_from_url; use crate::webclient::WebClient; use crate::Main; @@ -103,13 +104,31 @@ impl Main { } let file_name = file_name.unwrap(); let file_name = base.join(file_name); + if file_name.exists() { + match pw.helper.overwrite() { + Some(overwrite) => { + if !overwrite { + #[cfg(feature = "exif")] + { + np += 1; + } + continue; + } + } + None => { + if !ask_need_overwrite(file_name.to_str().unwrap()) { + continue; + } + } + } + } let r = pw.download_image(link); if r.is_none() { println!("{} {}", gettext("Failed to download image:"), link); return 1; } let r = r.unwrap(); - let re = WebClient::download_stream(&file_name, r, pw.helper.overwrite()); + let re = WebClient::download_stream(&file_name, r); if re.is_err() { println!("{} {}", gettext("Failed to download image:"), link); return 1; @@ -150,13 +169,26 @@ impl Main { } let file_name = file_name.unwrap(); let file_name = base.join(file_name); + if file_name.exists() { + let overwrite = match pw.helper.overwrite() { + Some(overwrite) => { + overwrite + } + None => { + ask_need_overwrite(file_name.to_str().unwrap()) + } + }; + if !overwrite { + return 0; + } + } let r = pw.download_image(link); if r.is_none() { println!("{} {}", gettext("Failed to download image:"), link); return 1; } let r = r.unwrap(); - let re = WebClient::download_stream(&file_name, r, pw.helper.overwrite()); + let re = WebClient::download_stream(&file_name, r); if re.is_err() { println!("{} {}", gettext("Failed to download image:"), link); return 1; diff --git a/src/webclient.rs b/src/webclient.rs index 9ff3b40..2b4677b 100644 --- a/src/webclient.rs +++ b/src/webclient.rs @@ -4,7 +4,6 @@ use crate::cookies::Cookie; use crate::cookies::CookieJar; use crate::gettext; use crate::list::NonTailList; -use crate::utils::ask_need_overwrite; use futures_util::StreamExt; use json::JsonValue; use reqwest::{Client, IntoUrl, RequestBuilder, Response}; @@ -272,17 +271,13 @@ impl WebClient { r } - pub fn download_stream + ?Sized>(file_name: &S, r: Response, overwrite: Option) -> Result<(), ()> { + /// Download a stream + /// * `file_name` - File name + /// * `r` - Response + /// Note: If file already exists, will remove existing file first. + pub fn download_stream + ?Sized>(file_name: &S, r: Response) -> Result<(), ()> { let p = Path::new(file_name); if p.exists() { - let overwrite = if overwrite.is_none() { - ask_need_overwrite(p.to_str().unwrap()) - } else { - overwrite.unwrap() - }; - if !overwrite { - return Ok(()); - } let re = remove_file(p); if re.is_err() { println!("{} {}", gettext("Failed to remove file:"), re.unwrap_err());