// // artist/1/album - list of albums for artist=1 // page head=artist.artist, list head=null // // artist/1/album/2/song - list of songs for artist=1, album=2 // page head=artist.artist, list head=album+stats // // artist/1/album/2/song/3 - load all songs for artist=1, album=2, play song=3, go to nowplaying // // artist/1/song - list of all songs for artist=1 // page head=artist.artist, list head=null // artist - list of artists // $klein->respond('GET', '/artist', function ($request, $response) { // get the list of artists $list = Artist::getList(); // walk the array and construct URLs // The encoded URL value is actually "artist name|album title". The artist // name is included to ensure that albums with the same name are not // conflated and the pipe character is a delimiter array_walk($list, function (&$v, $k) { $v = array('name' => $v, 'url' => '/artist/' . Music::encode($v) . '/album'); }); $list = array_filter($list, function ($v) { return $v['name'] ? true : false; }); return ListPage::render('Artists', null, false, false, $list); }); // artist/1/album - list of albums for artist=1 // $klein->respond('GET', '/artist/[:artist]/album', function ($request, $response) {
/** * Scan the albums & artists in the music database and create artwork for * them. */ public static function scanAll() { // get some config items $artwork_folder = Config::get('app.music-artwork-path'); $artwork_sizes = array(180, 320); // get the music directory path $music_directory = Config::get('app.music-path'); // get the list of artists $artists = Artist::getList(); // step through the artists foreach ($artists as $artist) { // get the list of albums for the current artist $albums = Artist::getAlbums($artist); // step through the albums foreach ($albums as $album) { // create a file name for the artist/album combination $image_file = md5($artist . $album['album']); // does the file already exist? if (!file_exists($artwork_folder . $image_file . '.jpg')) { // No! we need to extract the artwork from a song file for // this artist/album // get the list of songs $songs = Album::getSongs($artist, $album['album']); // step through the songs & attempt to extract the image //data foreach ($songs as $song) { // get the music file name $music_file = $music_directory . $song['file']; // make sure we have a music file to check if (file_exists($music_file)) { // get the image data (if we can) $image = static::getImage($music_file); // make sure we got an image if ($image) { // save the "untouched" image file // save the original as a JPEG imagejpeg($image, Config::get('app.music-artwork-path') . $image_file . ".jpg", 100); // loop through the required sizes foreach ($artwork_sizes as $s) { // resize to the appropriate size $i = static::resizeImage($image, $s); // and save if ($i) { imagejpeg($i, Config::get('app.music-artwork-path') . $image_file . "-{$s}.jpg", 100); } } // END loop through the required sizes // all done with this one! // break out of the song loop (since we // don't need to scan any more songs from // this album) break; } // END make sure we got an image } // END make sure we have a music file to check } // END step through the songs } // END does the file already exist? } // END step through the albums } // END step through the artists }