diff --git a/api.php b/api.php index 824929a57a25da2dfd7244c443afc185c158c2d0..82833e68bf7a84a9d7e0e73aadd63604e8be6e47 100644 --- a/api.php +++ b/api.php @@ -4,11 +4,11 @@ include_once 'config.php'; if ($_GET['get'] == 'shows' && $_GET['limit'] && isset($_GET['offset'])) { $output = array(); - $data = querySB('shows'); - uasort($data, function($a, $b) { + $shows = querySB('shows'); + uasort($shows, function($a, $b) { return strcmp($a['show_name'], $b['show_name']); }); - $shows = array_slice($data, $_GET['offset'], $_GET['limit'], true); + $shows = array_slice($shows, $_GET['offset'], $_GET['limit'], true); foreach($shows as $key => $show) { $dataShow = querySB('show', $key); $dataSeasons = querySB('show.seasons', $key); @@ -20,7 +20,6 @@ if ($_GET['get'] == 'shows' && $_GET['limit'] && isset($_GET['offset'])) { "id" => $key, "name" => $show['show_name'], "folder" => str_replace($showsPath.'/', '', $dataShow['location']), - "thumb" => cleanName($show['show_name']), "seasons" => $seasons )); unset($seasons); @@ -33,24 +32,19 @@ if ($_GET['get'] == 'shows' && $_GET['limit'] && isset($_GET['offset'])) { if ($_GET['get'] == 'movies' && $_GET['limit'] && isset($_GET['offset'])) { - $cpdb = new PDO('sqlite:'.$cpPath.'/couchpotato.db'); - $cpdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - - $movies = $cpdb->query("SELECT l.identifier AS imdb, lt.title, l.year, l.tagline, l.plot, s.label AS status FROM library AS l - JOIN librarytitle AS lt ON l.id=lt.libraries_id - JOIN movie AS m on l.id=m.library_id - JOIN status AS s ON m.status_id=s.id - WHERE m.status_id = 3 AND `default` = 1 - ORDER BY title ASC LIMIT ".$_GET['limit']." OFFSET ".$_GET['offset'].";"); + $movies = queryCP('movie.list', 'status=done'); + $movies = array_slice($movies, $_GET['offset'], $_GET['limit'], true); $output = array(); foreach ($movies as $movie) { array_push($output, array( - "imdb" => $movie['imdb'], + "imdb" => $movie['info']['imdb'], "title" => $movie['title'], - "year" => $movie['year'], - "tagline" => $movie['tagline'], - "plot" => $movie['plot'], - "status" => $movie['status'] + "year" => $movie['info']['year'], + "tagline" => $movie['info']['tagline'], + "plot" => $movie['info']['plot'], + "rating" => $movie['info']['rating']['imdb'][0].' ('.$movie['info']['rating']['imdb'][1].')', + "status" => $movie['status'], + "folder" => current(explode('/', current(str_replace($moviesPath.'/', '', $movie['releases'][0]['files']['movie'])))) )); } echo json_encode($output); @@ -187,7 +181,6 @@ if ($_GET['get'] == 'episodes' && !empty($_GET['show']) && isset($_GET['season'] if ($_GET['get'] == 'latest' && $_GET['type'] == 'shows') { - //$eps = $sbdb->query("SELECT s.show_name, ep.name, ep.episode, ep.season, ep.airdate FROM tv_episodes AS ep JOIN tv_shows AS s ON ep.showid=s.tvdb_id WHERE ep.status LIKE '%4' ORDER BY ep.airdate DESC LIMIT 10;"); $eps = querySB('history'); $output = array(); foreach ($eps as $ep) { @@ -198,23 +191,23 @@ if ($_GET['get'] == 'latest' && $_GET['type'] == 'shows') { $output = array_slice($output, 0, 10); echo json_encode($output); die; + } if ($_GET['get'] == 'latest' && $_GET['type'] == 'movies') { - $cpdb = new PDO('sqlite:'.$cpPath.'/couchpotato.db'); - $cpdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $movies = $cpdb->query("SELECT lt.title, l.year FROM library AS l - JOIN librarytitle AS lt ON l.id=lt.libraries_id - JOIN movie AS m on l.id=m.library_id - JOIN status AS s ON m.status_id=s.id - WHERE m.status_id = 3 AND `default` = 1 - ORDER BY m.last_edit DESC LIMIT 10;"); + + $movies = queryCP('movie.list', 'status=done'); + uasort($movies, function($a, $b) { + return $b['releases'][0]['last_edit'] - $a['releases'][0]['last_edit']; + }); $output = array(); foreach ($movies as $movie) { - array_push($output, array("movie" => $movie['title'].' ('.$movie['year'].')')); + array_push($output, array("movie" => $movie['title'].' ('.$movie['info']['year'].')')); } + $output = array_slice($output, 0, 10); echo json_encode($output); die; + } @@ -242,6 +235,7 @@ function get_absolute_path($path) { } function querySB($cmd, $id = '', $season = '') { + global $sb, $cacheTTL; if($id == '') { $cache = './cache/'.$cmd.'.json'; @@ -254,6 +248,23 @@ function querySB($cmd, $id = '', $season = '') { $json = file_get_contents($cache); $data = current(json_decode($json, true)); return $data; + +} + +function queryCP($cmd, $params = '') { + + global $cp, $cacheTTL; + if($params != '') { + $params = '?'.$params; + } + $cache = './cache/'.$cmd.'.json'; + if (!file_exists($cache) || filemtime($cache) < time()-$cacheTTL) { + file_put_contents($cache, file_get_contents('http://'.$cp['host'].':'.$cp['port'].$cp['path'].'/api/'.$cp['key'].'/'.$cmd.'/'.$params)); + } + $json = file_get_contents($cache); + $data = current(json_decode($json, true)); + return $data; + } ?> \ No newline at end of file diff --git a/config.php-dist b/config.php-dist index 8e08ddfa99eb4b0729b8111e76d76776ca6fc596..d316bb1e3414eec732d127c0ec28865f28aecc01 100644 --- a/config.php-dist +++ b/config.php-dist @@ -1,13 +1,17 @@ <?php -$cpPath = '/opt/couchpotato'; - $sb['host'] = 'localhost'; -$sb['post'] = '8080'; +$sb['post'] = '8081'; $sb['path'] = '/'; $sb['key'] = 'YOUR-SICKBEARD-API-KEY'; $sb['ssl'] = false; +$cp['host'] = 'localhost'; +$cp['post'] = '8082'; +$cp['path'] = '/'; +$cp['key'] = 'YOUR-COUCHPOTATO-KEY'; +$cp['ssl'] = false; + $showsPath = '/mnt/storage/media/tv'; $moviesPath = '/mnt/storage/media/movies'; diff --git a/js/mediarack.js b/js/mediarack.js index 139da29b1fea8b50f07db236df1452cbd258c799..098acd618dd360868db6c3d78784e81bfaf53611 100644 --- a/js/mediarack.js +++ b/js/mediarack.js @@ -182,6 +182,7 @@ function getShows() { } function getEpisodes(show, season) { + $("#loading").show(); $.getJSON('api.php', { 'get': 'episodes', 'show': show, @@ -222,6 +223,7 @@ function getEpisodes(show, season) { getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season')); }); }); + $("#loading").hide(); } ); } @@ -236,11 +238,11 @@ function getMovies() { var i = 0; $.each(data, function (key, movie) { var divMovieContainer = $('<div class="movie panel panel-default" data-imdb="'+movie.imdb+'" id="movie_'+movie.imdb+'"></div>'); - var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="api.php?get=logo&movie='+escape(movie.title+' ('+movie.year+')')+'" src="" /></h2></div>'); - var divMovieBody = $('<div class="panel-body lazy" data-original="api.php?get=fanart&movie='+escape(movie.title+' ('+movie.year+')')+'"></div>'); - var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="api.php?get=poster&movie='+escape(movie.title+' ('+movie.year+')')+'" src="img/no_poster.jpg" /></a></div>'); + var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="api.php?get=logo&movie='+escape(movie.folder)+'" src="" /></h2></div>'); + var divMovieBody = $('<div class="panel-body lazy" data-original="api.php?get=fanart&movie='+escape(movie.folder)+'"></div>'); + var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="api.php?get=poster&movie='+escape(movie.folder)+'" src="img/no_poster.jpg" /></a></div>'); var divMoviePlot = $('<div class="moviePlot col-md-10 panel panel-default"><div class="panel-heading">'+movie.tagline+'</div><div class="panel-body">'+movie.plot+'</div></div>'); - var divMovieFooter =$('<div class="panel-footer">IMDB Rating: </div>'); + var divMovieFooter =$('<div class="panel-footer text-right">IMDB Rating: '+movie.rating+'</div>'); divMovieContainer.append(divMovieHeader); divMovieContainer.append(divMovieBody); divMovieBody.append(divMoviePoster); @@ -269,9 +271,9 @@ function getMovies() { }); divMovies.append(divMovieContainer); if(i < 5) { - divMovieHeader.find("img.movieLogo").attr('src', 'api.php?get=logo&movie='+escape(movie.title+' ('+movie.year+')')).removeClass('lazy'); - divMovieBody.css('background-image', 'url(api.php?get=fanart&movie='+escape(movie.title+' ('+movie.year+')')+')').removeClass('lazy'); - divMoviePoster.find("img.moviePoster").attr('src', 'api.php?get=poster&movie='+escape(movie.title+' ('+movie.year+')')).removeClass('lazy'); + divMovieHeader.find("img.movieLogo").attr('src', 'api.php?get=logo&movie='+escape(movie.folder)).removeClass('lazy'); + divMovieBody.css('background-image', 'url(api.php?get=fanart&movie='+escape(movie.folder)).removeClass('lazy'); + divMoviePoster.find("img.moviePoster").attr('src', 'api.php?get=poster&movie='+escape(movie.folder)).removeClass('lazy'); } i++; });