diff --git a/public/index.php b/public/index.php index b9557736663bfb5924268b0bea37ed4b1c869a6e..32680ec59508b596e95c1095eb8b5b8ba9807532 100644 --- a/public/index.php +++ b/public/index.php @@ -49,35 +49,37 @@ $templateData = [ 'errors' => [], ]; -$selectedPlaylistId = ''; -if (isset($_GET['playlist'])) { - $selectedPlaylistId = $_GET['playlist']; -} - +$generatePlaylistFromPlaylist = isset($_GET['generate-playlist-from-playlist']); $generatePlaylistFromArtists = isset($_GET['generate-playlist-top-artists']); -if ($selectedPlaylistId) { - $playlist = $api->getPlaylist($selectedPlaylistId); - error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".'); +if ($generatePlaylistFromPlaylist) { + $selectedPlaylists = $_GET['selected-playlist']; + error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".'); $recommendedTrackIds = []; - $playlistTracks = $playlist->tracks->items; - error_log('Found '.count($playlistTracks).' tracks.'); - foreach ($playlistTracks as $track) { - $artists = []; - foreach ($track->track->artists as $artist) { - $artists[] = $artist->name; - } - error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')'); - $recommendations = $api->getRecommendations([ - 'seed_tracks' => [$track->track->id], - 'limit' => 20 - ]); - error_log(' -> Got '.count($recommendations->tracks).' recommendatations.'); - foreach ($recommendations->tracks as $recommendedTrack) { - $recommendedTrackIds[$recommendedTrack->id] = 1; + foreach ($selectedPlaylists as $selectedPlaylistId) { + $playlist = $api->getPlaylist($selectedPlaylistId); + error_log('Will get recommendations from tracks in playlist '.$selectedPlaylistId.' "'.$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; + } + error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')'); + + $recommendations = $api->getRecommendations([ + 'seed_tracks' => [$track->track->id], + 'limit' => 20 + ]); + error_log(' -> Got '.count($recommendations->tracks).' recommendatations.'); + foreach ($recommendations->tracks as $recommendedTrack) { + $recommendedTrackIds[$recommendedTrack->id] = 1; + } } } + $recommendedTrackIds = array_keys($recommendedTrackIds); error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations for this playlist.'); shuffle($recommendedTrackIds); @@ -136,7 +138,7 @@ if ($selectedPlaylistId) { $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink; } else { $templateData['topArtists'] = $api->getMyTop('artists', ['limit' => 16, 'time_range' => 'short_term'])->items; - $templateData['playlists'] = $api->getUserPlaylists($user->id)->items; + $templateData['playlists'] = $api->getUserPlaylists($user->id, ['limit' => 30])->items; } require '../template.php'; diff --git a/template.php b/template.php index ec9d91a73ac93b215a3e4ffad24f0eb033ba27ca..3bbce5ebee2dfacd2fff9964f5fa5af6b4cb874a 100644 --- a/template.php +++ b/template.php @@ -72,14 +72,28 @@ <?php } ?> <?php if (count($templateData['playlists'])) { ?> - <h3>Please pick a playlist to get recommendations from:</h3> - <div class="list-group"> - <?php foreach ($templateData['playlists'] as $playlist) { ?> - <a href="index.php?playlist=<?php echo $playlist->id; ?>" class="list-group-item list-group-item-action"> - <?php echo $playlist->name; ?> - </a> - <?php } ?> - </div> + <form class="clearfix"> + <legend>Generate playlist from tracks in existing playlist:</legend> + <ul class="list-unstyled row row-cols-2"> + <?php foreach ($templateData['playlists'] as $playlist) { ?> + <li class="col"> + <div class="custom-control custom-checkbox"> + <input + type="checkbox" + class="custom-control-input" + id="check-playlist-<?php echo $playlist->id; ?>" + name="selected-playlist[]" + value="<?php echo $playlist->id; ?>" + > + <label class="custom-control-label" for="check-playlist-<?php echo $playlist->id; ?>"> + <?php echo $playlist->name; ?> + </label> + </div> + </li> + <?php } ?> + </ul> + <button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button> + </form> <?php } ?> </div>