diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..3acccc45e5811ebf742657af22123a95fe4f9a66 --- /dev/null +++ b/.htaccess @@ -0,0 +1,6 @@ +RewriteEngine On +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule "([^/]+)/([^/]+)/([^/]+)/([^/]+).(jpg|png)$" api.php?get=$4&$1=$2&season=$3 [B,NE,L] +RewriteRule "([^/]+)/([^/]+)/([^/]+).(jpg|png)$" api.php?get=$3&$1=$2 [B,NE,L] + diff --git a/api.php b/api.php index 82833e68bf7a84a9d7e0e73aadd63604e8be6e47..80c8f9428e3cf2732b2f45ec0b6e9509972662c4 100644 --- a/api.php +++ b/api.php @@ -62,6 +62,7 @@ if ($_GET['get'] == 'poster' && (!empty($_GET['show']) || !empty($_GET['movie']) else $poster = get_absolute_path('poster/'. cleanName($_GET['movie']).'.jpg'); + if(!file_exists($poster)) { if($_GET['show'] && $_GET['season']) @@ -83,7 +84,8 @@ if ($_GET['get'] == 'poster' && (!empty($_GET['show']) || !empty($_GET['movie']) header("HTTP/1.0 404 Not Found"); die; }else{ - $poster = 'img/no_poster.jpg'; + //$poster = 'img/no_poster.jpg'; + header("Location: ../../img/no_poster.jpg"); } } @@ -123,7 +125,8 @@ if ($_GET['get'] == 'fanart' && (!empty($_GET['show']) || !empty($_GET['movie']) $img->setImageCompressionQuality(75); $img->writeImage($fanart); }else{ - $fanart = 'img/no_fanart.jpg'; + //$fanart = 'img/no_fanart.jpg'; + header("Location: ../../img/no_fanart.jpg"); } } diff --git a/config.php-dist b/config.php-dist index d316bb1e3414eec732d127c0ec28865f28aecc01..51c53a0c3ddc2e593e84fb5ef5970b49a63e3b41 100644 --- a/config.php-dist +++ b/config.php-dist @@ -12,9 +12,13 @@ $cp['path'] = '/'; $cp['key'] = 'YOUR-COUCHPOTATO-KEY'; $cp['ssl'] = false; -$showsPath = '/mnt/storage/media/tv'; -$moviesPath = '/mnt/storage/media/movies'; +$showsPath = '/storage/media/tv'; +$moviesPath = '/storage/media/movies'; $cacheTTL = 3600; +$cdn['enabled'] = false; +$cdn['host'] = 'cdn#.example.com'; +$cdn['count'] = 2; + ?> \ No newline at end of file diff --git a/css/mediarack.css b/css/mediarack.css index 3a72b0886969c105af291a8483e29f0ae6069d18..43cfea06e5ef2c4c2a5699a5d47280e5fea83d56 100644 --- a/css/mediarack.css +++ b/css/mediarack.css @@ -25,8 +25,8 @@ body { height: 71px; } -.showLogo, -.movieLogo { +img.showLogo, +img.movieLogo { display: block; margin-left: auto; margin-right: auto; @@ -39,7 +39,8 @@ body { height: 230px; } -.thumbnail img.showPoster { +a.thumbnail img.showPoster, +a.thumbnail img.moviePoster { min-height: 220px; height: 220px; } diff --git a/index.php b/index.php index 421260aa2d3f80903c03e4fc7c548e06214ba432..b95e701f80070058220608acff9b8e9f9422f743 100644 --- a/index.php +++ b/index.php @@ -1,3 +1,6 @@ +<?php +include_once 'config.php'; +?> <!DOCTYPE html> <html lang="en"> <head> @@ -102,10 +105,11 @@ </div> <!-- /container --> - - <!-- Bootstrap core JavaScript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> + <script> + var cdnEnabled = '<?php echo $cdn['enabled']; ?>'; + var cdnHostPattern = '<?php echo $cdn['host']; ?>'; + var cdnHostCount = <?php echo $cdn['count']; ?>; + </script> <script src="js/jquery-1.10.2.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/jquery.jcarousel.min.js"></script> diff --git a/js/mediarack.js b/js/mediarack.js index 1813d666cab0a7f0a42c42d61127d4f3a179372d..ca754ca0faf3bd457db41e3c2bb2ed6a238157aa 100644 --- a/js/mediarack.js +++ b/js/mediarack.js @@ -1,3 +1,4 @@ + var showLimit = 5; var showOffset = 0; var loadShows = true; @@ -58,9 +59,9 @@ function getLatest(type) { $.each(data, function (key, ep) { var ulLatestContainer = $("#latest"+type); if(type == 'Shows') { - var liLatestItem = $('<li><img src="api.php?get=poster&show='+escape(ep.show)+'" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>'); + var liLatestItem = $('<li><img src="'+cdn('show/'+escape(ep.show))+'/poster.jpg" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>'); }else{ - var liLatestItem = $('<li><img src="api.php?get=poster&movie='+escape(ep.movie)+'" /><div class="epLabel">'+ep.movie+'</div></li>'); + var liLatestItem = $('<li><img src="'+cdn('movie/'+escape(ep.movie))+'/poster.jpg" /><div class="epLabel">'+ep.movie+'</div></li>'); } ulLatestContainer.append(liLatestItem); }); @@ -120,10 +121,11 @@ function getShows() { var i = 0; $.each(data, function (key, show) { var divShowContainer = $('<div class="show panel panel-default" data-showid="'+show.id+'" id="show_'+show.id+'"></div>'); - var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="api.php?get=logo&show='+escape(show.folder)+'" src="" /></h2></div>'); - var divShowBody = $('<div class="panel-body lazy" data-original="api.php?get=fanart&show='+escape(show.folder)+'"></div>'); + var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+escape(show.folder)+'/logo.png')+'" src="" /></h2></div>'); + var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+escape(show.folder)+'/fanart.jpg')+'"></div>'); + divShowBody.css('background-image', 'url('+cdn('img/no_fanart.jpg')); var divShowFooter =$('<div class="panel-footer">Seasons: , Episodes: </div>'); - var divShowPoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="api.php?get=poster&show='+escape(show.folder)+'" src="img/no_poster.jpg" /></a></div>'); + var divShowPoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+escape(show.folder)+'/poster.jpg')+'" src="'+cdn('img/no_poster.jpg')+'" /></a></div>'); var ulSeasons = $('<ul class="seasons col-md-10 list-group"></ul>'); $.each(show.seasons, function(key, season) { var liSeason = $('<li class="season list-group-item" data-season="'+season.season+'"><strong>Season '+season.season+'</strong><span class="badge">'+season.count+'</span></li>'); @@ -131,10 +133,10 @@ function getShows() { getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season')); }); liSeason.hover(function() { - $("#poster_"+show.id).error(function() {$(this).attr('src', 'api.php?get=poster&show='+escape(show.folder))}); - $("#poster_"+show.id).attr('src', 'api.php?get=poster&show='+escape(show.folder)+'&season='+season.season); + $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg'))}); + $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/'+season.season+'/poster.jpg')); }, function() { - $("#poster_"+show.id).attr('src', 'api.php?get=poster&show='+escape(show.folder)); + $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')); }); ulSeasons.append(liSeason); }); @@ -166,9 +168,9 @@ function getShows() { }); divShows.append(divShowContainer); if(i < 5) { - divShowHeader.find("img.showLogo").attr('src', 'api.php?get=logo&show='+escape(show.folder)).removeClass('lazy'); - divShowBody.css('background-image', 'url(api.php?get=fanart&show='+escape(show.folder)+')').removeClass('lazy'); - divShowPoster.find("img.showPoster").attr('src', 'api.php?get=poster&show='+escape(show.folder)).removeClass('lazy'); + divShowHeader.find("img.showLogo").attr('src', cdn('show/'+escape(show.folder)+'/logo.png')).removeClass('lazy'); + divShowBody.css('background-image', 'url('+cdn('show/'+escape(show.folder)+'/fanart.jpg')+')').removeClass('lazy'); + divShowPoster.find("img.showPoster").attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')).removeClass('lazy'); } i++; }); @@ -237,9 +239,10 @@ 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.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 divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+escape(movie.folder)+'/logo.png')+'" src="" /></h2></div>'); + var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+'"></div>'); + divMovieBody.css('background-image', 'url('+cdn('img/no_fanart.jpg')); + var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/poster.jpg')+'" src="'+cdn('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 text-right">IMDB Rating: '+movie.rating+'</div>'); divMovieContainer.append(divMovieHeader); @@ -270,9 +273,9 @@ function getMovies() { }); divMovies.append(divMovieContainer); if(i < 5) { - 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'); + divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+escape(movie.folder)+'/logo.png')).removeClass('lazy'); + divMovieBody.css('background-image', 'url('+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+')').removeClass('lazy'); + divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+escape(movie.folder)+'/poster.jpg')).removeClass('lazy'); } i++; }); @@ -284,3 +287,12 @@ function getMovies() { } ); } + +function cdn(img) { + if(cdnEnabled == true) { + var cdnHost = cdnHostPattern.replace('#', Math.floor((Math.random()*cdnHostCount))); + var base = window.location.href.replace(/https?:\/\//i, "").split('#')[0]; + var img = window.location.protocol+'//'+cdnHost+'/'+base+img + } + return img; +}