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