57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
use crate::structs;
|
|
|
|
use std::env;
|
|
use std::fs::File;
|
|
use std::io::Write;
|
|
extern crate serde_json;
|
|
extern crate reqwest;
|
|
|
|
pub async fn get_sauce_info(client: reqwest::Client, sauce: i32) -> Result<structs::GalleryInfo, reqwest::Error> {
|
|
let mut uri = String::from("https://nhentai.net/api/gallery/");
|
|
uri.push_str(&sauce.to_string());
|
|
let resp = client.get(&uri)
|
|
.send()
|
|
.await?;
|
|
Ok(serde_json::from_str(&resp.text().await?).unwrap())
|
|
}
|
|
|
|
pub async fn get_search_info(client: reqwest::Client, search_query: &str) -> Result<structs::SearchInfo, reqwest::Error> {
|
|
let uri = "https://nhentai.net/api/galleries/search";
|
|
let resp = client.get(uri)
|
|
.query(&[("query", search_query)])
|
|
.send()
|
|
.await?;
|
|
Ok(serde_json::from_str(&resp.text().await?).unwrap())
|
|
}
|
|
|
|
pub async fn download_file(client: reqwest::Client, url: &str, file_name: &str) -> Result<bool, reqwest::Error> {
|
|
let resp = client.get(url)
|
|
.send()
|
|
.await?;
|
|
Ok(match resp.headers().get("Content-Type") {
|
|
Some(header) if header.to_str().unwrap_or_default().starts_with("image/") => {
|
|
let bytes = resp.bytes().await?;
|
|
let mut file = File::create(&file_name).unwrap();
|
|
file.write_all(&bytes).unwrap();
|
|
true
|
|
},
|
|
_ => false
|
|
})
|
|
}
|
|
|
|
pub fn get_arg_sauces(args: env::Args) -> Result<Vec<i32>, String> {
|
|
let mut sauces: Vec<i32> = Vec::new();
|
|
for sauce in args {
|
|
let sauce: i32 = match sauce.parse() {
|
|
Ok(sauce) => sauce,
|
|
Err(_) => {
|
|
return Err(format!("{} is not a number/sauce", sauce));
|
|
}
|
|
};
|
|
if !sauces.contains(&sauce) {
|
|
sauces.push(sauce);
|
|
}
|
|
}
|
|
Ok(sauces)
|
|
}
|