fix: missing cover art in playlist downloads

Playlist downloads were not fetching album cover URLs, causing both
embedded cover art and folder cover.jpg files to be skipped. Queue
manager now fetches album data on-demand (only when cover art is
enabled) to get cover URLs, reusing the same logic as individual track
downloads. Fetches track data first if albumId is missing.
This commit is contained in:
2025-10-04 14:43:37 -04:00
parent fc2b987f63
commit 26c465118b

View File

@@ -197,6 +197,48 @@ export class DeezerQueueManager {
console.log('[DeezerQueueManager] Queue processor stopped'); 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<void> {
// 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 * Download a single track
*/ */
@@ -215,6 +257,11 @@ export class DeezerQueueManager {
} }
deezerAPI.setArl(authState.arl); 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 // Get user data for license token
const userData = await deezerAPI.getUserData(); const userData = await deezerAPI.getUserData();
const licenseToken = userData.USER?.OPTIONS?.license_token; 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 userData = await deezerAPI.getUserData();
const licenseToken = userData.USER?.OPTIONS?.license_token; const licenseToken = userData.USER?.OPTIONS?.license_token;