diff --git a/api.php b/api.php index 8b110dd6a219dc7299b534b77eff3ebd32ffd78c..c52bbe8eaee6becaa2b579c30fa6a786457fa5f5 100644 --- a/api.php +++ b/api.php @@ -1,16 +1,18 @@ <?php include_once 'config.php'; -if ($_GET['get'] == 'shows') { +/*** TV SHOWS ***/ - $sbdb = new SQLite3($sbPath.'/sickbeard.db'); +if ($_GET['get'] == 'shows' && $_GET['limit'] && isset($_GET['offset'])) { + + $sbdb = new PDO('sqlite:'.$sbPath.'/sickbeard.db'); $shows = $sbdb->query("SELECT tvdb_id AS id, show_name AS name, location FROM tv_shows ORDER BY show_name ASC LIMIT ".$_GET['limit']." OFFSET ".$_GET['offset'].";"); $output = array(); - while ($show = $shows->fetchArray()) { + foreach($shows as $show) { $rows = $sbdb->query("SELECT season, COUNT(episode_id) AS count FROM tv_episodes WHERE showid = '".$show['id']."' GROUP BY season ORDER BY season ASC"); $seasons = array(); - while ($row = $rows->fetchArray()) { + foreach($rows as $row) { array_push($seasons, array("season" => $row['season'], "count" => $row['count'])); } array_push($output, array( @@ -27,19 +29,23 @@ if ($_GET['get'] == 'shows') { } -if ($_GET['get'] == 'poster' && !empty($_GET['show'])) { +if ($_GET['get'] == 'poster' && (!empty($_GET['show']) || !empty($_GET['movie']))) { - if($_GET['season']) + if($_GET['show'] && $_GET['season']) $poster = get_absolute_path('poster/'.cleanName($_GET['show']).'-S'.$_GET['season'].'.jpg'); - else + elseif($_GET['show']) $poster = get_absolute_path('poster/'.cleanName($_GET['show']).'.jpg'); + else + $poster = get_absolute_path('poster/'. cleanName($_GET['movie']).'.jpg'); if(!file_exists($poster)) { - if($_GET['season']) + if($_GET['show'] && $_GET['season']) $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/season'.$_GET['season'].'-poster.jpg'); - else + elseif($_GET['show']) $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/poster.jpg'); + else + $source = '/'.get_absolute_path($moviesPath.'/'.$_GET['movie'].'/'.$_GET['movie'].'-poster.jpg'); if(file_exists($source)) { $img = new Imagick(); @@ -63,12 +69,21 @@ if ($_GET['get'] == 'poster' && !empty($_GET['show'])) { die; } -if ($_GET['get'] == 'fanart' && !empty($_GET['show'])) { +if ($_GET['get'] == 'fanart' && (!empty($_GET['show']) || !empty($_GET['movie']))) { - $fanart = get_absolute_path('fanart/'.cleanName($_GET['show']).'.jpg'); + if($_GET['show']) + $fanart = get_absolute_path('fanart/'. cleanName($_GET['show']).'.jpg'); + else + $fanart = get_absolute_path('fanart/'. cleanName($_GET['movie']).'.jpg'); + if(!file_exists($fanart)) { - $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/fanart.jpg'); + + if($_GET['show']) + $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/fanart.jpg'); + else + $source = '/'.get_absolute_path($moviesPath.'/'.$_GET['movie'].'/'.$_GET['movie'].'-fanart.jpg'); + if(file_exists($source)) { $img = new Imagick(); $img->setOption('jpeg:size', '1024x576'); @@ -93,12 +108,20 @@ if ($_GET['get'] == 'fanart' && !empty($_GET['show'])) { die; } -if ($_GET['get'] == 'logo' && !empty($_GET['show'])) { +if ($_GET['get'] == 'logo' && (!empty($_GET['show']) || !empty($_GET['movie']))) { - $logo = get_absolute_path('logo/'.cleanName($_GET['show']).'.png'); + if($_GET['show']) + $logo = get_absolute_path('logo/'.cleanName($_GET['show']).'.png'); + else + $logo = get_absolute_path('logo/'.cleanName($_GET['movie']).'.png'); if(!file_exists($logo)) { - $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/clearlogo.png'); + + if($_GET['show']) + $source = '/'.get_absolute_path($showsPath.'/'.$_GET['show'].'/clearlogo.png'); + else + $source = '/'.get_absolute_path($moviesPath.'/'.$_GET['movie'].'/'.$_GET['movie'].'-clearlogo.png'); + if(file_exists($source)) { $img = new Imagick(); $img->readImage($source); @@ -117,10 +140,10 @@ if ($_GET['get'] == 'logo' && !empty($_GET['show'])) { } if ($_GET['get'] == 'episodes' && !empty($_GET['show']) && isset($_GET['season'])) { - $sbdb = new SQLite3($sbPath.'/sickbeard.db'); + $sbdb = new PDO('sqlite:'.$sbPath.'/sickbeard.db'); $episodes = $sbdb->query("SELECT episode, name, airdate, status FROM tv_episodes WHERE showid = '".$_GET['show']."' AND season = '".$_GET['season']."' ORDER BY episode ASC;"); $output = array(); - while ($episode = $episodes->fetchArray()) { + foreach ($episodes as $episode) { $date = new DateTime('0001-01-00'); $date->add(new DateInterval('P'.$episode['airdate'].'D')); array_push($output, array("episode" => $episode['episode'], "name" => $episode['name'], "status" => (string)$episode['status'], "airdate" => $date->format('Y-m-d'))); @@ -130,10 +153,10 @@ if ($_GET['get'] == 'episodes' && !empty($_GET['show']) && isset($_GET['season'] } if ($_GET['get'] == 'latest' && $_GET['type'] == 'shows') { - $sbdb = new SQLite3($sbPath.'/sickbeard.db'); + $sbdb = new PDO('sqlite:'.$sbPath.'/sickbeard.db'); $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;"); $output = array(); - while ($ep = $eps->fetchArray()) { + foreach ($eps as $ep) { $date = new DateTime('0001-01-00'); $date->add(new DateInterval('P'.$ep['airdate'].'D')); array_push($output, array("show" => $ep['show_name'], "episode" => "S".str_pad($ep['season'], 2, '0', STR_PAD_LEFT)."E".str_pad($ep['episode'], 2, '0', STR_PAD_LEFT), "name" => $ep['name'], "airdate" => $date->format('Y-m-d'))); @@ -142,6 +165,34 @@ if ($_GET['get'] == 'latest' && $_GET['type'] == 'shows') { die; } + +/*** MOVIES ***/ + +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, 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'].";"); + $output = array(); + foreach ($movies as $movie) { + array_push($output, array( + "imdb" => $movie['imdb'], + "title" => $movie['title'], + "year" => $movie['year'], + "status" => $movie['status'] + )); + } + echo json_encode($output); + die; + +} + function cleanName($show) { return preg_replace("/[^a-zA-Z0-9]/", "_", $show); } diff --git a/css/mediarack.css b/css/mediarack.css index 2cc936a07aac46117e1849a55b532fa3307f8f92..2cf41fff1d5368a9621ad3a52177f3f171d85ab5 100644 --- a/css/mediarack.css +++ b/css/mediarack.css @@ -13,25 +13,24 @@ body { min-height: 200px; } -.showName.panel-heading { +.showName.panel-heading, +.movieName.panel-heading { min-height: 71px; height: 71px; } -.showLogo { +.showLogo, +.movieLogo { display: block; margin-left: auto; margin-right: auto; } -.season { - -} - -.thumbnail { +#shows .thumbnail { min-height: 230px; height: 230px; } + .thumbnail img.showPoster { min-height: 220px; height: 220px; @@ -49,12 +48,12 @@ table.episodes tr td{ font-weight: bold; } -div.panel-body.lazy { +div.panel-body { /* background: url('../img/no_fanart.jpg') repeat-y top center; */ background-size: 100% auto; } -div#shows { +div#shows, div#movies { display: none; } diff --git a/index.php b/index.php index 3e191117cb59d909ae7807b7a462711d5a72a3bc..134b6f80e37791c32cef0c59d6ee93be2908600d 100644 --- a/index.php +++ b/index.php @@ -60,8 +60,10 @@ </div> </div> - <div class="content" id="shows"></div> + + <div class="content" id="movies"></div> + </div> <!-- /container --> diff --git a/js/mediarack.js b/js/mediarack.js index 3cb855f96b789772b30ebe05bc879df941a59bfd..3582f9274f08206aac8053d89103ef2dd96ae1b3 100644 --- a/js/mediarack.js +++ b/js/mediarack.js @@ -1,26 +1,36 @@ var showLimit = 5; var showOffset = 0; -var killScroll = false; +var loadShows = true; + +var movieLimit = 5; +var movieOffset = 0; +var loadMovies = true; $(document).ready(function() { getLatest(); getShows(); + getMovies(); $(".nav a").on('click',function(e) { e.preventDefault(); $('.content').hide(); $(".nav li").removeClass('active'); $(this).parent().addClass('active'); + window.scrollTo(0, 0); $($(this).attr('href')).show(); }); $(window).scroll(function(){ if ($(window).scrollTop()+200 >= ($(document).height() - ($(window).height()))){ - if (killScroll == false) { - killScroll = true; + if ($("#shows").is(":visible") && loadShows == true) { + loadShows = false; getShows(); } + if ($("#movies").is(":visible") && loadMovies == true) { + loadMovies = false; + getMovies(); + } } }); @@ -98,17 +108,17 @@ function getShows() { divShowBody.append(divShowPoster); divShowBody.append(ulSeasons); divShowContainer.append(divShowFooter); - $("div.panel-body.lazy").lazyload({ + $("#shows div.panel-body.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", threshold: 100 }); - $("img.showPoster.lazy").lazyload({ + $("#shows img.showPoster.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", threshold: 100 }); - $("img.showLogo.lazy").lazyload({ + $("#shows img.showLogo.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", threshold: 100 @@ -123,7 +133,7 @@ function getShows() { }); showOffset = showOffset+showLimit; if(i > 0) { - killScroll = false; + loadShows = true; } } ); @@ -174,3 +184,52 @@ function getEpisodes(show, season) { } ); } + +function getMovies() { + $.getJSON('api.php', { + 'get': 'movies', + 'limit': movieLimit.toString(), + 'offset': movieOffset.toString() + }, function(data) { + var divMovies = $("#movies"); + 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" style="min-height: 50px; height: 50px;" 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 divMovieFooter =$('<div class="panel-footer">IMDB Rating: </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>'); + divMovieContainer.append(divMovieHeader); + divMovieContainer.append(divMovieBody); + divMovieBody.append(divMoviePoster); + divMovieContainer.append(divMovieFooter); + $("#movies div.panel-body.lazy").lazyload({ + //event: "scrollstop", + effect: "fadeIn", + threshold: 100 + }); + $("#movies img.moviePoster.lazy").lazyload({ + //event: "scrollstop", + effect: "fadeIn", + threshold: 100 + }); + $("#movies img.movieLogo.lazy").lazyload({ + //event: "scrollstop", + effect: "fadeIn", + threshold: 100 + }); + 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'); + } + i++; + }); + movieOffset = movieOffset+movieLimit; + if(i > 0) { + loadMovies = true; + } + } + ); +}