use anyhow::Error; use owo_colors::OwoColorize; use crate::provider::radiobrowser::Radiobrowser; use crate::provider::tunein::Tunein; use crate::provider::Provider; pub async fn exec( category: Option<&str>, offset: u32, limit: u32, provider: &str, ) -> Result<(), Error> { let provider: Box = match provider { "tunein" => Box::new(Tunein::new()), "radiobrowser" => Box::new(Radiobrowser::new().await), _ => { return Err(anyhow::anyhow!(format!( "Unsupported provider '{}'", provider ))) } }; match category { Some(category) => { let results = provider.browse(category.to_string(), offset, limit).await?; for result in results { match result.id.is_empty() { false => match result.playing { Some(playing) => println!( " {} | {} | id: {}", result.name.magenta(), playing, result.id ), None => println!(" {} | id: {}", result.name.magenta(), result.id), }, true => println!("{}", result.name), } } } None => { let results = provider.categories(offset, limit).await?; for result in results { println!("{}", result.magenta()); } } }; Ok(()) }