X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/blobdiff_plain/738ec06d26a2a19bdda8a992d2250e731d954631..4064639d3c3e25760ef43781feca77332cfbe5eb:/src/main.rs diff --git a/src/main.rs b/src/main.rs index 13b7e37..96569d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,17 @@ -// mod configuration; +mod configuration; mod lyrics_engine; mod sources; -use std::io::{Result, Error, ErrorKind::Other}; -use clap::{Parser}; +use clap::Parser; +use std::io::{Error, ErrorKind::Other, Result}; -use sources::{enable, disable, get_track, reset, list}; +use configuration::Configuration; use lyrics_engine::print_lyrics; +use sources::{disable, enable, get_track, list, reset}; #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Arguments { - // Positional Arguments /// Specify the artist. artist: Option, @@ -40,38 +40,69 @@ struct Arguments { pub struct Track { pub name: String, - pub artist: String + pub artist: String, } #[tokio::main] async fn main() -> Result<()> { + let result = run().await; + + if cfg!(debug_assertions) { + result + } else { + match result { + Ok(_) => Ok(()), + Err(e) => { + eprintln!("Error: {}", e); + std::process::exit(1); + } + } + } +} + +async fn run() -> Result<()> { + let mut configuration = Configuration::new(); let arguments = Arguments::parse(); if arguments.list_sources { - return list(); + let sources = list(); + for source in sources { + print!("{}", source); + if configuration.is_enabled(&source) { + print!(" (enabled)"); + } + println!(""); + } + return Ok(()); } if let Some(source_name) = arguments.enable_source { - return enable(source_name); + if !configuration.is_enabled(&source_name) { + enable(&source_name)?; + } + return configuration.enable_source(&source_name); } if let Some(source_name) = arguments.disable_source { - return disable(source_name); + if configuration.is_enabled(&source_name) { + disable(&source_name)?; + } + return configuration.disable_source(&source_name); } if let Some(source_name) = arguments.reset_source { - return reset(source_name); + 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 + artist: artist, }; } else { - current_track = get_track() - .ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))? + current_track = + get_track().ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))? } print_lyrics(current_track, arguments.show_title).await