diff --git a/js/api.js b/js/api.js index 31fb62c..bf13370 100644 --- a/js/api.js +++ b/js/api.js @@ -917,15 +917,25 @@ export class LosslessAPI { const recommendedTracks = []; const seenTrackIds = new Set(tracks.map((t) => t.id)); - const artistsToProcess = artists.slice(0, Math.min(5, artists.length)); + // Shuffle artists if refreshing to get different results + let shuffledArtists = artists; + if (options.refresh) { + shuffledArtists = [...artists].sort(() => Math.random() - 0.5); + } + + const artistsToProcess = shuffledArtists.slice(0, Math.min(5, shuffledArtists.length)); const artistPromises = artistsToProcess.map(async (artist) => { try { console.log(`Fetching tracks for artist: ${artist.name} (ID: ${artist.id})`); - const artistData = await this.getArtist(artist.id, { lightweight: true, skipCache: options.skipCache }); + const artistData = await this.getArtist(artist.id, { lightweight: true, skipCache: options.refresh }); if (artistData && artistData.tracks && artistData.tracks.length > 0) { - const newTracks = artistData.tracks.filter((track) => !seenTrackIds.has(track.id)).slice(0, 4); - return newTracks; + const availableTracks = artistData.tracks.filter((track) => !seenTrackIds.has(track.id)); + // Shuffle and pick different tracks when refreshing + const shuffled = options.refresh + ? availableTracks.sort(() => Math.random() - 0.5) + : availableTracks; + return shuffled.slice(0, 4); } else { console.warn(`No tracks found for artist ${artist.name}`); return []; diff --git a/js/ui.js b/js/ui.js index 6160b1d..0e7f186 100644 --- a/js/ui.js +++ b/js/ui.js @@ -2440,7 +2440,9 @@ export class UIRenderer { } try { - let recommendedTracks = await this.api.getRecommendedTracksForPlaylist(tracks, 20, forceRefresh); + let recommendedTracks = await this.api.getRecommendedTracksForPlaylist(tracks, 20, { + refresh: forceRefresh, + }); // Filter out blocked tracks const { contentBlockingSettings } = await import('./storage.js');