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