summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: aa9f9380c6866d74cfce2fce5e1b25faacb95e56 (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
use crate::channels::Channel;
use inquire::{InquireError, Select};
use spinners::{Spinner, Spinners};
use std::process::Command;

mod channels;

fn main() {
    let mut sp = Spinner::new(Spinners::Dots, "Loading SomaFM channels...".into());
    let channels = channels::get_channels();
    sp.stop_with_newline();

    let ans: Result<Channel, InquireError> =
        Select::new("Select channel from list:", channels).prompt();

    match ans {
        Ok(ch) => {
            let _sp = Spinner::new(Spinners::Arrow3, format!("Playing {}", ch));
            let url = format!("https://api.somafm.com/{}.pls", ch.id);
            Command::new("mpv")
                .args([url])
                .output()
                .expect("Failed to start mpv, make sure it is installed.");
        }
        Err(_e) => {
            println!("\nNo channel selected, exiting.");
        }
    }
}