X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/blobdiff_plain/738ec06d26a2a19bdda8a992d2250e731d954631..b09ac886b7c6ca5f2248de1798a121b6d48bd858:/src/sources/mod.rs diff --git a/src/sources/mod.rs b/src/sources/mod.rs index fb7af8f..087a87f 100644 --- a/src/sources/mod.rs +++ b/src/sources/mod.rs @@ -1,31 +1,20 @@ -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 std::io::{Result, Error, ErrorKind::Other}; + +#[cfg(target_os = "macos")] +mod apple_music; +#[cfg(target_os = "macos")] +mod spotify; + +#[cfg(target_os = "linux")] +mod dbus; + +#[cfg(target_os = "macos")] +use apple_music::AppleMusic; +#[cfg(target_os = "macos")] +use spotify::Spotify; + +#[cfg(target_os = "linux")] +use dbus::Dbus; use crate::Track; @@ -39,26 +28,47 @@ pub trait LyricsSource { fn reset(&self) -> Result<()>; } -pub fn list() -> Result<()> { - Ok(()) +pub fn list() -> Vec { + 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 { + let sources = available_sources(); + for source in sources { + if let Some(track) = source.current_track() { + return Some(track); + } + } return None } @@ -66,16 +76,13 @@ pub fn available_sources() -> Vec> { let mut sources: Vec> = 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"))] { - // 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.push(Box::new(Dbus::new())); } sources