Skip to content

Commit 16d1c0f

Browse files
committed
feat(player): Allow for stopped event without track_id
1 parent 867f537 commit 16d1c0f

3 files changed

Lines changed: 25 additions & 14 deletions

File tree

playback/src/player.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ pub enum PlayerEvent {
148148
},
149149
// Fired when the player is stopped (e.g. by issuing a "stop" command to the player).
150150
Stopped {
151-
play_request_id: u64,
152-
track_id: SpotifyUri,
151+
play_request_id: Option<u64>,
152+
track_id: Option<SpotifyUri>,
153153
},
154154
// The player is delayed by loading a track.
155155
Loading {
@@ -273,7 +273,8 @@ impl PlayerEvent {
273273
play_request_id, ..
274274
}
275275
| Stopped {
276-
play_request_id, ..
276+
play_request_id: Some(play_request_id),
277+
..
277278
}
278279
| PositionCorrection {
279280
play_request_id, ..
@@ -1664,8 +1665,8 @@ impl PlayerInternal {
16641665

16651666
self.ensure_sink_stopped(false);
16661667
self.send_event(PlayerEvent::Stopped {
1667-
track_id,
1668-
play_request_id,
1668+
track_id: Some(track_id),
1669+
play_request_id: Some(play_request_id),
16691670
});
16701671
self.state = PlayerState::Stopped;
16711672
}
@@ -2326,7 +2327,12 @@ impl PlayerInternal {
23262327
track_id: track_id.clone(),
23272328
});
23282329
}
2329-
_ => (),
2330+
PlayerState::Invalid | PlayerState::Stopped => {
2331+
let _ = sender.send(PlayerEvent::Stopped {
2332+
play_request_id: None,
2333+
track_id: None,
2334+
});
2335+
}
23302336
}
23312337

23322338
self.event_senders.push(sender);

src/mpris_event_handler.rs

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

1319-
if meta.mpris.track_id.as_ref() != Some(&track_id) {
1319+
if meta.mpris.track_id.as_ref() != track_id.as_ref() {
13201320
*meta = Metadata::default();
1321-
meta.mpris.track_id = Some(track_id);
1321+
meta.mpris.track_id = track_id;
13221322
warn!("Missed TrackChanged event, metadata missing");
13231323
iface.metadata_changed(iface_ref.signal_context()).await?;
13241324
}

src/player_event_handler.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,18 @@ impl EventHandler {
144144
}
145145
}
146146
}
147-
PlayerEvent::Stopped { track_id, .. } => match track_id.to_id() {
148-
Err(e) => warn!("PlayerEvent::Stopped: Invalid track id: {e}"),
149-
Ok(id) => {
150-
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
151-
env_vars.insert("TRACK_ID", id);
147+
PlayerEvent::Stopped { track_id, .. } => {
148+
env_vars.insert("PLAYER_EVENT", "stopped".to_string());
149+
match track_id.map(|track_id| track_id.to_id()) {
150+
Some(Err(e)) => {
151+
warn!("PlayerEvent::Stopped: Invalid track id: {e}")
152+
}
153+
Some(Ok(id)) => {
154+
env_vars.insert("TRACK_ID", id);
155+
}
156+
None => {}
152157
}
153-
},
158+
}
154159
PlayerEvent::Playing {
155160
track_id,
156161
position_ms,

0 commit comments

Comments
 (0)