6 use std::io::{Error, ErrorKind::Other, Result};
8 use configuration::Configuration;
9 use lyrics_engine::print_lyrics;
10 use sources::{disable, enable, get_track, list, reset};
12 #[derive(Parser, Debug)]
13 #[command(version, about, long_about = None)]
15 // Positional Arguments
16 /// Specify the artist.
17 artist: Option<String>,
19 /// Specify the artist.
20 track_name: Option<String>,
22 /// Show title of track if present
23 #[arg(short = 't', long)]
31 #[arg(short, long, value_name = "SOURCE")]
32 enable_source: Option<String>,
34 #[arg(short, long, value_name = "SOURCE")]
35 disable_source: Option<String>,
37 #[arg(short, long, value_name = "SOURCE")]
38 reset_source: Option<String>,
47 async fn main() -> Result<()> {
48 let result = run().await;
50 if cfg!(debug_assertions) {
56 eprintln!("Error: {}", e);
57 std::process::exit(1);
63 async fn run() -> Result<()> {
64 let mut configuration = Configuration::new();
65 let arguments = Arguments::parse();
67 if arguments.list_sources {
69 for source in sources {
71 if configuration.is_enabled(&source) {
79 if let Some(source_name) = arguments.enable_source {
80 if !configuration.is_enabled(&source_name) {
81 enable(&source_name)?;
83 return configuration.enable_source(&source_name);
86 if let Some(source_name) = arguments.disable_source {
87 if configuration.is_enabled(&source_name) {
88 disable(&source_name)?;
90 return configuration.disable_source(&source_name);
93 if let Some(source_name) = arguments.reset_source {
94 return reset(&source_name);
97 let current_track: Track;
98 if let Some(artist) = arguments.artist {
99 current_track = Track {
100 name: arguments.track_name.unwrap_or("".to_string()),
105 get_track().ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))?
108 print_lyrics(current_track, arguments.show_title).await