Skip to content
Snippets Groups Projects
Commit 9328beaf authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Add option to filter generated playlist by selected artists

parent f23be76b
No related branches found
No related tags found
1 merge request!8Resolve "Add options on create new playlist"
......@@ -57,27 +57,48 @@ if ($generatePlaylistFromPlaylist) {
error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".');
$recommendedTrackIds = [];
$shouldFilterByArtists = isset($_GET['check-playlist-filter-artists']);
error_log('Filter by artists in source playlists: '.($shouldFilterByArtists ? 'yes' : 'no'));
$artistsInSourcePlaylists = [];
foreach ($selectedPlaylists as $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;
error_log('Found '.count($playlistTracks).' tracks.');
foreach ($playlistTracks as $track) {
$artists = [];
foreach ($track->track->artists as $artist) {
$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([
'seed_tracks' => [$track->track->id],
'limit' => 20
'limit' => 40
]);
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
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);
......@@ -101,6 +122,9 @@ if ($generatePlaylistFromPlaylist) {
error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
$recommendedTrackIds = [];
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']);
error_log('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
foreach ($selectedArtists as $selectedArtist) {
error_log('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
......@@ -109,13 +133,17 @@ if ($generatePlaylistFromPlaylist) {
]);
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
// Filter by artist, remove duplicates
// Filter by artist if requested, remove duplicates
foreach ($recommendations->tracks as $recommendedTrack) {
$trackArtistInWantedArtists = false;
foreach ($recommendedTrack->artists as $trackArtist) {
if (\in_array($trackArtist->id, $selectedArtists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
if ($shouldFilterByArtists) {
$trackArtistInWantedArtists = false;
foreach ($recommendedTrack->artists as $trackArtist) {
if (\in_array($trackArtist->id, $selectedArtists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
}
}
} else {
$recommendedTrackIds[$recommendedTrack->id] = 1;
}
}
}
......
......@@ -67,7 +67,24 @@
</li>
<?php } ?>
</ul>
<button name="generate-playlist-top-artists" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
<div class="row">
<div class="col-8">
<input
type="checkbox"
class="custom-control-input"
id="check-top-artist-filter-artists"
name="check-top-artist-filter-artists"
value="filter-artists"
checked
>
<label class="custom-control-label" for="check-top-artist-filter-artists">
Allow only selected artists in recommendations
</label>
</div>
<div class="col-4">
<button name="generate-playlist-top-artists" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
</div>
</div>
</form>
<?php } ?>
......@@ -92,7 +109,24 @@
</li>
<?php } ?>
</ul>
<button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
<div class="row">
<div class="col-8">
<input
type="checkbox"
class="custom-control-input"
id="check-playlist-filter-artists"
name="check-playlist-filter-artists"
value="filter-artists"
checked
>
<label class="custom-control-label" for="check-playlist-filter-artists">
Allow only artists in selected playlists in recommendations
</label>
</div>
<div class="col-4">
<button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
</div>
</div>
</form>
<?php } ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment