From 9f5b60f58ec5e4e0b384b786f648dc8555bbcdca Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Mon, 12 May 2025 06:13:44 -0500 Subject: [PATCH] Fix issue where offline playback starts at the incorrect index (#355) Fixes an issue where offline playback wouldn't start at the correct track and the player wouldn't reflect the currently playing track --- src/providers/Player/queue.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/providers/Player/queue.tsx b/src/providers/Player/queue.tsx index b7f7cfbf..9967a387 100644 --- a/src/providers/Player/queue.tsx +++ b/src/providers/Player/queue.tsx @@ -176,18 +176,28 @@ const QueueContextInitailizer = () => { setSkipping(true) + // Get the item at the start index + const startingTrack = audioItems[startIndex] + const availableAudioItems = filterTracksOnNetworkStatus( networkStatus as networkStatusTypes, audioItems, downloadedTracks ?? [], ) + // The start index may have changed due to the filtered out items + const filteredStartIndex = availableAudioItems.findIndex( + (item) => item.Id === startingTrack.Id, + ) + console.debug( `Filtered out ${ audioItems.length - availableAudioItems.length } due to network status being ${networkStatus}`, ) + console.debug(`Filtered start index is ${filteredStartIndex}`) + const queue = availableAudioItems.map((item) => mapDtoToTrack(api!, sessionId, item, downloadedTracks ?? [], QueuingType.FromSelection), ) @@ -196,11 +206,11 @@ const QueueContextInitailizer = () => { await TrackPlayer.setQueue(queue) setPlayQueue(queue) - await TrackPlayer.skip(startIndex) + await TrackPlayer.skip(filteredStartIndex) setSkipping(false) - console.debug(`Queued ${queue.length} tracks, starting at ${startIndex}`) + console.debug(`Queued ${queue.length} tracks, starting at ${filteredStartIndex}`) await play() }