Music player sends ProgressChanged events on track change
This commit is contained in:
parent
7f7a88cb15
commit
e5f9985bb9
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
|||
pub use serde;
|
||||
pub use serde_json;
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
|
||||
pub enum PlaybackStatus {
|
||||
/// A track is currently playing.
|
||||
Playing,
|
||||
|
@ -18,7 +18,7 @@ pub enum PlaybackStatus {
|
|||
Stopped,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
|
||||
pub enum LoopStatus {
|
||||
/// The playback will stop when there are no more tracks to play.
|
||||
None,
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
use canary_music_player::*;
|
||||
use canary_magpie::client::MagpieClient;
|
||||
use canary_magpie::protocol::{CreatePanel, MagpieServerMsg};
|
||||
use canary_music_player::*;
|
||||
use mpris::PlayerFinder;
|
||||
|
||||
pub struct MetadataTracker {
|
||||
|
@ -11,8 +12,8 @@ pub struct MetadataTracker {
|
|||
pub track: TrackInfo,
|
||||
}
|
||||
|
||||
impl From<mpris::Metadata> for MetadataTracker {
|
||||
fn from(metadata: mpris::Metadata) -> Self {
|
||||
impl From<&mpris::Metadata> for MetadataTracker {
|
||||
fn from(metadata: &mpris::Metadata) -> Self {
|
||||
let album = AlbumInfo {
|
||||
title: metadata.album_name().map(ToString::to_string),
|
||||
artists: metadata
|
||||
|
@ -39,14 +40,21 @@ impl From<mpris::Metadata> for MetadataTracker {
|
|||
}
|
||||
|
||||
impl MetadataTracker {
|
||||
pub fn new(magpie: &mut MagpieClient, metadata: mpris::Metadata) -> Self {
|
||||
pub fn new(magpie: &mut MagpieClient, metadata: &mpris::Metadata) -> 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: mpris::Metadata) {
|
||||
pub fn update(&mut self, messenger: &mut MagpieClient, metadata: &mpris::Metadata) {
|
||||
let new: Self = metadata.into();
|
||||
|
||||
if self.album != new.album {
|
||||
|
@ -55,6 +63,13 @@ impl MetadataTracker {
|
|||
|
||||
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;
|
||||
|
@ -113,7 +128,7 @@ fn main() {
|
|||
magpie.send_json_message(0, &InMsg::Connected);
|
||||
|
||||
let metadata = player.get_metadata().unwrap();
|
||||
let mut metadata_tracker = MetadataTracker::new(&mut magpie, metadata);
|
||||
let mut metadata_tracker = MetadataTracker::new(&mut magpie, &metadata);
|
||||
|
||||
let mut events = match player.events() {
|
||||
Ok(events) => events,
|
||||
|
@ -153,7 +168,7 @@ fn main() {
|
|||
volume: volume as f32,
|
||||
}),
|
||||
PlayerShutDown => None,
|
||||
TrackChanged(metadata) => {
|
||||
TrackChanged(ref metadata) => {
|
||||
metadata_tracker.update(&mut magpie, metadata);
|
||||
None
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue