diff --git a/apps/music-player/Cargo.toml b/apps/music-player/Cargo.toml index 36582b5..107df85 100644 --- a/apps/music-player/Cargo.toml +++ b/apps/music-player/Cargo.toml @@ -11,10 +11,11 @@ required-features = ["bin"] [dependencies] canary-magpie = { path = "../magpie", optional = true } +futures-util = { version = "0.3", optional = true } serde = { version = "1", features = ["derive"] } serde_json = "1" smol = { version = "1.2", optional = true } zbus = { version = "3.5", optional = true } [features] -bin = ["dep:canary-magpie", "dep:smol", "dep:zbus"] +bin = ["dep:canary-magpie", "dep:futures-util", "dep:smol", "dep:zbus"] diff --git a/apps/music-player/src/main.rs b/apps/music-player/src/main.rs index 6560590..4adce75 100644 --- a/apps/music-player/src/main.rs +++ b/apps/music-player/src/main.rs @@ -8,7 +8,6 @@ use canary_music_player::*; pub mod mpris; use mpris::*; -use smol::stream::StreamExt; pub struct Metadata { pub album: AlbumInfo, @@ -96,12 +95,30 @@ fn main() { let dbus = zbus::Connection::session().await?; let player = find_player(&dbus).await?.unwrap(); - let mut playback_status = player.receive_playback_status_changed().await; - while let Some(status) = playback_status.next().await { - println!("Status: {}", status.get().await?); - } + use futures_util::StreamExt; + let mut playback_status = player.receive_playback_status_changed().await.fuse(); + let mut metadata = player.receive_metadata_changed().await.fuse(); - println!("Done looping."); + loop { + futures_util::select! { + status = playback_status.next() => { + let status = match status { + Some(v) => v, + None => break, + }; + + println!("Status: {}", status.get().await?); + } + metadata = metadata.next() => { + let metadata = match metadata { + Some(v) => v, + None => break, + }; + + println!("Metadata: {:#?}", metadata.get().await?); + } + }; + } let protocol = "tebibyte-media.desktop.music-player-controller".to_string(); let script = std::path::PathBuf::from(&module_path);