Skip to content

Commit 5cd8c3e

Browse files
committed
emit queue updates/lists to its broadcast/watch channels
diff prev and next tracks for queue changes. also emit queue list
1 parent 0f39bdb commit 5cd8c3e

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

connect/src/spirc.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,30 @@ impl SpircTask {
13771377
// tried: providing session_id, playback_id, track-metadata "track_player"
13781378
self.update_state = true;
13791379
} else if let Some(state) = cluster.player_state.take() {
1380-
self.emit_state_update(Some(state))
1380+
if let Some(last_state) = &self.last_player_state {
1381+
let prev_changed = state.prev_tracks != last_state.prev_tracks;
1382+
let next_changed = state.next_tracks != last_state.next_tracks;
1383+
if prev_changed || next_changed {
1384+
let queue_list = QueueList {
1385+
prev_tracks: state.prev_tracks.iter().map(|t| t.uri.clone()).collect(),
1386+
next_tracks: state.next_tracks.iter().map(|t| t.uri.clone()).collect(),
1387+
};
1388+
let _ = self.queue_list_sender.send(queue_list);
1389+
1390+
if prev_changed {
1391+
self.emit_queue_update(QueueUpdateEvent {
1392+
reason: QueueUpdateReason::PrevTracksChanged,
1393+
});
1394+
}
1395+
if next_changed {
1396+
self.emit_queue_update(QueueUpdateEvent {
1397+
reason: QueueUpdateReason::NextTracksChanged,
1398+
});
1399+
}
1400+
}
1401+
}
1402+
self.emit_player_update(Some(state.clone()), self.last_player_state.as_ref());
1403+
self.last_player_state = Some(state);
13811404
}
13821405
} else if self.connect_state.is_active() {
13831406
self.connect_state.became_inactive(&self.session).await?;

0 commit comments

Comments
 (0)