Make info not shit itself when it gets an error
This commit is contained in:
parent
3bdf78e03d
commit
8a67b74ce2
|
@ -1,4 +1,5 @@
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
|
use crate::structs;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -26,7 +27,10 @@ pub async fn run(args: env::Args) {
|
||||||
let cloned_client = client.clone();
|
let cloned_client = client.clone();
|
||||||
let mut cloned_tx = tx.clone();
|
let mut cloned_tx = tx.clone();
|
||||||
handles.push(tokio::spawn(async move {
|
handles.push(tokio::spawn(async move {
|
||||||
let sauce_info = utils::get_sauce_info(cloned_client, sauce).await.unwrap();
|
let sauce_info = match utils::get_sauce_info(cloned_client, sauce).await.unwrap() {
|
||||||
|
structs::GalleryInfo::Info(sauce_info) => sauce_info,
|
||||||
|
structs::GalleryInfo::Error(sauce_error) => panic!("{} returned: {}", sauce, sauce_error.error)
|
||||||
|
};
|
||||||
let base_path = sauce_info.id.to_string();
|
let base_path = sauce_info.id.to_string();
|
||||||
let base_path = Path::new(&base_path);
|
let base_path = Path::new(&base_path);
|
||||||
match create_dir(base_path) {
|
match create_dir(base_path) {
|
||||||
|
|
|
@ -16,15 +16,19 @@ pub async fn run(args: env::Args) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
let client = reqwest::Client::new();
|
let client = reqwest::Client::new();
|
||||||
let mut handles: Vec<JoinHandle<structs::GalleryInfo>> = Vec::with_capacity(sauces.len());
|
let mut handles: Vec<JoinHandle<(structs::GalleryInfo, usize)>> = Vec::with_capacity(sauces.len());
|
||||||
for sauce in sauces {
|
for sauce in sauces {
|
||||||
let cloned_client = client.clone();
|
let cloned_client = client.clone();
|
||||||
handles.push(tokio::spawn(async move {
|
handles.push(tokio::spawn(async move {
|
||||||
utils::get_sauce_info(cloned_client, sauce).await.unwrap()
|
(utils::get_sauce_info(cloned_client, sauce).await.unwrap(), sauce)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
for handle in handles {
|
for handle in handles {
|
||||||
println!("{}", utils::human_sauce_info(&handle.await.unwrap()));
|
let (sauce_info, sauce) = handle.await.unwrap();
|
||||||
|
match sauce_info {
|
||||||
|
structs::GalleryInfo::Info(sauce_info) => println!("{}", utils::human_sauce_info(&sauce_info)),
|
||||||
|
structs::GalleryInfo::Error(sauce_error) => eprintln!("Sauce: {}\nError: {}", sauce, sauce_error.error)
|
||||||
|
};
|
||||||
if remaining_to_show > 1 {
|
if remaining_to_show > 1 {
|
||||||
println!("");
|
println!("");
|
||||||
remaining_to_show -= 1;
|
remaining_to_show -= 1;
|
||||||
|
|
|
@ -31,7 +31,7 @@ pub struct GalleryTagInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct GalleryInfo {
|
pub struct GalleryInfoSuccess {
|
||||||
pub id: usize,
|
pub id: usize,
|
||||||
pub media_id: String,
|
pub media_id: String,
|
||||||
pub title: GalleryTitleInfo,
|
pub title: GalleryTitleInfo,
|
||||||
|
@ -43,9 +43,21 @@ pub struct GalleryInfo {
|
||||||
pub num_favorites: usize
|
pub num_favorites: usize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct GalleryInfoError {
|
||||||
|
pub error: String
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum GalleryInfo {
|
||||||
|
Info(GalleryInfoSuccess),
|
||||||
|
Error(GalleryInfoError)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct SearchInfo {
|
pub struct SearchInfo {
|
||||||
pub result: Vec<GalleryInfo>,
|
pub result: Vec<GalleryInfoSuccess>,
|
||||||
pub num_pages: usize,
|
pub num_pages: usize,
|
||||||
pub per_page: usize
|
pub per_page: usize
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ pub async fn get_sauce_info(client: reqwest::Client, sauce: usize) -> Result<str
|
||||||
let resp = client.get(&uri)
|
let resp = client.get(&uri)
|
||||||
.send()
|
.send()
|
||||||
.await?;
|
.await?;
|
||||||
assert!(resp.status().is_success());
|
|
||||||
let body = resp.text().await?;
|
let body = resp.text().await?;
|
||||||
let mut body: serde_json::Value = serde_json::from_str(&body).unwrap();
|
let mut body: serde_json::Value = serde_json::from_str(&body).unwrap();
|
||||||
fix_gallery(&mut body).unwrap();
|
fix_gallery(&mut body).unwrap();
|
||||||
|
@ -36,7 +35,7 @@ pub async fn get_search_info(client: reqwest::Client, search_query: &str) -> Res
|
||||||
.query(&[("query", search_query)])
|
.query(&[("query", search_query)])
|
||||||
.send()
|
.send()
|
||||||
.await?;
|
.await?;
|
||||||
assert_eq!(resp.status().is_success(), true);
|
assert!(resp.status().is_success());
|
||||||
let body = resp.text().await?;
|
let body = resp.text().await?;
|
||||||
let mut body: serde_json::Value = serde_json::from_str(&body).unwrap();
|
let mut body: serde_json::Value = serde_json::from_str(&body).unwrap();
|
||||||
for i in 0..body["result"].as_array().unwrap().len() {
|
for i in 0..body["result"].as_array().unwrap().len() {
|
||||||
|
@ -73,7 +72,7 @@ pub fn get_arg_sauces(args: env::Args) -> Result<Vec<usize>, String> {
|
||||||
Ok(sauces)
|
Ok(sauces)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn human_sauce_info(sauce_info: &structs::GalleryInfo) -> String {
|
pub fn human_sauce_info(sauce_info: &structs::GalleryInfoSuccess) -> String {
|
||||||
let mut text = format!("Sauce: {}\nTitle: ", sauce_info.id);
|
let mut text = format!("Sauce: {}\nTitle: ", sauce_info.id);
|
||||||
let japanese_title = sauce_info.title.japanese.as_ref();
|
let japanese_title = sauce_info.title.japanese.as_ref();
|
||||||
let english_title = sauce_info.title.english.as_ref();
|
let english_title = sauce_info.title.english.as_ref();
|
||||||
|
|
Loading…
Reference in New Issue