From d9795f675296408e836c76816585b215419f6792 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Fri, 17 Oct 2025 03:47:23 -0600 Subject: [PATCH] fix: permitir reintentar canciones que fallaron previamente MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El Set failedTracks marcaba canciones como fallidas permanentemente durante toda la sesión, sin permitir reintentarlas. Esto causaba que canciones que fallaban por razones temporales (ej: sesión expirada) quedaran marcadas como error incluso después de resolver el problema. Cambios implementados: - Limpiar estado de error al inicio de playTrack() antes de reintentar - Agregar watcher que limpia todos los errores cuando se restablece auth - Agregar watcher que limpia errores cuando se cargan canciones exitosamente Con esto, las canciones con error pueden reintentarse haciendo click nuevamente, y todos los errores se limpian automáticamente cuando la autenticación se restablece o se cargan canciones exitosamente. --- pages/index.vue | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/pages/index.vue b/pages/index.vue index afc8f2a..abc1c88 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -167,12 +167,19 @@ const generateShuffledIndices = () => { } const playTrack = async (track, index) => { + // Limpiar el estado de error de esta canción si existe + // (permite reintentar canciones que fallaron previamente) + if (failedTracks.value.has(track.name)) { + console.log('[PlayTrack] Clearing previous error state for:', track.name) + failedTracks.value.delete(track.name) + } + loadingTrack.value = track.name currentTrack.value = track - currentTrackIndex.value = isShuffled.value + currentTrackIndex.value = isShuffled.value ? shuffledIndices.value.indexOf(tracks.value.indexOf(track)) : index - + if (audioPlayer.value) { // Clear previous audio data if (audioPlayer.value.currentBlobUrl) { @@ -419,6 +426,24 @@ watch(isDark, (newValue) => { } }, { immediate: true }) +// Limpiar errores cuando se restablece la autenticación +watch(() => musicStore.error, (newError, oldError) => { + // Si el error se limpia (de error a null), limpiar todos los errores de canciones + if (oldError && !newError && failedTracks.value.size > 0) { + console.log('[PlayTrack] Auth restored, clearing all failed tracks') + failedTracks.value.clear() + } +}) + +// Limpiar errores cuando se cargan canciones exitosamente +watch(() => musicStore.tracks.length, (newLength, oldLength) => { + // Si se cargan canciones exitosamente, limpiar errores + if (newLength > 0 && newLength !== oldLength && failedTracks.value.size > 0) { + console.log('[PlayTrack] Tracks loaded successfully, clearing failed tracks') + failedTracks.value.clear() + } +}) + watch(() => audioPlayer.value, (newAudio) => { if (newAudio) { newAudio.addEventListener('play', () => { isPlaying.value = true })