Put overwrite ask before send requests

This commit is contained in:
2022-03-15 19:06:16 +08:00
parent a6b0faa9a3
commit 00444c1d02
2 changed files with 39 additions and 12 deletions

View File

@@ -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;

View File

@@ -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<S: AsRef<OsStr> + ?Sized>(file_name: &S, r: Response, overwrite: Option<bool>) -> Result<(), ()> {
/// Download a stream
/// * `file_name` - File name
/// * `r` - Response
/// Note: If file already exists, will remove existing file first.
pub fn download_stream<S: AsRef<OsStr> + ?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());