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::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,
|
||||
|
||||
|
|
|
@ -844,7 +844,8 @@ impl MprisEventHandler {
|
|||
};
|
||||
let mpris_player_service = MprisPlayerService {
|
||||
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,
|
||||
shuffle: false,
|
||||
playback_status: PlaybackStatus::Stopped,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue