diff --git a/src/lib/services/deezer/queueManager.ts b/src/lib/services/deezer/queueManager.ts index 4601a59..d6cb7ec 100644 --- a/src/lib/services/deezer/queueManager.ts +++ b/src/lib/services/deezer/queueManager.ts @@ -197,6 +197,48 @@ export class DeezerQueueManager { console.log('[DeezerQueueManager] Queue processor stopped'); } + /** + * Ensure track has cover art URL by fetching album data if needed + * Reuses the same logic as addToQueue for consistency + */ + private async ensureCoverUrl(track: DeezerTrack): Promise { + // Skip if already has cover URL + if (track.albumCoverUrl) { + return; + } + + // Skip if no album ID to fetch with + if (!track.albumId || track.albumId === 0) { + console.log(`[DeezerQueueManager] Track "${track.title}" has no albumId, fetching track data...`); + + // Fetch track data to get album ID + try { + const trackData = await deezerAPI.getTrack(track.id.toString()); + if (trackData && trackData.ALB_ID) { + track.albumId = parseInt(trackData.ALB_ID.toString(), 10); + } else { + console.warn(`[DeezerQueueManager] Could not get album ID for track "${track.title}"`); + return; + } + } catch (error) { + console.warn(`[DeezerQueueManager] Error fetching track data for "${track.title}":`, error); + return; + } + } + + // Fetch album data for cover art URL + try { + const albumData = await deezerAPI.getAlbumData(track.albumId.toString()); + if (albumData?.ALB_PICTURE) { + track.albumCoverUrl = `https://e-cdns-images.dzcdn.net/images/cover/${albumData.ALB_PICTURE}/500x500-000000-80-0-0.jpg`; + track.albumCoverXlUrl = `https://e-cdns-images.dzcdn.net/images/cover/${albumData.ALB_PICTURE}/1000x1000-000000-80-0-0.jpg`; + console.log(`[DeezerQueueManager] Fetched cover URL for "${track.title}"`); + } + } catch (error) { + console.warn(`[DeezerQueueManager] Could not fetch album data for track "${track.title}":`, error); + } + } + /** * Download a single track */ @@ -215,6 +257,11 @@ export class DeezerQueueManager { } deezerAPI.setArl(authState.arl); + // Ensure track has cover URL if cover art is enabled + if (appSettings.embedCoverArt || appSettings.saveCoverToFolder) { + await this.ensureCoverUrl(track); + } + // Get user data for license token const userData = await deezerAPI.getUserData(); const licenseToken = userData.USER?.OPTIONS?.license_token; @@ -353,6 +400,11 @@ export class DeezerQueueManager { } }); + // Ensure track has cover URL if cover art is enabled + if (appSettings.embedCoverArt || appSettings.saveCoverToFolder) { + await this.ensureCoverUrl(track); + } + const userData = await deezerAPI.getUserData(); const licenseToken = userData.USER?.OPTIONS?.license_token;