blob: 4cee4d14a10349ddc21651ebedd953031bae1c2c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
use crate::channels::Channel;
use channels::get_stream_url;
use inquire::{InquireError, Select};
use spinners::{Spinner, Spinners};
use tokio::sync::mpsc;
mod audio;
mod channels;
#[tokio::main]
async fn main() {
let mut sp = Spinner::new(Spinners::Dots, "Loading SomaFM channels...".into());
let channels = channels::get_channels().await;
sp.stop_with_newline();
let ans: Result<Channel, InquireError> =
Select::new("Select channel from list:", channels).prompt();
let (tx, mut rx) = mpsc::unbounded_channel();
match ans {
Ok(ch) => {
let mut sp = Spinner::new(Spinners::Dots, "Fetching channel streams...".into());
let playlist = ch.get_playlist();
let url = get_stream_url(&playlist).await.unwrap();
sp.stop_with_newline();
sp = Spinner::new(Spinners::Arrow3, format!("Playing {}", ch.title));
tokio::spawn(async move {
while let Some(title) = rx.recv().await {
sp.stop_with_newline();
sp = Spinner::new(Spinners::Arrow3, title);
}
});
audio::get_backend().play(&url, tx).await
}
Err(_e) => {
println!("\nNo channel selected, exiting.");
}
}
}
|