Update script playback status + metadata

This commit is contained in:
mars 2022-11-19 23:51:34 -07:00
parent a65164d70b
commit 13a9735bdc
1 changed files with 24 additions and 28 deletions

View File

@ -15,8 +15,8 @@ pub struct Metadata {
pub track: TrackInfo, pub track: TrackInfo,
} }
impl<'a> From<&MetadataMap<'a>> for Metadata { impl<'a> From<MetadataMap<'a>> for Metadata {
fn from(map: &MetadataMap<'a>) -> Self { fn from(map: MetadataMap<'a>) -> Self {
let album = AlbumInfo { let album = AlbumInfo {
title: map title: map
.get("xesam:album") .get("xesam:album")
@ -46,22 +46,15 @@ impl<'a> From<&MetadataMap<'a>> for Metadata {
} }
} }
/*impl MetadataTracker { impl Metadata {
pub fn new(magpie: &mut MagpieClient, metadata: &MetadataMap) -> Self { pub fn new(magpie: &mut MagpieClient, metadata: MetadataMap) -> Self {
let new: Self = metadata.into(); let new: Self = metadata.into();
magpie.send_json_message(0, &InMsg::AlbumChanged(new.album.clone())); magpie.send_json_message(0, &InMsg::AlbumChanged(new.album.clone()));
magpie.send_json_message(0, &InMsg::TrackChanged(new.track.clone())); magpie.send_json_message(0, &InMsg::TrackChanged(new.track.clone()));
magpie.send_json_message(
0,
&InMsg::ProgressChanged(ProgressChanged {
position: 0.0,
length: metadata.length().map(|l| l.as_secs_f32()),
}),
);
new new
} }
pub fn update(&mut self, messenger: &mut MagpieClient, metadata: &MetadataMap) { pub fn update(&mut self, messenger: &mut MagpieClient, metadata: MetadataMap) {
let new: Self = metadata.into(); let new: Self = metadata.into();
if self.album != new.album { if self.album != new.album {
@ -70,18 +63,11 @@ impl<'a> From<&MetadataMap<'a>> for Metadata {
if self.track != new.track { if self.track != new.track {
messenger.send_json_message(0, &InMsg::TrackChanged(new.track.clone())); messenger.send_json_message(0, &InMsg::TrackChanged(new.track.clone()));
messenger.send_json_message(
0,
&InMsg::ProgressChanged(ProgressChanged {
position: 0.0,
length: metadata.length().map(|l| l.as_secs_f32()),
}),
);
} }
*self = new; *self = new;
} }
}*/ }
async fn player_main( async fn player_main(
player: &PlayerProxy<'_>, player: &PlayerProxy<'_>,
@ -89,7 +75,9 @@ async fn player_main(
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
use futures_util::StreamExt; use futures_util::StreamExt;
let mut playback_status = player.receive_playback_status_changed().await.fuse(); let mut playback_status = player.receive_playback_status_changed().await.fuse();
let mut metadata = player.receive_metadata_changed().await.fuse(); let mut metadata_tracker = player.receive_metadata_changed().await.fuse();
let mut metadata = Metadata::new(magpie, player.metadata().await?);
loop { loop {
futures_util::select! { futures_util::select! {
@ -99,18 +87,26 @@ async fn player_main(
None => break, None => break,
}; };
println!("Status: {}", status.get().await?); let status = status.get().await?;
let status = match status.as_str() {
"Playing" => Some(PlaybackStatus::Playing),
"Paused" => Some(PlaybackStatus::Paused),
"Stopped" => Some(PlaybackStatus::Stopped),
_ => None,
};
if let Some(status) = status {
magpie.send_json_message(0, &InMsg::PlaybackStatusChanged(status));
}
} }
metadata = metadata.next() => { new_metadata = metadata_tracker.next() => {
let metadata = match metadata { let new_metadata = match new_metadata {
Some(v) => v, Some(v) => v,
None => break, None => break,
}; };
let map = metadata.get().await?.into(); let new_metadata = new_metadata.get().await?;
let metadata = Metadata::from(&map); metadata.update(magpie, new_metadata);
println!("Metadata: {:#?}", metadata);
} }
}; };
} }