Skip to content

Commit 4f55158

Browse files
committed
feat(player): Allow for stopped event without track_id
1 parent a7a65b0 commit 4f55158

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

playback/src/player.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ pub enum PlayerEvent {
142142
},
143143
// Fired when the player is stopped (e.g. by issuing a "stop" command to the player).
144144
Stopped {
145-
play_request_id: u64,
146-
track_id: SpotifyUri,
145+
play_request_id: Option<u64>,
146+
track_id: Option<SpotifyUri>,
147147
},
148148
// The player is delayed by loading a track.
149149
Loading {
@@ -267,7 +267,8 @@ impl PlayerEvent {
267267
play_request_id, ..
268268
}
269269
| Stopped {
270-
play_request_id, ..
270+
play_request_id: Some(play_request_id),
271+
..
271272
}
272273
| PositionCorrection {
273274
play_request_id, ..
@@ -1541,8 +1542,8 @@ impl PlayerInternal {
15411542

15421543
self.ensure_sink_stopped(false);
15431544
self.send_event(PlayerEvent::Stopped {
1544-
track_id,
1545-
play_request_id,
1545+
track_id: Some(track_id),
1546+
play_request_id: Some(play_request_id),
15461547
});
15471548
self.state = PlayerState::Stopped;
15481549
}
@@ -2203,7 +2204,12 @@ impl PlayerInternal {
22032204
track_id: track_id.clone(),
22042205
});
22052206
}
2206-
_ => (),
2207+
PlayerState::Invalid | PlayerState::Stopped => {
2208+
let _ = sender.send(PlayerEvent::Stopped {
2209+
play_request_id: None,
2210+
track_id: None,
2211+
});
2212+
}
22072213
}
22082214

22092215
self.event_senders.push(sender);

src/mpris_event_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,9 +1301,9 @@ impl MprisTask {
13011301
let mut iface = iface_ref.get_mut().await;
13021302
let meta = &mut iface.metadata;
13031303

1304-
if meta.mpris.track_id.as_ref() != Some(&track_id) {
1304+
if meta.mpris.track_id.as_ref() != track_id.as_ref() {
13051305
*meta = Metadata::default();
1306-
meta.mpris.track_id = Some(track_id);
1306+
meta.mpris.track_id = track_id;
13071307
warn!("Missed TrackChanged event, metadata missing");
13081308
iface.metadata_changed(iface_ref.signal_context()).await?;
13091309
}

src/player_event_handler.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,18 @@ impl EventHandler {
109109
}
110110
}
111111
}
112-
PlayerEvent::Stopped { track_id, .. } => match track_id.to_id() {
113-
Err(e) => warn!("PlayerEvent::Stopped: Invalid track id: {e}"),
114-
Ok(id) => {
115-
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
116-
env_vars.insert("TRACK_ID", id);
112+
PlayerEvent::Stopped { track_id, .. } => {
113+
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
114+
match track_id.map(|track_id| track_id.to_id()) {
115+
Some(Err(e)) => {
116+
warn!("PlayerEvent::Stopped: Invalid track id: {e}")
117+
}
118+
Some(Ok(id)) => {
119+
env_vars.insert("TRACK_ID", id);
120+
}
121+
None => {}
117122
}
118-
},
123+
}
119124
PlayerEvent::Playing {
120125
track_id,
121126
position_ms,

0 commit comments

Comments
 (0)