use std::error::Error;
use mpd_client::{
client::{ConnectionEvent, Subsystem},
commands, Client,
};
use tokio::net::TcpStream;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error>> {
tracing_subscriber::fmt().init();
let connection = TcpStream::connect("localhost:6600").await?;
let (client, mut state_changes) = Client::connect(connection).await?;
'outer: loop {
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)"),
}
loop {
match state_changes.next().await {
Some(ConnectionEvent::SubsystemChange(Subsystem::Player)) => break,
Some(ConnectionEvent::SubsystemChange(_)) => continue,
_ => break 'outer, }
}
}
Ok(())
}