Skip to content
Snippets Groups Projects

Resolve "Add options on create new playlist"

Merged Benoît Harrault requested to merge 4-add-options-on-create-new-playlist into master
2 files
+ 73
11
Compare changes
  • Side-by-side
  • Inline

Files

+ 37
9
@@ -57,27 +57,48 @@ if ($generatePlaylistFromPlaylist) {
@@ -57,27 +57,48 @@ if ($generatePlaylistFromPlaylist) {
error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".');
error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".');
$recommendedTrackIds = [];
$recommendedTrackIds = [];
 
$shouldFilterByArtists = isset($_GET['check-playlist-filter-artists']);
 
error_log('Filter by artists in source playlists: '.($shouldFilterByArtists ? 'yes' : 'no'));
 
$artistsInSourcePlaylists = [];
 
foreach ($selectedPlaylists as $selectedPlaylistId) {
foreach ($selectedPlaylists as $selectedPlaylistId) {
$playlist = $api->getPlaylist($selectedPlaylistId);
$playlist = $api->getPlaylist($selectedPlaylistId);
error_log('Will get recommendations from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
error_log('Will get recommendations from tracks in playlist "'.$playlist->name.'".');
$playlistTracks = $playlist->tracks->items;
$playlistTracks = $playlist->tracks->items;
error_log('Found '.count($playlistTracks).' tracks.');
error_log('Found '.count($playlistTracks).' tracks.');
foreach ($playlistTracks as $track) {
foreach ($playlistTracks as $track) {
$artists = [];
$artists = [];
foreach ($track->track->artists as $artist) {
foreach ($track->track->artists as $artist) {
$artists[] = $artist->name;
$artists[] = $artist->name;
 
$artistsInSourcePlaylists[$artist->id] = 1;
}
}
error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')');
error_log('Track "'.$track->track->name.'" ('.join(', ', $artists).')');
$recommendations = $api->getRecommendations([
$recommendations = $api->getRecommendations([
'seed_tracks' => [$track->track->id],
'seed_tracks' => [$track->track->id],
'limit' => 20
'limit' => 40
]);
]);
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
foreach ($recommendations->tracks as $recommendedTrack) {
foreach ($recommendations->tracks as $recommendedTrack) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
$recommendedTrackIds[$recommendedTrack->id] = $recommendedTrack;
 
}
 
}
 
}
 
 
if ($shouldFilterByArtists) {
 
$artistsInSourcePlaylists = array_keys($artistsInSourcePlaylists);
 
error_log('Filter by artists found in source playlists ('.count($artistsInSourcePlaylists).')');
 
 
$filteredTrackIds = [];
 
foreach ($recommendedTrackIds as $trackId => $track) {
 
$trackArtistInWantedArtists = false;
 
foreach ($track->artists as $trackArtist) {
 
if (\in_array($trackArtist->id, $artistsInSourcePlaylists)) {
 
$filteredTrackIds[$track->id] = 1;
 
}
}
}
}
}
 
$recommendedTrackIds = $filteredTrackIds;
}
}
$recommendedTrackIds = array_keys($recommendedTrackIds);
$recommendedTrackIds = array_keys($recommendedTrackIds);
@@ -101,6 +122,9 @@ if ($generatePlaylistFromPlaylist) {
@@ -101,6 +122,9 @@ if ($generatePlaylistFromPlaylist) {
error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
$recommendedTrackIds = [];
$recommendedTrackIds = [];
 
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']);
 
error_log('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
 
foreach ($selectedArtists as $selectedArtist) {
foreach ($selectedArtists as $selectedArtist) {
error_log('Get recommendations for artist '.$selectedArtist.'');
error_log('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
$recommendations = $api->getRecommendations([
@@ -109,13 +133,17 @@ if ($generatePlaylistFromPlaylist) {
@@ -109,13 +133,17 @@ if ($generatePlaylistFromPlaylist) {
]);
]);
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
// Filter by artist, remove duplicates
// Filter by artist if requested, remove duplicates
foreach ($recommendations->tracks as $recommendedTrack) {
foreach ($recommendations->tracks as $recommendedTrack) {
$trackArtistInWantedArtists = false;
if ($shouldFilterByArtists) {
foreach ($recommendedTrack->artists as $trackArtist) {
$trackArtistInWantedArtists = false;
if (\in_array($trackArtist->id, $selectedArtists)) {
foreach ($recommendedTrack->artists as $trackArtist) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
if (\in_array($trackArtist->id, $selectedArtists)) {
 
$recommendedTrackIds[$recommendedTrack->id] = 1;
 
}
}
}
 
} else {
 
$recommendedTrackIds[$recommendedTrack->id] = 1;
}
}
}
}
}
}
Loading