diff --git a/src/lib/services/deezer/queueManager.ts b/src/lib/services/deezer/queueManager.ts index 4fc26c8..81629bc 100644 --- a/src/lib/services/deezer/queueManager.ts +++ b/src/lib/services/deezer/queueManager.ts @@ -122,9 +122,6 @@ export class DeezerQueueManager { this.abortController = new AbortController(); console.log('[DeezerQueueManager] Starting queue processor'); - // Clear any stale currentJob from previous session - await setCurrentJob(null); - try { await this.processQueue(); } catch (error) { diff --git a/src/lib/stores/downloadQueue.ts b/src/lib/stores/downloadQueue.ts index 5fbf710..baec0ef 100644 --- a/src/lib/stores/downloadQueue.ts +++ b/src/lib/stores/downloadQueue.ts @@ -50,11 +50,34 @@ export async function loadDownloadQueue(): Promise { const queue = await store.get>('queue'); const currentJob = await store.get('currentJob'); - downloadQueue.set({ + // Reset any items stuck in 'downloading' state from previous session + const cleanedQueue = { ...(queue ?? {}) }; + let resetCount = 0; + for (const id in cleanedQueue) { + const item = cleanedQueue[id]; + if (item && item.status === 'downloading') { + cleanedQueue[id] = { + ...item, + status: 'queued', + progress: 0, + currentTrack: undefined + }; + resetCount++; + } + } + + if (resetCount > 0) { + console.log(`[DownloadQueue] Reset ${resetCount} interrupted download(s)`); + } + + const newState = { queueOrder: queueOrder ?? [], - queue: queue ?? {}, - currentJob: currentJob ?? null - }); + queue: cleanedQueue, + currentJob: null // Always clear currentJob on load + }; + + downloadQueue.set(newState); + await saveQueue(newState); } // Save queue to disk