1
0
Fork 0
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:
Paul Fariello 2025-09-23 12:33:58 +02:00
parent 2e55999df3
commit 59767ce9f2
2 changed files with 47 additions and 2 deletions

View file

@ -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,

View file

@ -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,