diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 44696a6..419abf3 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -648,16 +648,26 @@ app.post('/api/download', async (req, res) => { let done = 0, skipped = 0; for (const track of plTracks) { try { + const trackTitle = track.trackName || ''; + // subtitle gives "Artist1, Artist2" — use first for iTunes search, keep full for tags + const trackArtist = track.artistName || artist || ''; + const searchArtist = trackArtist.split(',')[0].trim(); + + // Always look up iTunes for correct album, artwork, year (Spotify flat format has none) + log(jobId, `📋 iTunes: "${trackArtist} – ${trackTitle}"`); + const itunes = await lookupItunesTrackMeta(searchArtist, trackTitle); + const result = await downloadTrack({ jobId, - artist: track.artistName || artist || '', - albumArtist: track.artistName || artist || '', - title: track.trackName || '', - album: track.collectionName || '', - year: track.releaseDate ? new Date(track.releaseDate).getFullYear() : undefined, - trackNum: track.trackNumber || undefined, - genre: track.primaryGenreName || undefined, - artworkUrl: track.artworkUrl100 || artworkUrl || '', + artist: trackArtist, + albumArtist: trackArtist, + title: trackTitle, + album: itunes.album || track.collectionName || '', + year: itunes.year || (track.releaseDate ? new Date(track.releaseDate).getFullYear() : undefined), + trackNum: itunes.trackNum || track.trackNumber || undefined, + totalTracks: itunes.totalTracks || undefined, + genre: itunes.genre || track.primaryGenreName || undefined, + artworkUrl: itunes.artworkUrl || track.artworkUrl100 || '', explicit: track.trackExplicitness === 'explicit', }); if (result?.skipped) skipped++; else done++;