]> git.r.bdr.sh - rbdr/lyricli/blobdiff - src/main.rs
Run format
[rbdr/lyricli] / src / main.rs
index 13b7e37903f13ff278f2165a37718ffbdb6fe19c..7b61a85d4eba342c5195af427d5ff895bdd3499c 100644 (file)
@@ -1,17 +1,17 @@
-// mod configuration;
+mod configuration;
 mod lyrics_engine;
 mod sources;
 
 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 lyrics_engine::print_lyrics;
+use sources::{disable, enable, get_track, list, reset};
 
 #[derive(Parser, Debug)]
 #[command(version, about, long_about = None)]
 struct Arguments {
 
 #[derive(Parser, Debug)]
 #[command(version, about, long_about = None)]
 struct Arguments {
-
     // Positional Arguments
     /// Specify the artist.
     artist: Option<String>,
     // Positional Arguments
     /// Specify the artist.
     artist: Option<String>,
@@ -40,38 +40,69 @@ struct Arguments {
 
 pub struct Track {
     pub name: String,
 
 pub struct Track {
     pub name: String,
-    pub artist: String
+    pub artist: String,
 }
 
 #[tokio::main]
 async fn main() -> Result<()> {
 }
 
 #[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 {
     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 {
     }
 
     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 {
     }
 
     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 {
     }
 
     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()),
     }
 
     let current_track: Track;
     if let Some(artist) = arguments.artist {
         current_track = Track {
             name: arguments.track_name.unwrap_or("".to_string()),
-            artist: artist
+            artist,
         };
     } else {
         };
     } 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
     }
 
     print_lyrics(current_track, arguments.show_title).await