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,
}
impl<'a> From<&MetadataMap<'a>> for Metadata {
fn from(map: &MetadataMap<'a>) -> Self {
impl<'a> From<MetadataMap<'a>> for Metadata {
fn from(map: MetadataMap<'a>) -> Self {
let album = AlbumInfo {
title: map
.get("xesam:album")
@ -46,22 +46,15 @@ impl<'a> From<&MetadataMap<'a>> for Metadata {
}
}
/*impl MetadataTracker {
pub fn new(magpie: &mut MagpieClient, metadata: &MetadataMap) -> Self {
impl Metadata {
pub fn new(magpie: &mut MagpieClient, metadata: MetadataMap) -> Self {
let new: Self = metadata.into();
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::ProgressChanged(ProgressChanged {
position: 0.0,
length: metadata.length().map(|l| l.as_secs_f32()),
}),
);
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();
if self.album != new.album {
@ -70,18 +63,11 @@ impl<'a> From<&MetadataMap<'a>> for Metadata {
if self.track != new.track {
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;
}
}*/
}
async fn player_main(
player: &PlayerProxy<'_>,
@ -89,7 +75,9 @@ async fn player_main(
) -> 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();
let mut metadata_tracker = player.receive_metadata_changed().await.fuse();
let mut metadata = Metadata::new(magpie, player.metadata().await?);
loop {
futures_util::select! {
@ -99,18 +87,26 @@ async fn player_main(
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() => {
let metadata = match metadata {
new_metadata = metadata_tracker.next() => {
let new_metadata = match new_metadata {
Some(v) => v,
None => break,
};
let map = metadata.get().await?.into();
let metadata = Metadata::from(&map);
println!("Metadata: {:#?}", metadata);
let new_metadata = new_metadata.get().await?;
metadata.update(magpie, new_metadata);
}
};
}