diff --git a/src/anime/anime.rs b/src/anime/anime.rs index f5dda24..8f6f9d4 100644 --- a/src/anime/anime.rs +++ b/src/anime/anime.rs @@ -1,6 +1,5 @@ -use crate::helpers::name_ranker::string_sumularity_ranker; use crate::open_video; -use crate::{anime_ep_range, anime_info, anime_link, anime_names}; +use crate::{anime_ep_range, anime_link, anime_names, get_mal_id}; use crate::{get_anime_id, get_user_anime_progress, update_anime_progress}; use crossterm::{ @@ -88,7 +87,6 @@ struct App { progress: i32, anime_id: i32, token: String, - anime_mal_info: Vec<(String, String)>, } impl<'a> App { @@ -102,7 +100,6 @@ impl<'a> App { progress: 0, anime_id: 0, token: String::new(), - anime_mal_info: Vec::new(), } } } @@ -160,17 +157,9 @@ fn run_app(terminal: &mut Terminal, mut app: App) -> io::Result<( KeyCode::Enter => { if ep_select == false { let selected = app.messages.state.selected(); - let gogo = app.messages.items[selected.unwrap()].clone(); - app.anime_mal_info = anime_info(gogo.clone()); - let mut animixplay = Vec::new(); - //for each app.anime_mal_info.0 add to animixplay - for i in 0..app.anime_mal_info.len() { - animixplay.push(app.anime_mal_info[i].0.as_str()); - } - let simular = string_sumularity_ranker(animixplay, &gogo); - app.title = simular.1.to_string(); + app.title = app.messages.items[selected.unwrap()].clone(); let ep_range = anime_ep_range(&app.title); - let mel_id = app.anime_mal_info[simular.0].1.parse::().unwrap(); + let mel_id = get_mal_id(&app.title); app.anime_id = get_anime_id(mel_id); app.messages.items.clear(); app.progress = @@ -178,7 +167,7 @@ fn run_app(terminal: &mut Terminal, mut app: App) -> io::Result<( app.messages.state.select(Some(app.progress as usize)); if ep_range == 1 { let link = anime_link(&app.title, 1); - open_video(link); + open_video((link.0, link.1)); } else { for ep in 1..ep_range + 1 { app.messages.push(format!("Episode {}", ep)); @@ -196,7 +185,7 @@ fn run_app(terminal: &mut Terminal, mut app: App) -> io::Result<( .parse::() .unwrap(); let link = anime_link(&app.title, app.ep); - open_video(link); + open_video((link.0, link.1)); update_anime_progress( app.anime_id, app.ep as usize, diff --git a/src/anime/scraper.rs b/src/anime/scraper.rs index fd1d9ef..4cb11a1 100644 --- a/src/anime/scraper.rs +++ b/src/anime/scraper.rs @@ -45,28 +45,6 @@ pub fn anime_names(query: String) -> Vec { anime_list } -//get anime name and id using net\\\/anime\\\/([0-9]*)\\\/([^"]*)" -pub fn anime_info(query: String) -> Vec<(String, String)> { - let url = format!( - "https://api.jikan.moe/v4/anime?q={}&limit=18&sfw=true", - query - ); - //relpace all spaces with %20 - let url = url.replace(' ', "%20"); - let html = get_anime_html(&url); - let re = Regex::new(r#"(?m)net\\/anime\\/([0-9]*)\\/([^"]*)"#).unwrap(); - let mut anime_list: Vec<(String, String)> = Vec::new(); - for cap in re.captures_iter(&html) { - anime_list.push(( - cap.get(2).unwrap().as_str().trim().to_string(), - cap.get(1).unwrap().as_str().trim().to_string(), - )); - } - anime_list.dedup(); - - anime_list -} - pub fn anime_ep_range(anime_name: &str) -> u16 { let url = format!( "https://gogoanime.dk/category/{}", @@ -90,6 +68,22 @@ pub fn anime_ep_range(anime_name: &str) -> u16 { .unwrap_or(0) } +pub fn get_mal_id(title: &str) -> i32 { + let url = format!("https://animixplay.to/v1/{}", title); + let html = get_anime_html(&url); + let re = Regex::new(r#"(?m)var malid = '([0-9]*)'"#).unwrap(); + let mal_id = re + .captures_iter(&html) + .next() + .unwrap() + .get(1) + .unwrap() + .as_str() + .trim() + .to_string(); + mal_id.parse::().unwrap_or(0) +} + pub fn anime_link(title: &str, ep: u64) -> (String, String) { let url = format!("https://animixplay.to/v1/{}", title); let html = get_anime_html(&url); diff --git a/src/helpers/mod.rs b/src/helpers/mod.rs index 25c3c2f..1bb52f7 100644 --- a/src/helpers/mod.rs +++ b/src/helpers/mod.rs @@ -1,3 +1,2 @@ pub mod fixing_text; -pub mod name_ranker; pub mod take_input; diff --git a/src/helpers/name_ranker.rs b/src/helpers/name_ranker.rs deleted file mode 100644 index c9a962f..0000000 --- a/src/helpers/name_ranker.rs +++ /dev/null @@ -1,20 +0,0 @@ -pub fn string_sumularity_ranker(animixplay: Vec<&str>, gogo: &str) -> (usize, String) { - let mut score = 0; - let mut index = 0; - for a in &animixplay { - let mut temp_score = 0; - // compare the each first letter of the strings and then the second and so on without unwrapping - for (_i, (a, b)) in a.chars().zip(gogo.chars()).enumerate() { - if a == b { - temp_score += 1; - } else { - break; - } - } - if temp_score > score { - score = temp_score; - index = animixplay.iter().position(|&x| &x == a).unwrap(); - } - } - (index, gogo.to_string()) // -} diff --git a/src/main.rs b/src/main.rs index dea87a6..eeb756e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use ln::ln::ln_ui; use crate::anime::{ player::open_video, - scraper::{anime_ep_range, anime_info, anime_link, anime_names}, + scraper::{anime_ep_range, anime_link, anime_names, get_mal_id}, trackers::*, }; use crate::get_token;