From 649cb74f036c392264264d35f98bef1fa4a5a8aa Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 30 Jul 2024 14:56:58 +1000 Subject: [PATCH] Advance the queue when the current track fails to start --- src/tangara/audio/audio_fsm.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/tangara/audio/audio_fsm.cpp b/src/tangara/audio/audio_fsm.cpp index 65261d75..a43cd932 100644 --- a/src/tangara/audio/audio_fsm.cpp +++ b/src/tangara/audio/audio_fsm.cpp @@ -142,7 +142,20 @@ void AudioState::react(const SetTrack& ev) { sStreamFactory->create(std::get(new_track), seek_to); } + // Always give the stream to the decoder, even if it turns out to be empty. + // This has the effect of stopping the current playback, which is generally + // what the user expects to happen when they say "Play this track!", even + // if the new track has an issue. sDecoder->open(stream); + + // ...but if the stream that failed is the front of the queue, then we + // should advance to the next track in order to keep the tunes flowing. + if (!stream) { + auto& queue = sServices->track_queue(); + if (new_track == queue.current()) { + queue.finish(); + } + } }); }