aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 13b7e37903f13ff278f2165a37718ffbdb6fe19c (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// mod configuration;
mod lyrics_engine;
mod sources;

use std::io::{Result, Error, ErrorKind::Other};
use clap::{Parser};

use sources::{enable, disable, get_track, reset, list};
use lyrics_engine::print_lyrics;

#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Arguments {

    // Positional Arguments
    /// Specify the artist.
    artist: Option<String>,

    /// Specify the artist.
    track_name: Option<String>,

    /// Show title of track if present
    #[arg(short = 't', long)]
    show_title: bool,

    /// Lists all sources
    #[arg(short, long)]
    list_sources: bool,

    /// Enables a source
    #[arg(short, long, value_name = "SOURCE")]
    enable_source: Option<String>,

    #[arg(short, long, value_name = "SOURCE")]
    disable_source: Option<String>,

    #[arg(short, long, value_name = "SOURCE")]
    reset_source: Option<String>,
}

pub struct Track {
    pub name: String,
    pub artist: String
}

#[tokio::main]
async fn main() -> Result<()> {
    let arguments = Arguments::parse();

    if arguments.list_sources {
        return list();
    }

    if let Some(source_name) = arguments.enable_source {
        return enable(source_name);
    }

    if let Some(source_name) = arguments.disable_source {
        return disable(source_name);
    }

    if let Some(source_name) = arguments.reset_source {
        return reset(source_name);
    }

    let current_track: Track;
    if let Some(artist) = arguments.artist {
        current_track = Track {
            name: arguments.track_name.unwrap_or("".to_string()),
            artist: artist
        };
    } else {
        current_track = get_track()
            .ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))?
    }

    print_lyrics(current_track, arguments.show_title).await
}