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

Merge branch '4-add-options-on-create-new-playlist' into 'master'

Resolve "Add options on create new playlist"

Closes #4

See merge request !8
parents f23be76b 9328beaf
No related branches found
No related tags found
1 merge request!8Resolve "Add options on create new playlist"
...@@ -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;
} }
} }
} }
......
...@@ -67,7 +67,24 @@ ...@@ -67,7 +67,24 @@
</li> </li>
<?php } ?> <?php } ?>
</ul> </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> </form>
<?php } ?> <?php } ?>
...@@ -92,7 +109,24 @@ ...@@ -92,7 +109,24 @@
</li> </li>
<?php } ?> <?php } ?>
</ul> </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> </form>
<?php } ?> <?php } ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment