From c582fd4d82bfd3f281e1aa3e0ddfa19c5b6e6bfb Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan@faked.org>
Date: Sat, 18 Jan 2014 20:23:29 +0100
Subject: [PATCH] load shows in increments (infinite scroll) don't lazyload
 preloaded artwork (first 5 shows)

---
 api.php           |  2 +-
 css/mediarack.css |  3 ++-
 js/mediarack.js   | 53 +++++++++++++++++++++++++++++++----------------
 3 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/api.php b/api.php
index 453377a..b07ed49 100644
--- a/api.php
+++ b/api.php
@@ -5,7 +5,7 @@ if ($_GET['get'] == 'shows') {
 
 	$sbdb = new SQLite3($sbPath.'/sickbeard.db');
 
-	$shows = $sbdb->query("SELECT tvdb_id AS id, show_name AS name, location FROM tv_shows ORDER BY show_name ASC;");
+	$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()) {
 		$rows = $sbdb->query("SELECT season, COUNT(episode_id) AS count FROM tv_episodes WHERE showid = '".$show['id']."' GROUP BY season ORDER BY season ASC");
diff --git a/css/mediarack.css b/css/mediarack.css
index 90aeb7c..26e5da8 100644
--- a/css/mediarack.css
+++ b/css/mediarack.css
@@ -10,6 +10,7 @@ body {
 
 .show {
 	margin-bottom: 50px;
+	min-height: 200px;
 }
 
 .showName.panel-heading {
@@ -49,7 +50,7 @@ table.episodes  tr td{
 }
 
 div.panel-body.lazy {
-	background: url('../img/no_fanart.jpg') repeat-y top center;
+	/* background: url('../img/no_fanart.jpg') repeat-y top center; */
 	background-size: 100% auto;
 }
 
diff --git a/js/mediarack.js b/js/mediarack.js
index bd7f9b4..6324d33 100644
--- a/js/mediarack.js
+++ b/js/mediarack.js
@@ -1,3 +1,7 @@
+var showLimit = 5;
+var showOffset = 0;
+var killScroll = false;
+
 $(document).ready(function() {
 
 	getShows();
@@ -10,14 +14,24 @@ $(document).ready(function() {
 		$($(this).attr('href')).show();
 	});
 
+	$(window).scroll(function(){
+		if  ($(window).scrollTop()+1000 >= ($(document).height() - ($(window).height()))){
+			if (killScroll == false) {
+				killScroll = true;
+				getShows();
+			}
+		}
+	});
+
 });
 
 function getShows() {
 	$.getJSON('api.php', {
-		'get': 'shows'
+		'get': 'shows',
+		'limit': showLimit.toString(),
+		'offset': showOffset.toString()
 		}, function(data) {
 			var divShows = $("#shows");
-			divShows.empty();
 			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>');
@@ -39,34 +53,37 @@ function getShows() {
 					});
 					ulSeasons.append(liSeason);
 				});
-				divShowContainer.append(divShowHeader);
-				divShowBody.append(divShowPoster);
-				divShowBody.append(ulSeasons);
-				$("img.showLogo.lazy").lazyload({
-					event: "scrollstop",
+				$("div.panel-body.lazy").lazyload({
+					//event: "scrollstop",
 					effect: "fadeIn",
-					threshold: 1500
-				});
-				divShowBody.lazyload({
-					event: "scrollstop",
+					threshold: 900
+				});		
+				$("img.showPoster.lazy").lazyload({
+					//event: "scrollstop",
 					effect: "fadeIn",
-					threshold: 1800
+					threshold: 850
 				});
-				$("img.showPoster.lazy").lazyload({
-					event: "scrollstop",
+				$("img.showLogo.lazy").lazyload({
+					//event: "scrollstop",
 					effect: "fadeIn",
-					threshold: 1600
+					threshold: 700
 				});
+				divShowContainer.append(divShowHeader);
 				divShowContainer.append(divShowBody);
+				divShowBody.append(divShowPoster);
+				divShowBody.append(ulSeasons);
 				divShowContainer.append(divShowFooter);
 				divShows.append(divShowContainer);
 				if(i < 5) {
-					divShowHeader.find("img.showLogo").attr('src', 'api.php?get=logo&show='+escape(show.folder));
-					divShowBody.css('background-image', 'url(api.php?get=fanart&show='+escape(show.folder)+')');
-					divShowPoster.find("img.showPoster").attr('src', 'api.php?get=poster&show='+escape(show.folder));
+					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');
 				}
 				i++;
 			});
+			showOffset = showOffset+showLimit;
+			killScroll = false;
+			console.log(showOffset);
 		}
 	);
 }
-- 
GitLab