diff --git a/front/src/composables/audio/tracks.ts b/front/src/composables/audio/tracks.ts index 13fc845db..7c24f5560 100644 --- a/front/src/composables/audio/tracks.ts +++ b/front/src/composables/audio/tracks.ts @@ -122,7 +122,7 @@ export const useTracks = createGlobalState(() => { }, 3000, { immediate: false }) // Preload next track - const { start: startPreloadTimeout } = useTimeoutFn(async (index) => { + const { start: startPreloadTimeout, stop: abortPreload } = useTimeoutFn(async (index) => { const { queue } = useQueue() const sound = await createSound(queue.value[index as number]) await sound.preload() @@ -167,15 +167,15 @@ export const useTracks = createGlobalState(() => { let lastTrack: QueueTrack watchEffect(async () => { + abortPreload() + if (!hasNext.value) return const nextTrack = queue.value[currentIndex.value + 1] - if (lastTrack === nextTrack) return + if (nextTrack && lastTrack === nextTrack) return lastTrack = nextTrack // NOTE: Preload next track - // Calling this function clears previous timeout and starts a new one. - // Since this watchEffect fires whenever currentIndex / nextTrack changes, it will automatically cleanup previous preload. // @ts-expect-error vueuse is wrongly typed: https://github.com/vueuse/vueuse/issues/2691 startPreloadTimeout(currentIndex.value + 1) })