similar artist duplicate fix
This commit is contained in:
parent
5ffce6bb59
commit
208b233497
2 changed files with 47 additions and 5 deletions
|
|
@ -3829,9 +3829,20 @@ def get_similar_artists_stream(artist_name):
|
||||||
yield f"data: {json.dumps({'error': 'Spotify not authenticated'})}\n\n"
|
yield f"data: {json.dumps({'error': 'Spotify not authenticated'})}\n\n"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Get the searched artist's Spotify ID to exclude them
|
||||||
|
searched_artist_id = None
|
||||||
|
try:
|
||||||
|
searched_results = spotify_client.search_artists(artist_name, limit=1)
|
||||||
|
if searched_results and len(searched_results) > 0:
|
||||||
|
searched_artist_id = searched_results[0].id
|
||||||
|
print(f"🎯 Searched artist Spotify ID: {searched_artist_id}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"⚠️ Could not get searched artist ID: {e}")
|
||||||
|
|
||||||
# Match each artist to Spotify one by one and stream results
|
# Match each artist to Spotify one by one and stream results
|
||||||
max_artists = 20
|
max_artists = 20
|
||||||
matched_count = 0
|
matched_count = 0
|
||||||
|
seen_artist_ids = set() # Track seen artist IDs to prevent duplicates
|
||||||
|
|
||||||
for artist_name_to_match in similar_artist_names[:max_artists]:
|
for artist_name_to_match in similar_artist_names[:max_artists]:
|
||||||
try:
|
try:
|
||||||
|
|
@ -3843,6 +3854,18 @@ def get_similar_artists_stream(artist_name):
|
||||||
if results and len(results) > 0:
|
if results and len(results) > 0:
|
||||||
spotify_artist = results[0]
|
spotify_artist = results[0]
|
||||||
|
|
||||||
|
# Skip if this is the searched artist
|
||||||
|
if spotify_artist.id == searched_artist_id:
|
||||||
|
print(f"⏭️ Skipping searched artist: {spotify_artist.name}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Skip if we've already seen this artist ID (deduplication)
|
||||||
|
if spotify_artist.id in seen_artist_ids:
|
||||||
|
print(f"⏭️ Skipping duplicate artist: {spotify_artist.name}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
seen_artist_ids.add(spotify_artist.id)
|
||||||
|
|
||||||
artist_data = {
|
artist_data = {
|
||||||
'id': spotify_artist.id,
|
'id': spotify_artist.id,
|
||||||
'name': spotify_artist.name,
|
'name': spotify_artist.name,
|
||||||
|
|
@ -3946,9 +3969,20 @@ def get_similar_artists(artist_name):
|
||||||
"error": "Spotify not authenticated"
|
"error": "Spotify not authenticated"
|
||||||
}), 401
|
}), 401
|
||||||
|
|
||||||
|
# Get the searched artist's Spotify ID to exclude them
|
||||||
|
searched_artist_id = None
|
||||||
|
try:
|
||||||
|
searched_results = spotify_client.search_artists(artist_name, limit=1)
|
||||||
|
if searched_results and len(searched_results) > 0:
|
||||||
|
searched_artist_id = searched_results[0].id
|
||||||
|
print(f"🎯 Searched artist Spotify ID: {searched_artist_id}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"⚠️ Could not get searched artist ID: {e}")
|
||||||
|
|
||||||
# Match each artist to Spotify (limit to first 20 for performance)
|
# Match each artist to Spotify (limit to first 20 for performance)
|
||||||
matched_artists = []
|
matched_artists = []
|
||||||
max_artists = 20
|
max_artists = 20
|
||||||
|
seen_artist_ids = set() # Track seen artist IDs to prevent duplicates
|
||||||
|
|
||||||
for artist_name_to_match in similar_artist_names[:max_artists]:
|
for artist_name_to_match in similar_artist_names[:max_artists]:
|
||||||
try:
|
try:
|
||||||
|
|
@ -3960,6 +3994,18 @@ def get_similar_artists(artist_name):
|
||||||
if results and len(results) > 0:
|
if results and len(results) > 0:
|
||||||
spotify_artist = results[0]
|
spotify_artist = results[0]
|
||||||
|
|
||||||
|
# Skip if this is the searched artist
|
||||||
|
if spotify_artist.id == searched_artist_id:
|
||||||
|
print(f"⏭️ Skipping searched artist: {spotify_artist.name}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Skip if we've already seen this artist ID (deduplication)
|
||||||
|
if spotify_artist.id in seen_artist_ids:
|
||||||
|
print(f"⏭️ Skipping duplicate artist: {spotify_artist.name}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
seen_artist_ids.add(spotify_artist.id)
|
||||||
|
|
||||||
matched_artists.append({
|
matched_artists.append({
|
||||||
'id': spotify_artist.id,
|
'id': spotify_artist.id,
|
||||||
'name': spotify_artist.name,
|
'name': spotify_artist.name,
|
||||||
|
|
|
||||||
|
|
@ -16635,17 +16635,13 @@ async function createArtistAlbumVirtualPlaylist(album, albumType) {
|
||||||
throw new Error('No tracks found for this album');
|
throw new Error('No tracks found for this album');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`✅ Loaded ${data.tracks.length} tracks`);
|
console.log(`✅ Loaded ${data.tracks.length} tracks for ${data.album.name}`);
|
||||||
console.log(`📊 [DEBUG] Backend album data:`, data.album);
|
|
||||||
console.log(`📊 [DEBUG] Album name from backend:`, data.album?.name);
|
|
||||||
console.log(`📊 [DEBUG] Original album param:`, album);
|
|
||||||
|
|
||||||
// Use album data from API response (has complete data including images array)
|
// Use album data from API response (has complete data including images array)
|
||||||
const fullAlbumData = data.album;
|
const fullAlbumData = data.album;
|
||||||
|
|
||||||
// Format playlist name with artist and album info
|
// Format playlist name with artist and album info
|
||||||
const playlistName = `[${artist.name}] ${fullAlbumData.name}`;
|
const playlistName = `[${artist.name}] ${fullAlbumData.name}`;
|
||||||
console.log(`📊 [DEBUG] Playlist name created:`, playlistName);
|
|
||||||
|
|
||||||
// Open download missing tracks modal with formatted tracks
|
// Open download missing tracks modal with formatted tracks
|
||||||
// Pass false for showLoadingOverlay since we already have one from handleArtistAlbumClick
|
// Pass false for showLoadingOverlay since we already have one from handleArtistAlbumClick
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue