Browse and listen to thousands of radio stations across the globe right from your terminal ๐ ๐ป ๐ตโจ
radio
rust
tokio
web-radio
command-line-tool
tui
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}