summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tangara/audio/audio_fsm.cpp13
1 files changed, 13 insertions, 0 deletions
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<std::string>(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();
+ }
+ }
});
}