--- /dev/null
+use std::io::Result;
+
+// #[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"))]
+// mod quod_libe;
+// #[cfg(not(target_os = "macos"))]
+// mod strawberry;
+// #[cfg(not(target_os = "macos"))]
+// mod tauon;
+
+// #[cfg(target_os = "macos")]
+// use apple_music::AppleMusic;
+// #[cfg(target_os = "macos")]
+// use spotify::Spotify;
+
+// #[cfg(not(target_os = "macos"))]
+// use rhythmbox::Rhythmbox;
+// #[cfg(not(target_os = "macos"))]
+// use quod_libet::QuodLibet;
+// #[cfg(not(target_os = "macos"))]
+// use strawberry::Strawberry;
+// #[cfg(not(target_os = "macos"))]
+// use tauon::Tauon;
+
+use crate::Track;
+
+pub trait LyricsSource {
+ fn name(&self) -> String;
+
+ fn current_track(&self) -> Option<Track>;
+
+ fn disable(&self) -> Result<()>;
+ fn enable(&self) -> Result<()>;
+ fn reset(&self) -> Result<()>;
+}
+
+pub fn list() -> Result<()> {
+ Ok(())
+}
+
+pub fn enable(source_name: String) -> Result<()> {
+ println!("Enabling {}", source_name);
+ Ok(())
+}
+
+pub fn disable(source_name: String) -> Result<()> {
+ println!("Disabling {}", source_name);
+ Ok(())
+}
+
+pub fn reset(source_name: String) -> Result<()> {
+ println!("Reset {}", source_name);
+ Ok(())
+}
+
+pub fn get_track() -> Option<Track> {
+ return None
+}
+
+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()));
+ }
+
+ #[cfg(not(target_os = "macos"))]
+ {
+ // sources.push(Box::new(Rhythmbox::new()));
+ // sources.push(Box::new(QuodLibet::new()));
+ // sources.push(Box::new(Strawberry::new()));
+ // sources.push(Box::new(Tauon::new()));
+ }
+
+ sources
+}