mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-03 09:49:31 +02:00
feat(player): Allow for stopped event without track_id
This commit is contained in:
parent
a7a65b0da2
commit
4f55158398
3 changed files with 25 additions and 14 deletions
|
@ -142,8 +142,8 @@ pub enum PlayerEvent {
|
||||||
},
|
},
|
||||||
// Fired when the player is stopped (e.g. by issuing a "stop" command to the player).
|
// Fired when the player is stopped (e.g. by issuing a "stop" command to the player).
|
||||||
Stopped {
|
Stopped {
|
||||||
play_request_id: u64,
|
play_request_id: Option<u64>,
|
||||||
track_id: SpotifyUri,
|
track_id: Option<SpotifyUri>,
|
||||||
},
|
},
|
||||||
// The player is delayed by loading a track.
|
// The player is delayed by loading a track.
|
||||||
Loading {
|
Loading {
|
||||||
|
@ -267,7 +267,8 @@ impl PlayerEvent {
|
||||||
play_request_id, ..
|
play_request_id, ..
|
||||||
}
|
}
|
||||||
| Stopped {
|
| Stopped {
|
||||||
play_request_id, ..
|
play_request_id: Some(play_request_id),
|
||||||
|
..
|
||||||
}
|
}
|
||||||
| PositionCorrection {
|
| PositionCorrection {
|
||||||
play_request_id, ..
|
play_request_id, ..
|
||||||
|
@ -1541,8 +1542,8 @@ impl PlayerInternal {
|
||||||
|
|
||||||
self.ensure_sink_stopped(false);
|
self.ensure_sink_stopped(false);
|
||||||
self.send_event(PlayerEvent::Stopped {
|
self.send_event(PlayerEvent::Stopped {
|
||||||
track_id,
|
track_id: Some(track_id),
|
||||||
play_request_id,
|
play_request_id: Some(play_request_id),
|
||||||
});
|
});
|
||||||
self.state = PlayerState::Stopped;
|
self.state = PlayerState::Stopped;
|
||||||
}
|
}
|
||||||
|
@ -2203,7 +2204,12 @@ impl PlayerInternal {
|
||||||
track_id: track_id.clone(),
|
track_id: track_id.clone(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
_ => (),
|
PlayerState::Invalid | PlayerState::Stopped => {
|
||||||
|
let _ = sender.send(PlayerEvent::Stopped {
|
||||||
|
play_request_id: None,
|
||||||
|
track_id: None,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.event_senders.push(sender);
|
self.event_senders.push(sender);
|
||||||
|
|
|
@ -1301,9 +1301,9 @@ impl MprisTask {
|
||||||
let mut iface = iface_ref.get_mut().await;
|
let mut iface = iface_ref.get_mut().await;
|
||||||
let meta = &mut iface.metadata;
|
let meta = &mut iface.metadata;
|
||||||
|
|
||||||
if meta.mpris.track_id.as_ref() != Some(&track_id) {
|
if meta.mpris.track_id.as_ref() != track_id.as_ref() {
|
||||||
*meta = Metadata::default();
|
*meta = Metadata::default();
|
||||||
meta.mpris.track_id = Some(track_id);
|
meta.mpris.track_id = track_id;
|
||||||
warn!("Missed TrackChanged event, metadata missing");
|
warn!("Missed TrackChanged event, metadata missing");
|
||||||
iface.metadata_changed(iface_ref.signal_context()).await?;
|
iface.metadata_changed(iface_ref.signal_context()).await?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,13 +109,18 @@ impl EventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerEvent::Stopped { track_id, .. } => match track_id.to_id() {
|
PlayerEvent::Stopped { track_id, .. } => {
|
||||||
Err(e) => warn!("PlayerEvent::Stopped: Invalid track id: {e}"),
|
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
|
||||||
Ok(id) => {
|
match track_id.map(|track_id| track_id.to_id()) {
|
||||||
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
|
Some(Err(e)) => {
|
||||||
env_vars.insert("TRACK_ID", id);
|
warn!("PlayerEvent::Stopped: Invalid track id: {e}")
|
||||||
|
}
|
||||||
|
Some(Ok(id)) => {
|
||||||
|
env_vars.insert("TRACK_ID", id);
|
||||||
|
}
|
||||||
|
None => {}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
PlayerEvent::Playing {
|
PlayerEvent::Playing {
|
||||||
track_id,
|
track_id,
|
||||||
position_ms,
|
position_ms,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue