Update script.js

This commit is contained in:
Broque Thomas 2025-11-18 21:08:28 -08:00
parent 107389edaa
commit 357214c7d7

View file

@ -7115,13 +7115,17 @@ function formatArtists(artists) {
// Handle both string arrays and object arrays with 'name' property // Handle both string arrays and object arrays with 'name' property
const artistNames = artists.map(artist => { const artistNames = artists.map(artist => {
let artistName;
if (typeof artist === 'string') { if (typeof artist === 'string') {
return artist; artistName = artist;
} else if (artist && typeof artist === 'object' && artist.name) { } else if (artist && typeof artist === 'object' && artist.name) {
return artist.name; artistName = artist.name;
} else { } else {
return 'Unknown Artist'; artistName = 'Unknown Artist';
} }
// Clean featured artists from the name
return cleanArtistName(artistName);
}); });
return artistNames.join(', ') || 'Unknown Artist'; return artistNames.join(', ') || 'Unknown Artist';
@ -26661,6 +26665,31 @@ async function loadListenBrainzPlaylistTracks(identifier, playlistId) {
} }
} }
/**
* Clean artist name by removing featured artists
* e.g., "Blackstreet feat. Dr. Dre & Queen Pen" -> "Blackstreet"
*/
function cleanArtistName(artistName) {
if (!artistName) return artistName;
// Remove everything after common featuring patterns (case insensitive)
const patterns = [
/\s+feat\.?\s+.*/i, // "feat." or "feat"
/\s+featuring\s+.*/i, // "featuring"
/\s+ft\.?\s+.*/i, // "ft." or "ft"
/\s+with\s+.*/i, // "with"
/\s+\&\s+.*/, // " & " (if it appears without feat/ft)
/\s+x\s+.*/i // " x " (common in collaborations)
];
let cleaned = artistName;
for (const pattern of patterns) {
cleaned = cleaned.replace(pattern, '');
}
return cleaned.trim();
}
function displayListenBrainzTracks(tracks, playlistId) { function displayListenBrainzTracks(tracks, playlistId) {
const playlistContainer = document.getElementById(`${playlistId}-playlist`); const playlistContainer = document.getElementById(`${playlistId}-playlist`);
if (!playlistContainer) return; if (!playlistContainer) return;
@ -26700,7 +26729,7 @@ function displayListenBrainzTracks(tracks, playlistId) {
</div> </div>
<div class="track-compact-info"> <div class="track-compact-info">
<div class="track-compact-name">${escapeHtml(track.track_name || 'Unknown Track')}</div> <div class="track-compact-name">${escapeHtml(track.track_name || 'Unknown Track')}</div>
<div class="track-compact-artist">${escapeHtml(track.artist_name || 'Unknown Artist')}</div> <div class="track-compact-artist">${escapeHtml(cleanArtistName(track.artist_name) || 'Unknown Artist')}</div>
</div> </div>
<div class="track-compact-album">${albumName}</div> <div class="track-compact-album">${albumName}</div>
<div class="track-compact-duration">${duration}</div> <div class="track-compact-duration">${duration}</div>
@ -26731,7 +26760,7 @@ async function startListenBrainzPlaylistSync(identifier, title, playlistId) {
const spotifyTracks = tracks.map(track => ({ const spotifyTracks = tracks.map(track => ({
id: null, // No Spotify ID for ListenBrainz tracks id: null, // No Spotify ID for ListenBrainz tracks
name: track.track_name, name: track.track_name,
artists: [track.artist_name], // Array of strings for sync compatibility artists: [cleanArtistName(track.artist_name)], // Clean featured artists, array of strings for sync compatibility
album: { album: {
name: track.album_name, name: track.album_name,
images: track.album_cover_url ? [{ url: track.album_cover_url }] : [] images: track.album_cover_url ? [{ url: track.album_cover_url }] : []
@ -26867,7 +26896,7 @@ async function openDownloadModalForListenBrainzPlaylist(identifier, title) {
const spotifyTracks = tracks.map(track => ({ const spotifyTracks = tracks.map(track => ({
id: null, // No Spotify ID for ListenBrainz tracks id: null, // No Spotify ID for ListenBrainz tracks
name: track.track_name, name: track.track_name,
artists: [track.artist_name], artists: [cleanArtistName(track.artist_name)], // Clean featured artists
album: { album: {
name: track.album_name, name: track.album_name,
images: track.album_cover_url ? [{ url: track.album_cover_url }] : [] images: track.album_cover_url ? [{ url: track.album_cover_url }] : []
@ -26916,7 +26945,7 @@ async function openListenBrainzPlaylist(playlistMbid, playlistName) {
const spotifyTracks = tracks.map(track => ({ const spotifyTracks = tracks.map(track => ({
id: track.recording_mbid || '', id: track.recording_mbid || '',
name: track.title || 'Unknown', name: track.title || 'Unknown',
artists: [track.creator || 'Unknown'], artists: [cleanArtistName(track.creator || 'Unknown')], // Clean featured artists
album: { album: {
name: track.album || 'Unknown Album', name: track.album || 'Unknown Album',
images: [] images: []
@ -28514,7 +28543,7 @@ async function rehydrateDiscoverDownloadModal(playlistId) {
const spotifyTracks = tracks.map(track => ({ const spotifyTracks = tracks.map(track => ({
id: null, id: null,
name: track.track_name, name: track.track_name,
artists: [track.artist_name], artists: [cleanArtistName(track.artist_name)], // Clean featured artists
album: { album: {
name: track.album_name, name: track.album_name,
images: track.album_cover_url ? [{ url: track.album_cover_url }] : [] images: track.album_cover_url ? [{ url: track.album_cover_url }] : []