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

Merge branch '41-add-a-create-tambouille-mix-button' into 'master'

Resolve "Add a "create tambouille mix" button"

Closes #41

See merge request !38
parents 022c3b85 6132596a
No related branches found
No related tags found
1 merge request!38Resolve "Add a "create tambouille mix" button"
......@@ -78,6 +78,7 @@ $generatePlaylistFromPlaylist = isset($_GET['generate-playlist-from-playlist']);
$generatePlaylistFromSelectedTopArtists = isset($_GET['generate-playlist-top-artists']);
$generatePlaylistFromRandomTopArtists = isset($_GET['generate-playlist-random-top-artists']);
$generateQuickPlaylistFromDailyMixes = isset($_GET['generate-quick-playlist-from-daily-mixes']);
$generateQuickPlaylistTambouilleMix = isset($_GET['generate-quick-playlist-tambouille-mix']);
$showPlaylistContent = isset($_GET['show-playlist']);
$action = '';
......@@ -89,6 +90,8 @@ if ($generatePlaylistFromPlaylist) {
$action = 'generate-playlist-from-random-top-artists';
} elseif ($generateQuickPlaylistFromDailyMixes) {
$action = 'generate-playlist-from-daily-mixes';
} elseif ($generateQuickPlaylistTambouilleMix) {
$action = 'generate-playlist-tambouille-mix';
} elseif ($showPlaylistContent) {
$action = 'show-playlist-content';
} else {
......@@ -260,6 +263,18 @@ switch ($action) {
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
break;
case 'generate-playlist-tambouille-mix':
$generateLongPlaylist = isset($_GET['check-quick-create-long-playlist']);
printLog('Generate tambouille mix playlist (long playlist :'.($generateLongPlaylist ? 'yes' : 'no').')');
$newPlaylist = createPlaylistTambouilleMix(
$api,
$generateLongPlaylist ? $tracksCountInLongPlaylist : $tracksCountInShortPlaylist
);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
break;
case 'show-playlist-content':
printLog('Get content of playlist');
$playlistId = $_GET['id'];
......
......@@ -120,6 +120,71 @@ function createPlaylistFromDailyMixesTracks($api, $count = 50)
return $api->getPlaylist($playlist->id);
}
function createPlaylistTambouilleMix($api, $count = 50)
{
// Get specific playlists
$wantedPlaylistsNames = [
'Daily Mix 1',
'Daily Mix 2',
'Radar des sorties',
'Discover Weekly', # "Découvertes de la semaine"
'Your Time Capsule', # "Votre Capsule Temporelle"
'On Repeat', # "En boucle"
'Repeat Rewind', # "En boucle : flashback"
];
$userPlaylists = getAllPlaylistsFromUserId($api, $api->me()->id);
$userPlaylistsByName = [];
foreach ($userPlaylists as $userPlaylist) {
$userPlaylistsByName[$userPlaylist->name] = $userPlaylist->id;
}
// Get all tracks, pick some and get recommandations from playlists
$trackIds = [];
foreach ($wantedPlaylistsNames as $playlistName) {
if (\array_key_exists($playlistName, $userPlaylistsByName)) {
$playlistId = $userPlaylistsByName[$playlistName];
$selectedPlaylist = $api->getPlaylist($playlistId);
$tracks = $selectedPlaylist->tracks->items;
foreach ($tracks as $track) {
$trackId = $track->track->id;
$selectedPlaylistTracks[$trackId] = $trackId;
}
$tracksCount = \count($selectedPlaylistTracks);
// Split playlist in two tracks lists
$tracksList1 = pickRandomTracksFromArray($selectedPlaylistTracks, max(intval($count / 5), intval($tracksCount / 5)));
$tracksList2 = pickRandomTracksFromArray($selectedPlaylistTracks, max(intval($count / 5), intval($tracksCount / 5)));
// Directly pick first part of this playlist
foreach ($tracksList1 as $trackId) {
$trackIds[$trackId] = $trackId;
}
// Get recommandations for other part
$chunks = array_chunk($tracksList2, 5);
foreach($chunks as $chunk) {
$recommendations = $api->getRecommendations([
'seed_tracks' => $chunk,
'limit' => \count($chunk)
]);
foreach ($recommendations->tracks as $recommendedTrack) {
$trackIds[$recommendedTrack->id] = $recommendedTrack;
}
}
}
}
$pickedTrackIds = pickRandomTracksFromArray($trackIds, $count);
$playlist = createEmptyPlaylist($api, 'Tambouille Mix');
$api->replacePlaylistTracks($playlist->id, $pickedTrackIds);
return $api->getPlaylist($playlist->id);
}
function getCreatedPlaylistInformationMessage($api, $playlist)
{
$link = '<a href="'.generateShowPlaylistUrl($playlist->id).'">'.$playlist->name.'</a>';
......
......@@ -78,7 +78,8 @@
</div>
<div class="col-md-4 col-sm-12">
<div class="btn-group float-end" role="group" aria-label="Action buttons">
<button name="generate-quick-playlist-from-daily-mixes" type="submit" class="btn btn-primary">🎶 Mix daily mixes!</button>
<button name="generate-quick-playlist-from-daily-mixes" type="submit" class="btn btn-secondary">🎶 Mix daily mixes!</button>
<button name="generate-quick-playlist-tambouille-mix" type="submit" class="btn btn-primary">🎶 Pick nice tracks!</button>
</div>
</div>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment