File tree Expand file tree Collapse file tree 2 files changed +47
-2
lines changed Expand file tree Collapse file tree 2 files changed +47
-2
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ,
You can’t perform that action at this time.
0 commit comments