mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-03 17:59:24 +02:00
feat(player): Send current state of player for all new player listeners
This commit is contained in:
parent
2e55999df3
commit
59767ce9f2
2 changed files with 47 additions and 2 deletions
|
@ -2163,7 +2163,51 @@ impl PlayerInternal {
|
||||||
|
|
||||||
PlayerCommand::SetSession(session) => self.session = session,
|
PlayerCommand::SetSession(session) => self.session = session,
|
||||||
|
|
||||||
PlayerCommand::AddEventSender(sender) => self.event_senders.push(sender),
|
PlayerCommand::AddEventSender(sender) => {
|
||||||
|
// Send current player state to new event listener
|
||||||
|
match self.state {
|
||||||
|
PlayerState::Loading {
|
||||||
|
ref track_id,
|
||||||
|
play_request_id,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let _ = sender.send(PlayerEvent::Loading {
|
||||||
|
play_request_id,
|
||||||
|
track_id: track_id.clone(),
|
||||||
|
position_ms: 0, // TODO
|
||||||
|
});
|
||||||
|
}
|
||||||
|
PlayerState::Paused {
|
||||||
|
ref track_id,
|
||||||
|
play_request_id,
|
||||||
|
stream_position_ms,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let _ = sender.send(PlayerEvent::Paused {
|
||||||
|
play_request_id,
|
||||||
|
track_id: track_id.clone(),
|
||||||
|
position_ms: stream_position_ms,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
PlayerState::Playing { ref audio_item, .. } => {
|
||||||
|
let audio_item = Box::new(audio_item.clone());
|
||||||
|
let _ = sender.send(PlayerEvent::TrackChanged { audio_item });
|
||||||
|
}
|
||||||
|
PlayerState::EndOfTrack {
|
||||||
|
play_request_id,
|
||||||
|
ref track_id,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let _ = sender.send(PlayerEvent::EndOfTrack {
|
||||||
|
play_request_id,
|
||||||
|
track_id: track_id.clone(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
self.event_senders.push(sender);
|
||||||
|
}
|
||||||
|
|
||||||
PlayerCommand::SetSinkEventCallback(callback) => self.sink_event_callback = callback,
|
PlayerCommand::SetSinkEventCallback(callback) => self.sink_event_callback = callback,
|
||||||
|
|
||||||
|
|
|
@ -844,7 +844,8 @@ impl MprisEventHandler {
|
||||||
};
|
};
|
||||||
let mpris_player_service = MprisPlayerService {
|
let mpris_player_service = MprisPlayerService {
|
||||||
spirc: None,
|
spirc: None,
|
||||||
// FIXME: obtain current values from Player
|
// Values are updated upon reception of first player state, right after MprisTask event
|
||||||
|
// handler registration
|
||||||
repeat: LoopStatus::None,
|
repeat: LoopStatus::None,
|
||||||
shuffle: false,
|
shuffle: false,
|
||||||
playback_status: PlaybackStatus::Stopped,
|
playback_status: PlaybackStatus::Stopped,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue