Skip to content

Commit 38e5a69

Browse files
committed
feat(player): Send current state of player for all new player listeners
1 parent 81b9249 commit 38e5a69

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

playback/src/player.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2163,7 +2163,51 @@ impl PlayerInternal {
21632163

21642164
PlayerCommand::SetSession(session) => self.session = session,
21652165

2166-
PlayerCommand::AddEventSender(sender) => self.event_senders.push(sender),
2166+
PlayerCommand::AddEventSender(sender) => {
2167+
// Send current player state to new event listener
2168+
match self.state {
2169+
PlayerState::Loading {
2170+
ref track_id,
2171+
play_request_id,
2172+
..
2173+
} => {
2174+
let _ = sender.send(PlayerEvent::Loading {
2175+
play_request_id,
2176+
track_id: track_id.clone(),
2177+
position_ms: 0, // TODO
2178+
});
2179+
}
2180+
PlayerState::Paused {
2181+
ref track_id,
2182+
play_request_id,
2183+
stream_position_ms,
2184+
..
2185+
} => {
2186+
let _ = sender.send(PlayerEvent::Paused {
2187+
play_request_id,
2188+
track_id: track_id.clone(),
2189+
position_ms: stream_position_ms,
2190+
});
2191+
}
2192+
PlayerState::Playing { ref audio_item, .. } => {
2193+
let audio_item = Box::new(audio_item.clone());
2194+
let _ = sender.send(PlayerEvent::TrackChanged { audio_item });
2195+
}
2196+
PlayerState::EndOfTrack {
2197+
play_request_id,
2198+
ref track_id,
2199+
..
2200+
} => {
2201+
let _ = sender.send(PlayerEvent::EndOfTrack {
2202+
play_request_id,
2203+
track_id: track_id.clone(),
2204+
});
2205+
}
2206+
_ => (),
2207+
}
2208+
2209+
self.event_senders.push(sender);
2210+
}
21672211

21682212
PlayerCommand::SetSinkEventCallback(callback) => self.sink_event_callback = callback,
21692213

src/mpris_event_handler.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,8 @@ impl MprisEventHandler {
844844
};
845845
let mpris_player_service = MprisPlayerService {
846846
spirc: None,
847-
// FIXME: obtain current values from Player
847+
// Values are updated upon reception of first player state, right after MprisTask event
848+
// handler registration
848849
repeat: LoopStatus::None,
849850
shuffle: false,
850851
playback_status: PlaybackStatus::Stopped,

0 commit comments

Comments
 (0)