diff --git a/README.org b/README.org index 4a31e33..ea29777 100644 --- a/README.org +++ b/README.org @@ -4,11 +4,11 @@ 1. [[#Why-use-kami][Why use kami]] 2. [[#Dependencies][Dependencies]] 3. [[#Install][Install]] - - [[#Linux--Mac][Linux/mac]] + - [[#LinuxMac][Linux/mac]] - [[#Windows][Windows]] 4. [[#Honorable-mentions][Honorable mentions]] * Why use kami -well its a fast and easy way to watch anime and read light novels right i your terminal no need to open a browser. +well its a fast and easy way to watch anime and read light novels right in your terminal no need to open a browser. Also rust is fast as fuck boiiiii. * Dependencies 1. [[https://github.com/sharkdp/bat][bat]] diff --git a/src/anime/anime.rs b/src/anime/anime.rs index c283cf0..2328a76 100644 --- a/src/anime/anime.rs +++ b/src/anime/anime.rs @@ -4,12 +4,14 @@ use crate::open_video; use crate::main; use colored::Colorize; //use crate -pub fn anime_stream(first_run: bool) { - let query = if std::env::args().len() > 2 && first_run { - std::env::args().nth(2).unwrap() - } else { +pub fn anime_stream(search: String, episode: u32) { + let query = if search != "" { + search + } + else{ string_input("Search anime: ") }; + let anime_list = anime_names(&query); let mut count = 0; print!("\x1B[2J\x1B[1;1H"); @@ -43,15 +45,24 @@ pub fn anime_stream(first_run: bool) { let link = anime_link(title, 1); open_video(link); main(); - } else { - println!("select episode 1-{}: ", ep_range); - let mut ep_num: usize = usize::MAX; + } + else { + let mut ep_num: usize = usize::MAX; + if episode > ep_range.into() { + println!("Invalid episode number"); + main(); + } + else if episode != 0{ + ep_num = episode as usize; + }else{ + println!("select episode 1-{}: ", ep_range); while ep_num == usize::max_value() || ep_num > ep_range as usize { ep_num = int_input("Enter episode number: "); if ep_num > ep_range as usize { println!("Invalid episode number"); } } + } loop{ let link = anime_link(title, ep_num as u64); open_video(link); @@ -74,7 +85,7 @@ pub fn anime_stream(first_run: bool) { } } else if input == "s" { //remove all the arguments - anime_stream(false); + anime_stream("".to_string(), 0); } else if input == "q" { std::process::exit(0); } diff --git a/src/anime.rs b/src/anime/mod.rs similarity index 100% rename from src/anime.rs rename to src/anime/mod.rs diff --git a/src/helpers.rs b/src/helpers/mod.rs similarity index 100% rename from src/helpers.rs rename to src/helpers/mod.rs diff --git a/src/helpers/take_input.rs b/src/helpers/take_input.rs index 659e299..fefb514 100644 --- a/src/helpers/take_input.rs +++ b/src/helpers/take_input.rs @@ -1,5 +1,4 @@ use std::io::{self, Write}; - pub fn string_input(prompt: &str) -> String { print!("{}", prompt); let mut input = String::new(); diff --git a/src/ln/ln.rs b/src/ln/ln.rs index 6622962..d1cccb5 100644 --- a/src/ln/ln.rs +++ b/src/ln/ln.rs @@ -1,9 +1,14 @@ use std::fs::File; use std::io::Write; use crate::{search_ln,chapter_selector,get_full_text,open_bat}; -pub fn ln_read(){ - let ln_url = search_ln(); +pub fn ln_read(search: &str, chapter: u32){ + //convert search in to Option<&str> + let ln_url = search_ln(&search); + let chapter = chapter as f64; let mut selected_page = 1; + if chapter != 0.0{ + selected_page = (chapter/48.0).ceil() as u32; + } loop { //make empty tuple called chapter_url with (String, u32, u32) let chapter_url = chapter_selector(&ln_url, selected_page); diff --git a/src/ln.rs b/src/ln/mod.rs similarity index 100% rename from src/ln.rs rename to src/ln/mod.rs diff --git a/src/ln/search.rs b/src/ln/search.rs index 6a567c8..b634727 100644 --- a/src/ln/search.rs +++ b/src/ln/search.rs @@ -2,11 +2,16 @@ use crate::helpers::{fixing_text::remove_after_dash, take_input::string_input}; use colored::Colorize; use regex::Regex; -pub fn search_ln() -> String { +pub fn search_ln(search: &str) -> String { let mut _is_n = false; print!("\x1B[2J\x1B[1;1H"); while !_is_n { - let search_path = string_input("What ln do you want to read? "); + //if search is None, take input from user + let search_path = if search == "" { + string_input("What ln do you want to read? ") + } else { + search.to_string() + }; let search_path = search_path.replace(' ', "+"); let url = "https://readlightnovels.net/?s=".to_string(); let url = format!("{}{}", url, search_path.trim()).trim().to_string(); diff --git a/src/main.rs b/src/main.rs index 7ec10c2..51bce86 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,35 +1,62 @@ -use crate::anime::anime::anime_stream; -use crate::anime::scraper::{anime_ep_range, anime_link, anime_names}; -use crate::ln::ln::ln_read; -use crate::ln::menu::chapter_selector; -use crate::ln::open_text::open_bat; -use crate::ln::scraper::get_full_text; -use crate::{ - anime::player::open_video, - helpers::take_input::{int_input, string_input}, - ln::search::search_ln, -}; -use colored::Colorize; -use ln::scraper::get_ln_next_page; mod anime; mod helpers; mod ln; +use anime::anime::anime_stream; +use colored::Colorize; +use ln::{scraper::get_ln_next_page, ln::ln_read}; +use ln::search::search_ln; + +use crate::anime::{ + player::open_video, + scraper::{anime_ep_range, anime_link, anime_names}, +}; +use crate::helpers::take_input::{int_input, string_input}; +use crate::ln::{menu::chapter_selector, open_text::open_bat, scraper::get_full_text}; + fn main() { let mut help = false; let mut anime = false; let mut ln = false; + let mut chapter: u32 = 0; + let mut episode: u32 = 0; + //let search = option string + let mut search = String::new(); + let mut count = 0; for arg in std::env::args() { if arg == "--help" || arg == "-h" { help = true; } if arg == "--anime" || arg == "-a" { anime = true; + //look at the next argument and see if it is a search term + if let Some(arg) = std::env::args().nth(count + 1) { + search = arg; + } } if arg == "--ln" || arg == "-l" { ln = true; + if let Some(arg) = std::env::args().nth(count + 1) { + search = arg; + } } + if arg == "--chapter" || arg == "-c" { + if let Some(arg) = std::env::args().nth(count + 1) { + chapter = arg.parse::().unwrap(); + }else{ + chapter = 0; + } + } + if arg == "--episode" || arg == "-e" { + if let Some(arg) = std::env::args().nth(count + 1) { + episode = arg.parse::().unwrap(); + }else{ + episode = 0; + } + } + count += 1; } + if help == true{ print_help(); } @@ -41,9 +68,9 @@ fn main() { std::process::exit(0); } if ln == true { - ln_read(); + ln_read(&search, chapter); } else if anime == true { - anime_stream(true) + anime_stream(search, episode); } else { println!("Invalid argument"); } @@ -55,11 +82,25 @@ fn page_selector(ln_id: &str, selected_page: u32) -> String { fn print_help(){ println!("anime:\t\t{}", format_args!("{}", "-a --anime".red())); + println!("{}", "after this^^^ argument you can either enter a search term".green()); + println!("{}", "for exaple kami -a \"one piece\""); + //print blank line + println!(""); + println!("episode:\t{}", format_args!("{}", "-e --episode".red())); + println!("{}", "after this^^^ argument you can either enter a chapter number".green()); + println!("{}", "for exaple kami -c 200"); + //print blank line + println!(""); println!("light novel:\t{}", format_args!("{}", "-l --ln".red())); - println!( - "you can add the name of the anime you want to watch after the {} argument", - format_args!("{}", "-a --anime".red()) - ); + println!("{}", "after this^^^ argument you can either enter a search term".green()); + println!("{}", "for exaple kami -l \"one piece\""); + //print blank line + println!(""); + println!("chapter:\t{}", format_args!("{}", "-c --chapter".red())); + println!("{}", "after this^^^ argument you can either enter a chapter number".green()); + println!("{}", "for exaple kami -c 200"); + //print blank line + println!(""); println!("help:\t\t{}", format_args!("{}", "-h --help".red())); //kill the program std::process::exit(0);