Sleep for 5s if Content-Type does not start with image/
This commit is contained in:
parent
f6ec76baf2
commit
4271a7bac4
|
@ -330,7 +330,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mangafetchi"
|
name = "mangafetchi"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quick-xml",
|
"quick-xml",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "mangafetchi"
|
name = "mangafetchi"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
authors = ["blank X <theblankx@protonmail.com>"]
|
authors = ["blank X <theblankx@protonmail.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
@ -14,4 +14,4 @@ serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
reqwest = "0.11"
|
reqwest = "0.11"
|
||||||
quick-xml = "0.20"
|
quick-xml = "0.20"
|
||||||
tokio = { version = "1.0", features = ["rt-multi-thread", "sync"] }
|
tokio = { version = "1.0", features = ["rt-multi-thread", "sync", "time"] }
|
||||||
|
|
|
@ -7,10 +7,12 @@ use std::process::exit;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
|
use tokio::time::{sleep, Duration};
|
||||||
extern crate tokio;
|
extern crate tokio;
|
||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
|
|
||||||
const DOWNLOAD_WORKERS: usize = 5;
|
const DOWNLOAD_WORKERS: usize = 5;
|
||||||
|
const NON_IMAGE_WAIT_TIME: u64 = 5000;
|
||||||
|
|
||||||
pub async fn run(mut args: env::Args) {
|
pub async fn run(mut args: env::Args) {
|
||||||
let manga_id = match args.next() {
|
let manga_id = match args.next() {
|
||||||
|
@ -90,7 +92,12 @@ async fn summon_handles(client: reqwest::Client, mutex: Arc<Mutex<Vec<(String, P
|
||||||
let (url, file_name, referer) = vec.remove(0);
|
let (url, file_name, referer) = vec.remove(0);
|
||||||
drop(vec);
|
drop(vec);
|
||||||
eprintln!("[DW{}] Downloading {} to {}", worker_id, &url, file_name.display());
|
eprintln!("[DW{}] Downloading {} to {}", worker_id, &url, file_name.display());
|
||||||
utils::download_file(cloned_client, &url, &file_name, &referer).await.unwrap();
|
loop {
|
||||||
|
if utils::download_file(cloned_client.clone(), &url, &file_name, &referer).await.unwrap() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sleep(Duration::from_millis(NON_IMAGE_WAIT_TIME)).await;
|
||||||
|
}
|
||||||
eprintln!("[DW{}] Downloaded {} to {}", worker_id, &url, file_name.display());
|
eprintln!("[DW{}] Downloaded {} to {}", worker_id, &url, file_name.display());
|
||||||
}
|
}
|
||||||
eprintln!("[DW{}] Down!", worker_id);
|
eprintln!("[DW{}] Down!", worker_id);
|
||||||
|
|
25
src/utils.rs
25
src/utils.rs
|
@ -543,17 +543,24 @@ fn parse_manganelo_pages(text: &str) -> Vec<String> {
|
||||||
pages
|
pages
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn download_file(client: reqwest::Client, url: &str, file_name: &PathBuf, referer: &str) -> Result<(), reqwest::Error> {
|
pub async fn download_file(client: reqwest::Client, url: &str, file_name: &PathBuf, referer: &str) -> Result<bool, reqwest::Error> {
|
||||||
let bytes = client.get(url)
|
let resp = client.get(url)
|
||||||
.header("Referer", referer)
|
.header("Referer", referer)
|
||||||
.send()
|
.send()
|
||||||
.await?
|
|
||||||
.bytes()
|
|
||||||
.await?;
|
.await?;
|
||||||
if !file_name.parent().unwrap().is_dir() {
|
match resp.headers().get("Content-Type") {
|
||||||
create_dir(file_name.parent().unwrap()).unwrap();
|
Some(header_value) => {
|
||||||
|
if header_value.to_str().unwrap().starts_with("image/") {
|
||||||
|
let bytes = resp.bytes().await?;
|
||||||
|
if !file_name.parent().unwrap().is_dir() {
|
||||||
|
create_dir(file_name.parent().unwrap()).unwrap();
|
||||||
|
}
|
||||||
|
let mut file = File::create(&file_name).unwrap();
|
||||||
|
file.write_all(&bytes).unwrap();
|
||||||
|
return Ok(true);
|
||||||
|
}
|
||||||
|
return Ok(false);
|
||||||
|
},
|
||||||
|
None => Ok(false)
|
||||||
}
|
}
|
||||||
let mut file = File::create(&file_name).unwrap();
|
|
||||||
file.write_all(&bytes).unwrap();
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue