瀏覽代碼

added sonarr queue to homepage

CauseFX 5 年之前
父節點
當前提交
fc0e949342
共有 4 個文件被更改,包括 150 次插入2 次删除
  1. 5 0
      api/config/default.php
  2. 42 1
      api/functions/homepage-connect-functions.php
  3. 61 1
      api/functions/homepage-functions.php
  4. 42 0
      js/functions.js

+ 5 - 0
api/config/default.php

@@ -116,6 +116,10 @@ return array(
 	'homepageSabnzbdAuth' => '1',
 	'homepageSonarrEnabled' => false,
 	'homepageSonarrAuth' => '1',
+	'homepageSonarrQueueEnabled' => false,
+	'homepageSonarrQueueAuth' => '1',
+	'homepageSonarrQueueCombine' => false,
+	'homepageSonarrQueueRefresh' => '60000',
 	'homepageLidarrEnabled' => false,
 	'homepageLidarrAuth' => '1',
 	'homepageCouchpotatoEnabled' => false,
@@ -183,6 +187,7 @@ return array(
 	'homepageOrderWeatherAndAir' => '23',
 	'homepageOrderSpeedtest' => '24',
 	'homepageOrderNetdata' => '25',
+	'homepageOrderSonarrQueue' => '26',
 	'homepageShowStreamNames' => false,
 	'homepageShowStreamNamesAuth' => '1',
 	'homepageStreamRefresh' => '60000',

+ 42 - 1
api/functions/homepage-connect-functions.php

@@ -3,6 +3,9 @@
 function homepageConnect($array)
 {
 	switch ($array['data']['action']) {
+		case 'getSonarrQueue':
+			return (qualifyRequest($GLOBALS['homepageSonarrAuth'])) ? sonarrConnectQueue() : false;
+			break;
 		case 'getPlexStreams':
 			return (qualifyRequest($GLOBALS['homepagePlexStreamsAuth'])) ? plexConnect('streams') : false;
 			break;
@@ -1235,7 +1238,45 @@ function delugeConnect()
 	$api['content'] = isset($api['content']) ? $api['content'] : false;
 	return $api;
 }
-
+function sonarrConnectQueue()
+{
+	$sonarrQueueItems = array();
+	if ($GLOBALS['homepageSonarrEnabled'] && qualifyRequest($GLOBALS['homepageSonarrAuth']) && !empty($GLOBALS['sonarrURL']) && !empty($GLOBALS['sonarrToken'])) {
+		$sonarrs = array();
+		$sonarrURLList = explode(',', $GLOBALS['sonarrURL']);
+		$sonarrTokenList = explode(',', $GLOBALS['sonarrToken']);
+		if (count($sonarrURLList) == count($sonarrTokenList)) {
+			foreach ($sonarrURLList as $key => $value) {
+				$sonarrs[$key] = array(
+					'url' => $value,
+					'token' => $sonarrTokenList[$key]
+				);
+			}
+			foreach ($sonarrs as $key => $value) {
+				try {
+					$sonarr = new Kryptonit3\Sonarr\Sonarr($value['url'], $value['token']);
+					$sonarr = $sonarr->getQueue();
+					$downloadList = json_decode($sonarr, true);
+					if (is_array($downloadList) || is_object($downloadList)) {
+						$sonarrQueue = (array_key_exists('error', $downloadList)) ? '' : $downloadList;
+					} else {
+						$sonarrQueue = '';
+					}
+					if (!empty($sonarrQueue)) {
+						$sonarrQueueItems = array_merge($sonarrQueueItems, $sonarrQueue);
+					}
+				} catch (Exception $e) {
+					writeLog('error', 'Sonarr Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+				}
+			}
+			$api['content']['queueItems'] = $sonarrQueueItems;
+			$api['content']['historyItems'] = false;
+			$api['content'] = isset($api['content']) ? $api['content'] : false;
+			return $api;
+		}
+	}
+	return false;
+}
 function getCalendar()
 {
 	$startDate = date('Y-m-d', strtotime("-" . $GLOBALS['calendarStart'] . " days"));

+ 61 - 1
api/functions/homepage-functions.php

@@ -28,6 +28,7 @@ function homepageOrder()
 		"homepageOrderWeatherAndAir" => $GLOBALS['homepageOrderWeatherAndAir'],
 		"homepageOrderSpeedtest" => $GLOBALS['homepageOrderSpeedtest'],
 		"homepageOrderNetdata" => $GLOBALS['homepageOrderNetdata'],
+		"homepageOrderSonarrQueue" => $GLOBALS['homepageOrderSonarrQueue'],
 	);
 	asort($homepageOrder);
 	return $homepageOrder;
@@ -409,6 +410,30 @@ function buildHomepageItem($homepageItem)
 				';
 			}
 			break;
+		case 'homepageOrderSonarrQueue':
+			if ($GLOBALS['homepageSonarrQueueEnabled'] && qualifyRequest($GLOBALS['homepageSonarrQueueAuth'])) {
+				if ($GLOBALS['homepageSonarrQueueCombine']) {
+					$item .= '
+					<script>
+					// Sonarr Queue
+					buildDownloaderCombined(\'sonarr\');
+					homepageDownloader("sonarr", "' . $GLOBALS['homepageSonarrQueueRefresh'] . '");
+					// End Sonarr Queue
+					</script>
+					';
+				} else {
+					$item .= '<div class="white-box"><h2 class="text-center" lang="en">Loading Download Queue...</h2></div>';
+					$item .= '
+					<script>
+					// Sonarr Queue
+					$("#' . $homepageItem . '").html(buildDownloader("sonarr"));
+					homepageDownloader("sonarr", "' . $GLOBALS['homepageDownloadRefresh'] . '");
+					// End Sonarr Queue
+					</script>
+					';
+				}
+			}
+			break;
 		default:
 			# code...
 			break;
@@ -1774,7 +1799,35 @@ function getHomepageList()
 						'value' => $GLOBALS['sonarrToken']
 					)
 				),
-				'Misc Options' => array(
+				'Queue' => array(
+					array(
+						'type' => 'switch',
+						'name' => 'homepageSonarrQueueEnabled',
+						'label' => 'Enable',
+						'value' => $GLOBALS['homepageSonarrQueueEnabled']
+					),
+					array(
+						'type' => 'select',
+						'name' => 'homepageSonarrQueueAuth',
+						'label' => 'Minimum Authentication',
+						'value' => $GLOBALS['homepageSonarrQueueAuth'],
+						'options' => $groups
+					),
+					array(
+						'type' => 'switch',
+						'name' => 'homepageSonarrQueueCombine',
+						'label' => 'Add to Combined Downloader',
+						'value' => $GLOBALS['homepageSonarrQueueCombine']
+					),
+					array(
+						'type' => 'select',
+						'name' => 'homepageSonarrQueueRefresh',
+						'label' => 'Refresh Seconds',
+						'value' => $GLOBALS['homepageSonarrQueueRefresh'],
+						'options' => optionTime()
+					),
+				),
+				'Calendar' => array(
 					array(
 						'type' => 'number',
 						'name' => 'calendarStart',
@@ -3163,6 +3216,13 @@ function buildHomepageSettings()
 					$class .= ' faded';
 				}
 				break;
+			case 'homepageOrderSonarrQueue':
+				$class = 'bg-success';
+				$image = 'plugins/images/tabs/sonarr.png';
+				if (!$GLOBALS['homepageOrderSonarrQueue']) {
+					$class .= ' faded';
+				}
+				break;
 			default:
 				$class = 'blue-bg';
 				$image = '';

+ 42 - 0
js/functions.js

@@ -5420,6 +5420,38 @@ function buildDownloaderItem(array, source, type='none'){
                 `;
             });
             break;
+		case 'sonarr':
+			if(array.content === false){
+				queue = '<tr><td class="max-texts" lang="en">Connection Error to ' + source + '</td></tr>';
+				break;
+			}
+			if(array.content.queueItems == 0){
+				queue = '<tr><td class="max-texts" lang="en">Nothing in queue</td></tr>';
+			}
+			//console.log(array);
+			$.each(array.content.queueItems, function(i,v) {
+				count = count + 1;
+				var percent = Math.floor(((v.size - v.sizeleft) / v.size) * 100);
+				percent = (isNaN(percent)) ? '0' : percent;
+				var size = v.size != -1 ? humanFileSize(v.size,false) : "?";
+				v.name = v.series.title;
+				queue += `
+                <tr>
+                    <td class="">`+v.name+`</td>
+                    <td class="">S`+pad(v.episode.seasonNumber,2)+`E`+pad(v.episode.episodeNumber,2)+`</td>
+                    <td class="max-texts">`+v.episode.title+`</td>
+                    <td class="hidden-xs sonarr-`+cleanClass(v.status)+`">`+v.status+`</td>
+                    <td class="hidden-xs">`+size+`</td>
+                    <td class="hidden-xs"><span class="label label-info">`+v.protocol+`</span></td>
+                    <td class="text-right">
+                        <div class="progress progress-lg m-b-0">
+                            <div class="progress-bar progress-bar-info" style="width: `+percent+`%;" role="progressbar">`+percent+`%</div>
+                        </div>
+                    </td>
+                </tr>
+                `;
+			});
+			break;
 		case 'qBittorrent':
 		    if(array.content === false){
                 queue = '<tr><td class="max-texts" lang="en">Connection Error to ' + source + '</td></tr>';
@@ -5540,6 +5572,7 @@ function buildDownloader(source){
         case 'qBittorrent':
         case 'deluge':
         case 'rTorrent':
+	    case 'sonarr':
             var queue = true;
             var history = false;
             queueButton = 'REFRESH';
@@ -5640,6 +5673,7 @@ function buildDownloaderCombined(source){
         case 'qBittorrent':
         case 'deluge':
         case 'rTorrent':
+	    case 'sonarr':
             var queue = true;
             var history = false;
             queueButton = 'REFRESH';
@@ -6295,6 +6329,9 @@ function homepageDownloader(type, timeout){
 		case 'transmission':
 			var action = 'getTransmission';
 			break;
+		case 'sonarr':
+			var action = 'getSonarrQueue';
+			break;
 		case 'qBittorrent':
 			var action = 'getqBittorrent';
 			break;
@@ -7905,6 +7942,11 @@ function tryUpdateNetdata(array){
     });
     return existing;
 }
+function pad(n, width, z) {
+	z = z || '0';
+	n = n + '';
+	return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
+}
 // Thanks Swifty!
 function PopupCenter(url, title, w, h) {
     // Fixes dual-screen position                         Most browsers      Firefox