From b19a61f9359c84d82b52e5a51831f4bd9ee368ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Tue, 5 Oct 2021 15:40:02 +0200
Subject: [PATCH] Clean some code

---
 public/index.php | 37 +++++--------------------------------
 spotify/lib.php  | 44 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 32 deletions(-)
 create mode 100644 spotify/lib.php

diff --git a/public/index.php b/public/index.php
index b39ae21..271215c 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,5 +1,6 @@
 <?php
 require '../spotify/spotify.php';
+require '../spotify/lib.php';
 
 if (isset($_GET['logout'])) {
     $_SESSION['accessToken'] = '';
@@ -104,22 +105,8 @@ if ($generatePlaylistFromPlaylist) {
         $recommendedTrackIds = $filteredTrackIds;
     }
 
-    $recommendedTrackIds = array_keys($recommendedTrackIds);
-    error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations for this playlist.');
-    shuffle($recommendedTrackIds);
-    $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
-    error_log('Keep '.count($pickedTrackIds).' tracks.');
-
-    $now = new DateTime();
-    $newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
-    error_log('Create new playlist "'.$newPlaylistName.'".');
-    $newPlaylist = $api->createPlaylist([
-        'name' => $newPlaylistName,
-    ]);
-
-    $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
-    $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
-    $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
+    $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
+    $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist->id);
 } elseif ($generatePlaylistFromArtists) {
     $selectedArtists = $_GET['selected-artist'];
     error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
@@ -151,22 +138,8 @@ if ($generatePlaylistFromPlaylist) {
         }
     }
 
-    $recommendedTrackIds = array_keys($recommendedTrackIds);
-    error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
-    shuffle($recommendedTrackIds);
-    $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
-    error_log('Keep '.count($pickedTrackIds).' random tracks.');
-
-    $now = new DateTime();
-    $newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
-    error_log('Create new playlist "'.$newPlaylistName.'".');
-    $newPlaylist = $api->createPlaylist([
-        'name' => $newPlaylistName,
-    ]);
-
-    $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
-    $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
-    $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
+    $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
+    $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist->id);
 } else {
     $templateData['topArtists'] = $api->getMyTop('artists', ['limit' => $topArtistsCount, 'time_range' => 'short_term'])->items;
     $templateData['playlists'] = $api->getUserPlaylists($user->id, ['limit' => $playlistsCount])->items;
diff --git a/spotify/lib.php b/spotify/lib.php
new file mode 100644
index 0000000..60bd26b
--- /dev/null
+++ b/spotify/lib.php
@@ -0,0 +1,44 @@
+<?php
+
+function generatePlaylistName() {
+  $now = new DateTime();
+  $name = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
+
+  return $name;
+}
+
+function createEmptyPlaylist($api) {
+  $name = generatePlaylistName();
+  error_log('Create new playlist "'.$name.'".');
+  $playlist = $api->createPlaylist([
+      'name' => $name,
+  ]);
+
+  return $playlist;
+}
+
+function pickRandomTrackFromArray($recommendedTrackIds, $count = 50) {
+  $recommendedTrackIds = array_keys($recommendedTrackIds);
+  error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
+  shuffle($recommendedTrackIds);
+  $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
+  error_log('Keep '.count($pickedTrackIds).' random tracks.');
+
+  return $pickedTrackIds;
+}
+
+function createPlaylistWithRandomTracks($api, $trackIds, $count = 50) {
+  $playlist = createEmptyPlaylist($api);
+  $pickedTrackIds = pickRandomTrackFromArray($trackIds);
+  $api->replacePlaylistTracks($playlist->id, $pickedTrackIds);
+
+  return $playlist;
+}
+
+function getCreatedPlaylistInformationMessage($api, $playlistId) {
+  $playlist = $api->getPlaylist($playlistId);
+  $link = '<a href="'.$playlist->external_urls->spotify.'">'.$playlist->name.'</a>';
+  $message = 'Ok created new playlist with '.count($playlist->tracks->items).' tracks: '.$link;
+
+  return $message;
+}
-- 
GitLab