more options

This commit is contained in:
Love 2023-01-19 12:37:24 +01:00
parent 44d47d3f8d
commit dfdf3faf25

View File

@ -2,11 +2,16 @@ use std::num::ParseIntError;
use std::process::Command; use std::process::Command;
use std::rc::Rc; use std::rc::Rc;
use colored::Colorize;
use iptvnator_rs::{download_with_progress, setup, M3u8, Parser, Readline}; use iptvnator_rs::{download_with_progress, setup, M3u8, Parser, Readline};
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
println!("Welcome to iptvnator_rs, the port of my iptvprogram written in python, now in rust BLAZINGLY FAST\n"); println!("Welcome to iptvnator_rs, the port of my iptvprogram written in python, now in rust BLAZINGLY FAST\n");
println!(
"There will be some options along the way \n {} is for refreshing your iptvfile.\n {} is to quit and save watched feeds\n {} is to download fields\n {} is to perform a new search",
"r".bold(),"q".bold(),"d".bold(),"s".bold()
);
let parser = Parser::new("iptv.m3u8".to_owned(), setup(), "watched.txt".to_owned()).await; let parser = Parser::new("iptv.m3u8".to_owned(), setup(), "watched.txt".to_owned()).await;
let mut search_result: Option<Rc<Vec<&M3u8>>> = None; let mut search_result: Option<Rc<Vec<&M3u8>>> = None;
@ -15,12 +20,16 @@ async fn main() {
loop { loop {
// Dont't perform a search if user has just watched, instead present the previous search // Dont't perform a search if user has just watched, instead present the previous search
if search_result.is_none() { if search_result.is_none() {
let search = readline.input("Search by name: "); let search = readline.input("Search by name [r | q]: ");
let search = search.trim(); let search = search.trim();
// If they want to quit, let them- // If they want to quit, let them-
if search == "q" { if search == "q" {
break; break;
} else if search == "r" {
search_result = None;
refresh(&parser).await;
continue;
} }
search_result = Some(Rc::new(parser.find(search))); search_result = Some(Rc::new(parser.find(search)));
@ -48,14 +57,7 @@ async fn main() {
} else if user_wish == "r" { } else if user_wish == "r" {
println!("Refreshing local m3u8-file"); println!("Refreshing local m3u8-file");
search_result = None; search_result = None;
refresh(&parser).await;
// I know that this is also frowned upon, but it is perfectly safe right here,
// even though the borrowchecker complains
{
let ptr = &parser as *const Parser as *mut Parser;
let p = unsafe { &mut *ptr };
p.forcefully_update().await;
}
continue; continue;
} else if user_wish == "d" { } else if user_wish == "d" {
let selection = readline.input("Download all or select in comma separated [A]: "); let selection = readline.input("Download all or select in comma separated [A]: ");
@ -102,6 +104,15 @@ async fn main() {
parser.save_watched(); parser.save_watched();
} }
/*
* I know that this is also frowned upon, but it is perfectly safe right here,
* even though the borrowchecker complains
*/
async fn refresh(parser: &Parser) {
let ptr = parser as *const Parser as *mut Parser;
let p = unsafe { &mut *ptr };
p.forcefully_update().await;
}
async fn download_m3u8(files_to_download: Rc<Vec<&M3u8>>) { async fn download_m3u8(files_to_download: Rc<Vec<&M3u8>>) {
for m3u8 in files_to_download.iter() { for m3u8 in files_to_download.iter() {
let file_ending_place = m3u8.link.rfind(".").unwrap(); let file_ending_place = m3u8.link.rfind(".").unwrap();