Update script playback status + metadata
This commit is contained in:
parent
a65164d70b
commit
13a9735bdc
|
@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue