Browse Source

Transmission work - please test

causefx 8 years ago
parent
commit
0dd62ac5c3

+ 3 - 1
api/config/default.php

@@ -39,6 +39,8 @@ return array(
 	'transmissionURL' => '',
     'transmissionUsername' => '',
     'transmissionPassword' => '',
+    'transmissionHideSeeding' => false,
+    'transmissionHideCompleted' => false,
     'homepageSabnzbdEnabled' => false,
     'homepageSabnzbdAuth' => '1',
     'homepageTransmissionEnabled' => false,
@@ -63,7 +65,7 @@ return array(
 	'homepageOrderombi' => '12',
 	'homepageOrdercalendar' => '13',
 	'homepageOrdernoticeguest' => '14',
-	'homepageOrdertransmisson' => '15',
+	'homepageOrdertransmission' => '15',
     'homepageShowStreamNames' => false,
     'homepageShowStreamNamesAuth' => '1',
     'homepageStreamRefresh' => '60000',

+ 51 - 29
api/functions/homepage-connect-functions.php

@@ -26,6 +26,9 @@ function homepageConnect($array){
         case 'getNzbget':
             return nzbgetConnect();
             break;
+        case 'getTransmission':
+            return transmissionConnect();
+            break;
         default:
             # code...
             break;
@@ -543,34 +546,53 @@ function nzbgetConnect() {
 }
 function transmissionConnect() {
     if($GLOBALS['homepageTransmissionEnabled'] && !empty($GLOBALS['transmissionURL']) && qualifyRequest($GLOBALS['homepageTransmissionAuth'])){
-        $url = $GLOBALS['transmissionURL'];
-        // Parse URL
-        //local address?
-    	if(substr($url, 0,1) == "/"){
-    		if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
-    			$protocol = "https://";
-    		} else {
-    			$protocol = "http://";
-    		}
-    		$url = $protocol.getServer().$url;
-    	}
-    	// Get Digest
-    	$digest = parse_url($url);
-    	// http/https
-    	if (!isset($digest['scheme'])) {
-    		if (isset($digest['port']) && in_array($digest['port'], array(80,8080,8096,32400,7878,8989,8182,8081,6789))) {
-    			$scheme = 'http';
-    		} else {
-    			$scheme = 'https';
-    		}
-    	} else {
-    		$scheme = $digest['scheme'];
-    	}
-    	// Host
-    	$host = (isset($digest['host'])?$digest['host']:'');
-    	// Port
-    	$port = (isset($digest['port'])?':'.$digest['port']:'');
-    	// Path
-    	$path = (isset($digest['path']) && $digest['path'] !== '/'?$digest['path']:'');
+        $digest = qualifyURL($GLOBALS['transmissionURL'], true);
+        $digest['port'] = !empty($digest['port']) ? ':'.$digest['port'] : '';
+        $passwordInclude = ($GLOBALS['transmissionUsername'] != '' && $GLOBALS['transmissionPassword'] != '') ? $GLOBALS['transmissionUsername'].':'.decrypt($GLOBALS['transmissionPassword'])."@" : '';
+	    $url = $digest['scheme'].'://'.$passwordInclude.$digest['host'].$digest['port'].$digest['path'].'/rpc';
+        try{
+			$options = (localURL($GLOBALS['transmissionURL'])) ? array('verify' => false ) : array();
+			$response = Requests::get($url, array(), $options);
+			if($response->headers['x-transmission-session-id']){
+				$session_id = $response->headers['x-transmission-session-id'];
+			}
+            $headers = array(
+        		'X-Transmission-Session-Id' => $session_id,
+        		'Content-Type' => 'application/json'
+        	);
+        	$data = array(
+        		'method' => 'torrent-get',
+        		'arguments' => array(
+        			'fields' => array(
+        				"id", "name", "totalSize", "eta", "isFinished", "isStalled", "percentDone", "rateDownload", "status", "downloadDir","errorString"
+        			),
+        		),
+        		'tags' => ''
+        	);
+            $response = Requests::post($url, $headers, json_encode($data), $options);
+            if($response->success){
+                $torrentList = json_decode($response->body, true)['arguments']['torrents'];
+                if($GLOBALS['transmissionHideSeeding'] || $GLOBALS['transmissionHideCompleted']){
+                    $filter = array();
+                    $torrents['arguments']['torrents'] = array();
+                    if($GLOBALS['transmissionHideSeeding']){ array_push($filter, 6, 5); }
+                    if($GLOBALS['transmissionHideCompleted']){ array_push($filter, 0); }
+                    foreach ($torrentList as $key => $value) {
+                        if(!in_array($value['status'], $filter)){
+                            $torrents['arguments']['torrents'][] = $value;
+                        }
+                    }
+                }else{
+                    $torrents = json_decode($response->body, true);
+                }
+
+				$api['content']['queueItems'] = $torrents;
+                $api['content']['historyItems'] = false;
+			}
+		}catch( Requests_Exception $e ) {
+			writeLog('error', 'Transmission Connect Function - Error: '.$e->getMessage(), 'SYSTEM');
+		};
+        $api['content'] = isset($api['content']) ? $api['content'] : false;
+        return $api;
     }
 }

+ 78 - 3
api/functions/homepage-functions.php

@@ -16,7 +16,7 @@ function homepageOrder(){
 		"homepageOrderombi" => $GLOBALS['homepageOrderombi'],
 		"homepageOrdercalendar" => $GLOBALS['homepageOrdercalendar'],
 		"homepageOrdernoticeguest" => $GLOBALS['homepageOrdernoticeguest'],
-		"homepageOrdertransmisson" => $GLOBALS['homepageOrdertransmisson'],
+		"homepageOrdertransmission" => $GLOBALS['homepageOrdertransmission'],
 	);
 	asort($homepageOrder);
 	return $homepageOrder;
@@ -47,8 +47,19 @@ function buildHomepageItem($homepageItem){
 		case 'homepageOrderspeedtest':
 
 			break;
-		case 'homepageOrdertransmisson':
-
+		case 'homepageOrdertransmission':
+			if($GLOBALS['homepageTransmissionEnabled']){
+				$item .= '
+				<script>
+				// Transmission
+				homepageDownloader("transmission");
+				setInterval(function() {
+					homepageDownloader("transmission");
+				}, '.$GLOBALS['homepageDownloadRefresh'].');
+				// End Transmission
+				</script>
+				';
+			}
 			break;
 		case 'homepageOrdernzbget':
 			if($GLOBALS['homepageNzbgetEnabled']){
@@ -517,6 +528,70 @@ function getHomepageList(){
 					)
 				)
             )
+        ),
+		array(
+            'name' => 'Transmission',
+            'enabled' => false,
+            'image' => 'plugins/images/tabs/transmission.png',
+            'category' => 'Downloader',
+            'settings' => array(
+                'Enable' => array(
+                    array(
+            			'type' => 'switch',
+            			'name' => 'homepageTransmissionEnabled',
+            			'label' => 'Enable',
+            			'value' => $GLOBALS['homepageTransmissionEnabled']
+            		),
+					array(
+            			'type' => 'select',
+            			'name' => 'homepageTransmissionAuth',
+            			'label' => 'Minimum Authentication',
+            			'value' => $GLOBALS['homepageTransmissionAuth'],
+                        'options' => $groups
+            		)
+                ),
+				'Connection' => array(
+                    array(
+                        'type' => 'input',
+                        'name' => 'transmissionURL',
+                        'label' => 'URL',
+                        'value' => $GLOBALS['transmissionURL'],
+						'placeholder' => 'http(s)://hostname:port'
+                    ),
+                    array(
+                        'type' => 'input',
+                        'name' => 'transmissionUsername',
+                        'label' => 'Username',
+                        'value' => $GLOBALS['transmissionUsername']
+                    ),
+					array(
+                        'type' => 'password',
+                        'name' => 'transmissionPassword',
+                        'label' => 'Password',
+                        'value' => $GLOBALS['transmissionPassword']
+                    )
+                ),
+				'Misc Options' => array(
+					array(
+            			'type' => 'switch',
+            			'name' => 'transmissionHideSeeding',
+            			'label' => 'Hide Seeding',
+            			'value' => $GLOBALS['transmissionHideSeeding']
+            		),array(
+            			'type' => 'switch',
+            			'name' => 'transmissionHideCompleted',
+            			'label' => 'Hide Completed',
+            			'value' => $GLOBALS['transmissionHideCompleted']
+            		),
+					array(
+						'type' => 'select',
+						'name' => 'homepageDownloadRefresh',
+						'label' => 'Refresh Seconds',
+						'value' => $GLOBALS['homepageDownloadRefresh'],
+						'options' => $time
+					)
+				)
+            )
         )
     );
 }

+ 8 - 2
api/functions/normal-functions.php

@@ -264,7 +264,7 @@ function array_filter_key(array $array, $callback){
 	return array_intersect_key($array, array_flip($matchedKeys));
 }
 // Qualify URL
-function qualifyURL($url) {
+function qualifyURL($url, $return=false) {
 	//local address?
 	if(substr($url, 0,1) == "/"){
 		if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
@@ -293,7 +293,13 @@ function qualifyURL($url) {
 	// Path
 	$path = (isset($digest['path']) && $digest['path'] !== '/'?$digest['path']:'');
 	// Output
-	return $scheme.'://'.$host.$port.$path;
+	$array = array(
+		'scheme' => $scheme,
+		'host' => $host,
+		'port' => $port,
+		'path' => $path
+	);
+	return ($return) ? $array : $scheme.'://'.$host.$port.$path;
 }
 function getServerPath() {
 	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == "https"){

+ 4 - 0
css/organizr.css

@@ -232,3 +232,7 @@ td span.label.label-info {
   min-width: 80px !important;
   display: inline-block !important;
 }
+.inbox-center.table-responsive {
+max-height: 300px;
+overflow-y: auto;
+}

+ 8 - 6
js/custom.js

@@ -309,12 +309,14 @@ function pageLoad(){
         size: "6px",
         color: 'rgba(0,0,0,0.5)'
     });
-    $('.chat-list').slimScroll({
-        height: '100%',
-        position: 'right',
-        size: "0px",
-        color: '#dcdcdc'
-    });
+    if(bowser.mobile !== true){
+        $('.inbox-center').slimScroll({
+            height: '100%',
+            position: 'right',
+            size: "5px",
+            color: '#dcdcdc'
+        });
+    }
     /* ===== Resize all elements ===== */
 
 

+ 71 - 2
js/functions.js

@@ -2092,6 +2092,71 @@ function buildDownloaderItem(array, source, type='none'){
 					break;
 				default:
 
+			}
+			break;
+		case 'transmission':
+			switch (type) {
+				case 'queue':
+				console.log(array);
+					if(array.arguments.torrents == 0){
+						return '<tr><td class="max-texts" lang="en">Nothing in queue</td></tr>';
+					}
+					$.each(array.arguments.torrents, function(i,v) {
+						switch (v.status) {
+							case 7:
+							case '7':
+								var status = 'No Peers';
+								break;
+							case 6:
+							case '6':
+								var status = 'Seeding';
+								break;
+							case 5:
+							case '5':
+								var status = 'Seeding Queued';
+								break;
+							case 4:
+							case '4':
+								var status = 'Downloading';
+								break;
+							case 3:
+							case '3':
+								var status = 'Queued';
+								break;
+							case 2:
+							case '2':
+								var status = 'Checking Files';
+								break;
+							case 1:
+							case '1':
+								var status = 'File Check Queued';
+								break;
+							case 0:
+							case '0':
+								var status = 'Complete';
+								break;
+							default:
+								var status = 'Complete';
+						}
+						var percent = Math.floor(v.percentDone * 100);
+						v.Category = (v.Category !== '') ? v.Category : 'Not Set';
+						items += `
+						<tr>
+							<td class="max-texts">`+v.name+`</td>
+							<td class="hidden-xs">`+status+`</td>
+							<td class="hidden-xs">`+v.downloadDir+`</td>
+							<td class="hidden-xs">`+humanFileSize(v.totalSize,true)+`</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;
+				default:
+
 			}
 			break;
 		default:
@@ -2108,6 +2173,8 @@ function buildDownloader(array, source){
 	var state = '';
 	var active = '';
 	console.log(array);
+	console.log(queueItems);
+	console.log(historyItems);
 	console.log(downloader);
 	if(queueItems){
 		switch (source) {
@@ -2231,17 +2298,19 @@ function homepageDownloader(type){
 		case 'nzbget':
 			var action = 'getNzbget';
 			break;
+		case 'transmission':
+			var action = 'getTransmission';
+			break;
 		default:
 
 	}
-	ajaxloader(".content-wrap","in");
+	console.log('#homepageOrder'+type);
 	organizrAPI('POST','api/?v1/homepage/connect',{action:action}).success(function(data) {
 		var response = JSON.parse(data);
 		$('#homepageOrder'+type).html(buildDownloader(response.data, type));
 	}).fail(function(xhr) {
 		console.error("Organizr Function: API Connection Failed");
 	});
-	ajaxloader();
 }
 function homepageStream(type){
 	switch (type) {