diff --git a/Cargo.toml b/Cargo.toml index b25828c..9407137 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +anyhow = "1.0.81" +mpris = "2.0.1" diff --git a/src/main.rs b/src/main.rs index e7a11a9..9e5056f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,17 @@ +mod player; + +use mpris::PlayerFinder; + fn main() { println!("Hello, world!"); + let player = PlayerFinder::new() + .expect("Could not connect to D-Bus") + .find_active() + .expect("Could not find any player"); + + let metadata = player.get_metadata().expect("Could not find metadata"); + if let (Some(title), Some(artists)) = (metadata.title(), metadata.artists()) { + let artist = artists.join(", "); + println!("Current track: {artist} - {title}"); + } } diff --git a/src/player.rs b/src/player.rs new file mode 100644 index 0000000..f63a527 --- /dev/null +++ b/src/player.rs @@ -0,0 +1,24 @@ +use anyhow::{anyhow, Result}; +use mpris::PlayerFinder; + +pub struct MprisPlayer { + player_finder: PlayerFinder, +} + +impl MprisPlayer { + pub fn new() -> Result { + let player_finder = PlayerFinder::new()?; + Ok(MprisPlayer { player_finder }) + } + + pub fn get_interpret_and_track(&self) -> Result { + let player = self.player_finder.find_active()?; + + let metadata = player.get_metadata()?; + if let (Some(title), Some(artists)) = (metadata.title(), metadata.artists()) { + let artist = artists.join(", "); + return Ok(format!("{artist} - {title}")); + } + Err(anyhow!("Could not create interpret and title string")) + } +}