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:
1 parent
5446d83ab3
commit
16cf49638f
1 file changed
+18
-8
@@ -648,16 +648,26 @@ app.post('/api/download', async (req, res) => {
|
|||||||
let done = 0, skipped = 0;
|
let done = 0, skipped = 0;
|
||||||
for (const track of plTracks) {
|
for (const track of plTracks) {
|
||||||
try {
|
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({
|
const result = await downloadTrack({
|
||||||
jobId,
|
jobId,
|
||||||
artist: track.artistName || artist || '',
|
artist: trackArtist,
|
||||||
albumArtist: track.artistName || artist || '',
|
albumArtist: trackArtist,
|
||||||
title: track.trackName || '',
|
title: trackTitle,
|
||||||
album: track.collectionName || '',
|
album: itunes.album || track.collectionName || '',
|
||||||
year: track.releaseDate ? new Date(track.releaseDate).getFullYear() : undefined,
|
year: itunes.year || (track.releaseDate ? new Date(track.releaseDate).getFullYear() : undefined),
|
||||||
trackNum: track.trackNumber || undefined,
|
trackNum: itunes.trackNum || track.trackNumber || undefined,
|
||||||
genre: track.primaryGenreName || undefined,
|
totalTracks: itunes.totalTracks || undefined,
|
||||||
artworkUrl: track.artworkUrl100 || artworkUrl || '',
|
genre: itunes.genre || track.primaryGenreName || undefined,
|
||||||
|
artworkUrl: itunes.artworkUrl || track.artworkUrl100 || '',
|
||||||
explicit: track.trackExplicitness === 'explicit',
|
explicit: track.trackExplicitness === 'explicit',
|
||||||
});
|
});
|
||||||
if (result?.skipped) skipped++; else done++;
|
if (result?.skipped) skipped++; else done++;
|
||||||
|
|||||||
Reference in new issue
Block a user