mirror of
https://github.com/markuryy/shark.git
synced 2025-12-12 11:41:02 +00:00
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:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user