]> git.r.bdr.sh - rbdr/lyricli/blobdiff - src/sources/mod.rs
Relicense for v3
[rbdr/lyricli] / src / sources / mod.rs
index fb7af8fa88b353f3b35682b133407c0bfe580711..78f749994ca5ce76725639e27ee15560e6b330b6 100644 (file)
@@ -1,9 +1,10 @@
-use std::io::Result;
+use std::io::{Result, Error, ErrorKind::Other};
+
+#[cfg(target_os = "macos")]
+mod apple_music;
+#[cfg(target_os = "macos")]
+mod spotify;
 
-// #[cfg(target_os = "macos")]
-// mod applie_music;
-// #[cfg(target_os = "macos")]
-// mod spotify;
 // #[cfg(not(target_os = "macos"))]
 // mod rhythmbox;
 // #[cfg(not(target_os = "macos"))]
@@ -13,10 +14,10 @@ use std::io::Result;
 // #[cfg(not(target_os = "macos"))]
 // mod tauon;
 
-// #[cfg(target_os = "macos")]
-// use apple_music::AppleMusic;
-// #[cfg(target_os = "macos")]
-// use spotify::Spotify;
+#[cfg(target_os = "macos")]
+use apple_music::AppleMusic;
+#[cfg(target_os = "macos")]
+use spotify::Spotify;
 
 // #[cfg(not(target_os = "macos"))]
 // use rhythmbox::Rhythmbox;
@@ -39,26 +40,47 @@ pub trait LyricsSource {
     fn reset(&self) -> Result<()>;
 }
 
-pub fn list() -> Result<()> {
-    Ok(())
+pub fn list() -> Vec<String> {
+    available_sources().into_iter().map(|source| source.name()).collect()
 }
 
-pub fn enable(source_name: String) -> Result<()> {
-    println!("Enabling {}", source_name);
-    Ok(())
+pub fn enable(source_name: &String) -> Result<()> {
+    let sources = available_sources();
+    for source in sources {
+        if &source.name() == source_name {
+            return source.enable()
+        }
+    }
+    Err(Error::new(Other, "No such source was available."))
 }
 
-pub fn disable(source_name: String) -> Result<()> {
-    println!("Disabling {}", source_name);
-    Ok(())
+pub fn disable(source_name: &String) -> Result<()> {
+    let sources = available_sources();
+    for source in sources {
+        if &source.name() == source_name {
+            return source.disable()
+        }
+    }
+    Err(Error::new(Other, "No such source was available."))
 }
 
-pub fn reset(source_name: String) -> Result<()> {
-    println!("Reset {}", source_name);
-    Ok(())
+pub fn reset(source_name: &String) -> Result<()> {
+    let sources = available_sources();
+    for source in sources {
+        if &source.name() == source_name {
+            return source.reset()
+        }
+    }
+    Err(Error::new(Other, "No such source was available."))
 }
 
 pub fn get_track() -> Option<Track> {
+    let sources = available_sources();
+    for source in sources {
+        if let Some(track) = source.current_track() {
+            return Some(track);
+        }
+    }
     return None
 }
 
@@ -66,8 +88,8 @@ pub fn available_sources() -> Vec<Box<dyn LyricsSource>> {
     let mut sources: Vec<Box<dyn LyricsSource>> = Vec::new();
     #[cfg(target_os = "macos")]
     {
-        // sources.push(Box::new(AppleMusic::new()));
-        // sources.push(Box::new(Spotify::new()));
+        sources.push(Box::new(AppleMusic::new()));
+        sources.push(Box::new(Spotify::new()));
     }
 
     #[cfg(not(target_os = "macos"))]