aboutsummaryrefslogtreecommitdiff
path: root/src/bin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin.rs')
-rw-r--r--src/bin.rs50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/bin.rs b/src/bin.rs
index 79e02c3..da32445 100644
--- a/src/bin.rs
+++ b/src/bin.rs
@@ -1,9 +1,14 @@
#[macro_use]
extern crate clap;
+use std::env;
+use std::fs::create_dir_all;
+
use clap::App;
+use indicatif::{ProgressBar, ProgressStyle};
+use reqwest::Client;
-use chandownloader::download_thread;
+use chan_downloader::{get_image_links, get_page_content, get_thread_infos, save_image};
fn main() {
let yaml = load_yaml!("cli.yml");
@@ -13,3 +18,46 @@ fn main() {
let output = matches.value_of("output").unwrap_or("downloads");
download_thread(thread, &output);
}
+
+fn download_thread(thread_link: &str, output: &str) {
+ let client = Client::new();
+ let workpath = env::current_dir().unwrap();
+
+ let (board_name, thread_id) = get_thread_infos(thread_link);
+
+ let directory = workpath.join(output).join(board_name).join(thread_id);
+ if !directory.exists() {
+ match create_dir_all(&directory) {
+ Ok(_) => {}
+ Err(err) => eprintln!("Failed to create new directory: {}", err),
+ }
+ }
+
+ match get_page_content(thread_link, &client) {
+ Ok(page_string) => {
+ let (links_iter, number_of_links) = get_image_links(page_string.as_str());
+ let pb = ProgressBar::new(number_of_links as u64);
+ pb.set_style(ProgressStyle::default_bar()
+ .template("{spinner:.green} [{elapsed_precise}] [{bar:40.cyan/blue}] {pos}/{len} {msg} ({eta})")
+ .progress_chars("#>-"));
+ pb.tick();
+ for cap in links_iter.step_by(2) {
+ let img_path = directory.join(&cap[2]);
+ if !img_path.exists() {
+ match save_image(
+ format!("https:{}", &cap[1]).as_str(),
+ img_path.to_str().unwrap(),
+ &client,
+ ) {
+ Ok(_) => {}
+ Err(err) => eprintln!("Error: {}", err),
+ }
+ }
+ pb.set_message(&cap[2].to_string());
+ pb.inc(1);
+ }
+ pb.finish_with_message("Done");
+ }
+ Err(err) => eprintln!("Error: {}", err),
+ }
+}