use futures::stream::StreamExt; use std::error::Error;
use tracing_subscriber::{EnvFilter, FmtSubscriber};
use mpd_client::{commands, Client, Subsystem};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error>> {
FmtSubscriber::builder()
.with_env_filter(EnvFilter::from_default_env())
.init();
let (client, mut state_changes) = Client::connect_to("localhost:6600").await?;
print_current_song(&client).await?;
while let Some(subsys) = state_changes.next().await {
let subsys = subsys?;
if subsys == Subsystem::Player {
print_current_song(&client).await?;
}
}
Ok(())
}
async fn print_current_song(client: &Client) -> Result<(), Box<dyn Error>> {
match client.command(commands::CurrentSong).await? {
Some(song_in_queue) => {
println!(
"\"{}\" by \"{}\"",
song_in_queue.song.title().unwrap_or(""),
song_in_queue.song.artists().join(", "),
);
}
None => println!("(none)"),
}
Ok(())
}