From efa19be46ec04525f167af95ae9f6020e0b76b7d Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan@faked.org>
Date: Sun, 18 May 2014 19:08:40 +0200
Subject: [PATCH] switch to SickBeard API instead of querying the DB cache JSON
 add loading indicator

---
 .gitignore           |   1 +
 api.php              |  63 ++++++++++++++++++++++++++++---------------
 cache/dummy          |   0
 config.php-dist      |  11 ++++++--
 css/mediarack.css    |   4 +++
 img/loading.gif      | Bin 0 -> 10819 bytes
 img/loading_dark.gif | Bin 0 -> 10819 bytes
 index.php            |  11 +++++++-
 js/mediarack.js      |  17 ++++++------
 9 files changed, 74 insertions(+), 33 deletions(-)
 create mode 100644 cache/dummy
 create mode 100644 img/loading.gif
 create mode 100644 img/loading_dark.gif

diff --git a/.gitignore b/.gitignore
index cd07471..64c48e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 /logo/*.png
 /fanart/*.jpg
 /poster/*.jpg
+/cache/*.json
diff --git a/api.php b/api.php
index 7963532..824929a 100644
--- a/api.php
+++ b/api.php
@@ -3,21 +3,24 @@ include_once 'config.php';
 
 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();
-	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");
+	$data = querySB('shows');
+	uasort($data, function($a, $b) {
+		return strcmp($a['show_name'], $b['show_name']);
+	});
+	$shows = array_slice($data, $_GET['offset'], $_GET['limit'], true);
+	foreach($shows as $key => $show) {
+		$dataShow = querySB('show', $key);		
+		$dataSeasons = querySB('show.seasons', $key);
 		$seasons = array();
-		foreach($rows as $row) {
-			array_push($seasons, array("season" => $row['season'], "count" => $row['count']));
+		foreach($dataSeasons as $season => $episodes) {
+			array_push($seasons, array("season" => $season, "count" => count($episodes)));
 		}
 		array_push($output, array(
-			"id" => $show['id'],
-			"name" => $show['name'],
-			"folder" => str_replace($showsPath.'/', '', $show['location']),
-			"thumb" => cleanName($show['name']),
+			"id" => $key,
+			"name" => $show['show_name'],
+			"folder" => str_replace($showsPath.'/', '', $dataShow['location']),
+			"thumb" => cleanName($show['show_name']),
 			"seasons" => $seasons
 		));
 		unset($seasons);
@@ -170,13 +173,12 @@ if ($_GET['get'] == 'logo' && (!empty($_GET['show']) || !empty($_GET['movie'])))
 
 
 if ($_GET['get'] == 'episodes' && !empty($_GET['show']) && isset($_GET['season'])) {
-	$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();
-	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')));
+	if($json = file_get_contents('http://'.$sb['host'].':'.$sb['port'].$sb['path'].'/api/'.$sb['key'].'/?cmd=show.seasons&tvdbid='.$_GET['show'].'&season='.$_GET['season'])) {
+		$data = current(json_decode($json, true));
+		foreach ($data as $key => $episode) {
+			array_push($output, array("episode" => $key, "name" => $episode['name'], "status" => $episode['status'], "airdate" => $episode['airdate']));
+		}
 	}
 	echo json_encode($output);
 	die;
@@ -184,14 +186,16 @@ if ($_GET['get'] == 'episodes' && !empty($_GET['show']) && isset($_GET['season']
 
 
 if ($_GET['get'] == 'latest' && $_GET['type'] == 'shows') {
-	$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;");
+	
+	//$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) {
-		$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')));
+		if($ep['status'] == 'Downloaded') {
+			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), "airdate" => $ep['date']));
+		}
 	}
+	$output = array_slice($output, 0, 10);
 	echo json_encode($output);
 	die;
 }
@@ -237,4 +241,19 @@ function get_absolute_path($path) {
 	return implode(DIRECTORY_SEPARATOR, $absolutes);
 }
 
+function querySB($cmd, $id = '', $season = '') {
+	global $sb, $cacheTTL;
+	if($id == '') {
+		$cache = './cache/'.$cmd.'.json';
+	}else{
+		$cache = './cache/'.$cmd.'-'.$id.'.json';
+	}
+	if (!file_exists($cache) || filemtime($cache) < time()-$cacheTTL) {
+		file_put_contents($cache, file_get_contents('http://'.$sb['host'].':'.$sb['port'].$sb['path'].'/api/'.$sb['key'].'/?cmd='.$cmd.'&tvdbid='.$id.'&season='.$season));
+	}
+	$json = file_get_contents($cache);
+	$data = current(json_decode($json, true));
+	return $data;
+}
+
 ?>
\ No newline at end of file
diff --git a/cache/dummy b/cache/dummy
new file mode 100644
index 0000000..e69de29
diff --git a/config.php-dist b/config.php-dist
index de1b5f0..8e08ddf 100644
--- a/config.php-dist
+++ b/config.php-dist
@@ -1,9 +1,16 @@
 <?php
 
-$sbPath = '/opt/sickbeard';
-$cpPath = '/opt/sickbeard';
+$cpPath = '/opt/couchpotato';
+
+$sb['host'] = 'localhost';
+$sb['post'] = '8080';
+$sb['path'] = '/';
+$sb['key'] = 'YOUR-SICKBEARD-API-KEY';
+$sb['ssl'] = false;
 
 $showsPath = '/mnt/storage/media/tv';
 $moviesPath = '/mnt/storage/media/movies';
 
+$cacheTTL = 3600;
+
 ?>
\ No newline at end of file
diff --git a/css/mediarack.css b/css/mediarack.css
index b32c490..3a72b08 100644
--- a/css/mediarack.css
+++ b/css/mediarack.css
@@ -88,6 +88,10 @@ div.epLabel {
 
 }
 
+#loading {
+	display: none;
+}
+
 .jcarousel-wrapper {
     margin: 20px auto;
     position: relative;
diff --git a/img/loading.gif b/img/loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d6485b28a7030275420738bcf0907d2c2a784603
GIT binary patch
literal 10819
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

literal 0
HcmV?d00001

diff --git a/img/loading_dark.gif b/img/loading_dark.gif
new file mode 100644
index 0000000000000000000000000000000000000000..3cea7541a77df0ccab6a714c09335f97451a98bc
GIT binary patch
literal 10819
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

literal 0
HcmV?d00001

diff --git a/index.php b/index.php
index 6221455..421260a 100644
--- a/index.php
+++ b/index.php
@@ -55,7 +55,7 @@
     </div>
 
     <div class="container">
-
+	
 		<div class="content" id="home">
 			<div class="panel panel-default">
 				<div class="panel-heading">
@@ -90,6 +90,15 @@
 		<div class="content" id="shows"></div>
 
 		<div class="content" id="movies"></div>
+		
+		<div class="panel panel-default" id="loading">
+			<div class="panel-heading text-center">
+				<img src="img/loading.gif" alt="Loading..." />
+			</div>
+			<div class="panel-body text-center">
+				<img src="img/loading_dark.gif" alt="Loading..." />
+			</div>
+		</div>
 
     </div> <!-- /container -->
 
diff --git a/js/mediarack.js b/js/mediarack.js
index 400c0c2..139da29 100644
--- a/js/mediarack.js
+++ b/js/mediarack.js
@@ -58,7 +58,7 @@ 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.name+'<br />'+ep.airdate+'</div></li>');
+					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>');
 				}else{
 					var liLatestItem =  $('<li><img src="api.php?get=poster&movie='+escape(ep.movie)+'" /><div class="epLabel">'+ep.movie+'</div></li>');
 				}
@@ -110,6 +110,7 @@ function getLatest(type) {
 }
 
 function getShows() {
+	$("#loading").show();
 	$.getJSON('api.php', {
 		'get': 'shows',
 		'limit': showLimit.toString(),
@@ -175,6 +176,7 @@ function getShows() {
 			if(i > 0) {
 				loadShows = true;
 			}
+			$("#loading").hide();
 		}
 	);
 }
@@ -189,22 +191,21 @@ function getEpisodes(show, season) {
 			liSeason.find("table.episodes").remove();
 			var olEpisodes = $('<table class="table table-bordered table-condensed episodes"></table>');
 			$.each(data, function (key, episode) {
-				console.log(episode.status.substr(-1, 1));
 				var status;
-				switch(episode.status.substr(-1, 1)) {
-					case '5': // ignored
+				switch(episode.status) {
+					case 'Ignored':
 						status = "info";
 						break;
-					case '4': // downloaded
+					case 'Downloaded':
 						status = "success";
 						break;
-					case '3': // wanted
+					case 'Wanted':
 						status = "danger";
 						break;
-					case '2': // snatched
+					case 'Snatched':
 						status = "warning";
 						break;
-					case '1': // unaired
+					case 'Unaired':
 						status = "";
 						break;
 					default:
-- 
GitLab