fix(spotify): iTunes lookup per track in playlist downloads

Spotify's flat embed format provides no album, year or per-track artwork.
Now calls lookupItunesTrackMeta for every playlist track before downloading:
- Uses first artist of "Artist1, Artist2" subtitle for iTunes search query
  (better match), keeps full string as the MP3 tag
- iTunes album/year/trackNum/artwork override the empty Spotify fields
- Falls back to Spotify data if iTunes returns nothing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-04-27 18:28:24 +02:00
1 parent 5446d83ab3
commit 16cf49638f
1 file changed
+18 -8
+18 -8
View File
@@ -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++;