Music player lifetime loop
This commit is contained in:
parent
7e4900c59b
commit
a65164d70b
|
@ -83,6 +83,41 @@ impl<'a> From<&MetadataMap<'a>> for Metadata {
|
|||
}
|
||||
}*/
|
||||
|
||||
async fn player_main(
|
||||
player: &PlayerProxy<'_>,
|
||||
magpie: &mut MagpieClient,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
use futures_util::StreamExt;
|
||||
let mut playback_status = player.receive_playback_status_changed().await.fuse();
|
||||
let mut metadata = player.receive_metadata_changed().await.fuse();
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
let map = metadata.get().await?.into();
|
||||
let metadata = Metadata::from(&map);
|
||||
|
||||
println!("Metadata: {:#?}", metadata);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
let module_path = args
|
||||
|
@ -92,37 +127,8 @@ fn main() {
|
|||
|
||||
let mut magpie = MagpieClient::new().unwrap();
|
||||
|
||||
let result: Result<(), Box<dyn std::error::Error>> = smol::block_on(async {
|
||||
let dbus = zbus::Connection::session().await?;
|
||||
let player = find_player(&dbus).await?.unwrap();
|
||||
|
||||
use futures_util::StreamExt;
|
||||
let mut playback_status = player.receive_playback_status_changed().await.fuse();
|
||||
let mut metadata = player.receive_metadata_changed().await.fuse();
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
let map = metadata.get().await?.into();
|
||||
let metadata = Metadata::from(&map);
|
||||
|
||||
println!("Metadata: {:#?}", metadata);
|
||||
}
|
||||
};
|
||||
}
|
||||
smol::block_on(async {
|
||||
let dbus = zbus::Connection::session().await.unwrap();
|
||||
|
||||
let protocol = "tebibyte-media.desktop.music-player-controller".to_string();
|
||||
let script = std::path::PathBuf::from(&module_path);
|
||||
|
@ -134,15 +140,55 @@ fn main() {
|
|||
let msg = MagpieServerMsg::CreatePanel(msg);
|
||||
magpie.messenger.send(&msg).unwrap();
|
||||
|
||||
std::future::pending::<()>().await;
|
||||
let mut first_loop = true;
|
||||
let mut connected = false;
|
||||
|
||||
Ok(())
|
||||
loop {
|
||||
if !first_loop {
|
||||
let wait = std::time::Duration::from_secs(1);
|
||||
std::thread::sleep(wait);
|
||||
}
|
||||
|
||||
first_loop = false;
|
||||
|
||||
if connected {
|
||||
println!("Disconnected from MPRIS");
|
||||
let msg = InMsg::Disconnected;
|
||||
magpie.send_json_message(0, &msg);
|
||||
connected = false;
|
||||
}
|
||||
|
||||
println!("Connecting to MPRIS...");
|
||||
|
||||
let player = match find_player(&dbus).await {
|
||||
Ok(Some(player)) => player,
|
||||
Ok(None) => {
|
||||
eprintln!("Couldn't find player");
|
||||
continue;
|
||||
}
|
||||
Err(err) => {
|
||||
eprintln!("D-Bus error while finding player: {:?}", err);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
println!(
|
||||
"Connected to \"{}\" ({})",
|
||||
player.path().as_str(),
|
||||
player.destination().as_str()
|
||||
);
|
||||
connected = true;
|
||||
magpie.send_json_message(0, &InMsg::Connected);
|
||||
|
||||
match player_main(&player, &mut magpie).await {
|
||||
Ok(()) => {}
|
||||
Err(err) => {
|
||||
eprintln!("D-Bus error while connected to player: {:?}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if let Err(err) = result {
|
||||
eprintln!("Music player error: {:?}", err);
|
||||
}
|
||||
|
||||
/*let mut first_loop = true;
|
||||
let mut connected = false;
|
||||
|
||||
|
|
Loading…
Reference in New Issue