From 6fabc2fa262878e89f19d239bff892c7e777d74b Mon Sep 17 00:00:00 2001 From: Cristan Beskid <596554+sferra@users.noreply.github.com> Date: Thu, 29 Feb 2024 22:41:59 +0100 Subject: [PATCH] Fix hanging playback when no stream is available --- packages/app/app/actions/queue.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/app/app/actions/queue.ts b/packages/app/app/actions/queue.ts index f6db772737..6e29db79fe 100644 --- a/packages/app/app/actions/queue.ts +++ b/packages/app/app/actions/queue.ts @@ -209,6 +209,12 @@ export const findStreamsForTrack = (index: number) => async (dispatch, getState) ...streamData.slice(1) ]; + const firstStream = streamData[0]; + if (!firstStream?.stream) { + removeFirstStream(track, index, streamData, dispatch); + return; + } + dispatch( updateQueueItem({ ...track, @@ -237,6 +243,22 @@ export const findStreamsForTrack = (index: number) => async (dispatch, getState) } }; +function removeFirstStream(track: QueueItem, trackIndex: number, streams: TrackStream[], dispatch) { + if (streams.length === 1) { + // no more streams are available + // return removeTrackAction(trackIndex); + dispatch(removeFromQueue(trackIndex)); + } else { + // remove the first (unavailable) stream + dispatch(updateQueueItem({ + ...track, + loading: true, + error: false, + streams: streams.slice(1) + })); + } +} + export function playTrack(streamProviders, item: QueueItem) { return (dispatch) => { dispatch(clearQueue());