Browse and listen to thousands of radio stations across the globe right from your terminal ๐ŸŒŽ ๐Ÿ“ป ๐ŸŽตโœจ
radio rust tokio web-radio command-line-tool tui
at main 1.6 kB view raw
1use anyhow::Error; 2use owo_colors::OwoColorize; 3 4use crate::provider::radiobrowser::Radiobrowser; 5use crate::provider::tunein::Tunein; 6use crate::provider::Provider; 7 8pub async fn exec( 9 category: Option<&str>, 10 offset: u32, 11 limit: u32, 12 provider: &str, 13) -> Result<(), Error> { 14 let provider: Box<dyn Provider> = match provider { 15 "tunein" => Box::new(Tunein::new()), 16 "radiobrowser" => Box::new(Radiobrowser::new().await), 17 _ => { 18 return Err(anyhow::anyhow!(format!( 19 "Unsupported provider '{}'", 20 provider 21 ))) 22 } 23 }; 24 25 match category { 26 Some(category) => { 27 let results = provider.browse(category.to_string(), offset, limit).await?; 28 for result in results { 29 match result.id.is_empty() { 30 false => match result.playing { 31 Some(playing) => println!( 32 " {} | {} | id: {}", 33 result.name.magenta(), 34 playing, 35 result.id 36 ), 37 None => println!(" {} | id: {}", result.name.magenta(), result.id), 38 }, 39 40 true => println!("{}", result.name), 41 } 42 } 43 } 44 None => { 45 let results = provider.categories(offset, limit).await?; 46 for result in results { 47 println!("{}", result.magenta()); 48 } 49 } 50 }; 51 Ok(()) 52}