Przeglądaj źródła

add blackhole downloads and fix order

blowl 3 lat temu
rodzic
commit
bd83cd2ca1

+ 3 - 0
api/classes/organizr.class.php

@@ -4228,6 +4228,9 @@ class Organizr
 				'jackett' => [
 					'homepageJackettBackholeDownload' => $this->config['homepageJackettBackholeDownload'] ? true : false
 				],
+				'prowlarr' => [
+					'homepageProwlarrBackholeDownload' => $this->config['homepageProwlarrBackholeDownload'] ? true : false
+				],
 				'options' => [
 					'alternateHomepageHeaders' => $this->config['alternateHomepageHeaders'],
 					'healthChecksTags' => $this->config['healthChecksTags'],

+ 12 - 11
api/config/default.php

@@ -214,6 +214,7 @@ return [
 	'jackettUseCustomCertificate' => false,
 	'jackettDisableCertCheck' => false,
 	'homepageJackettBackholeDownload' => false,
+	'homepageProwlarrBackholeDownload' => false,
 	'homepageProwlarrEnabled' => false,
 	'homepageProwlarrAuth' => '1',
 	'ProwlarrURL' => '',
@@ -361,17 +362,17 @@ return [
 	'homepageOrderjellyfinnowplaying' => '29',
 	'homepageOrderjellyfinrecent' => '30',
 	'homepageOrderJackett' => '31',
-	'homepageOrderProwlarr' => '32',
-	'homepageOrdercustomhtml03' => '33',
-	'homepageOrdercustomhtml04' => '34',
-	'homepageOrdercustomhtml05' => '35',
-	'homepageOrdercustomhtml06' => '36',
-	'homepageOrdercustomhtml07' => '37',
-	'homepageOrdercustomhtml08' => '38',
-	'homepageOrderuTorrent' => '39',
-	'homepageOrderoverseerr' => '40',
-	'homepageOrderBookmarks' => '41',
-	'homepageOrderDonate' => '42',
+	'homepageOrdercustomhtml03' => '32',
+	'homepageOrdercustomhtml04' => '33',
+	'homepageOrdercustomhtml05' => '34',
+	'homepageOrdercustomhtml06' => '35',
+	'homepageOrdercustomhtml07' => '36',
+	'homepageOrdercustomhtml08' => '37',
+	'homepageOrderuTorrent' => '38',
+	'homepageOrderoverseerr' => '39',
+	'homepageOrderBookmarks' => '40',
+	'homepageOrderDonate' => '41',
+	'homepageOrderProwlarr' => '42',
 	'homepageShowStreamNames' => false,
 	'homepageShowStreamNamesAuth' => '1',
 	'homepageShowStreamNamesWithoutIp' => false,

+ 22 - 13
api/homepage/prowlarr.php

@@ -27,6 +27,9 @@ trait ProwlarrHomepageItem
 					$this->settingsOption('disable-cert-check', 'prowlarrDisableCertCheck'),
 					$this->settingsOption('use-custom-certificate', 'prowlarrUseCustomCertificate'),
 				],
+				'Options' => [
+					$this->settingsOption('switch', 'homepageProwlarrBackholeDownload', ['label' => 'Prefer black hole download', 'help' => 'Prefer black hole download link instead of direct/magnet download']),
+				],
 				'Test Connection' => [
 					$this->settingsOption('blank', null, ['label' => 'Please Save before Testing']),
 					$this->settingsOption('test', 'prowlarr'),
@@ -137,26 +140,34 @@ trait ProwlarrHomepageItem
 		return $api;
 	}
 
-	public function performProwlarrBackHoleDownload($url = null)
+	public function performProwlarrBackHoleDownload($guid = null, $indexerId = null)
 	{
 		if (!$this->homepageItemPermissions($this->prowlarrHomepagePermissions('main'), true)) {
 			return false;
 		}
-		if (!$url) {
-			$this->setAPIResponse('error', 'URL was not supplied', 422);
+		if (!$guid) {
+			$this->setAPIResponse('error', 'guid was not supplied', 422);
+			return false;
+		}
+		if (!$indexerId) {
+			$this->setAPIResponse('error', 'indexerId was not supplied', 422);
 			return false;
 		}
 		$apiURL = $this->qualifyURL($this->config['prowlarrURL']);
-		$endpoint = $apiURL . $url;
-		error_log($endpoint);
+		$endpoint = $apiURL . '/api/v1/search?apikey=' . $this->config['prowlarrToken'];
 		try {
 			$headers = [];
+			$data = ['guid'=>$guid,'indexerId'=>$indexerId];
 			$options = $this->requestOptions($apiURL, 120, $this->config['prowlarrDisableCertCheck'], $this->config['prowlarrUseCustomCertificate']);
-			$response = Requests::get($endpoint, $headers, $options);
-			if ($response->success) {
-				$apiData = json_decode($response->body, true);
-				$api['content'] = $apiData;
-				unset($apiData);
+			$ch = curl_init($endpoint);
+			$payload = json_encode($data);
+			curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
+			curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
+			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+			$response = curl_exec($ch);
+			curl_close($ch);
+			if ($response) {
+				$api['content'] = $response;
 			}
 		} catch (Requests_Exception $e) {
 			$this->setLoggerChannel('Prowlarr')->error($e);
@@ -164,10 +175,8 @@ trait ProwlarrHomepageItem
 			return false;
 		};
 		$api['content'] = isset($api['content']) ? $api['content'] : false;
-		if ($api['content'] && $api['content']['result'] == 'success') {
+		if ($api['content']) {
 			$this->setAPIResponse('success', null, 200, $api);
-		} else if ($api['content']) {
-			$this->setAPIResponse('error', $api['content']['error'], 400, $api);
 		} else {
 			$this->setAPIResponse('error', 'Unknown error', 400, $api);
 		}

+ 1 - 1
api/v2/routes/homepage.php

@@ -526,7 +526,7 @@ $app->get('/homepage/prowlarr/{query}', function ($request, $response, $args) {
 $app->post('/homepage/prowlarr/download/', function ($request, $response, $args) {
 	$Organizr = ($request->getAttribute('Organizr')) ?? new Organizr();
 	$postData = $request->getParsedBody();
-	$Organizr->performProwlarrBackHoleDownload($postData['url']);
+	$Organizr->performProwlarrBackHoleDownload($postData['guid'], $postData['indexerId']);
 	$response->getBody()->write(jsonE($GLOBALS['api']));
 	return $response
 		->withHeader('Content-Type', 'application/json;charset=UTF-8')

+ 11 - 5
js/functions.js

@@ -9731,6 +9731,7 @@ function searchProwlarr(){
 	}
 	$.fn.dataTable.ext.errMode = 'none';
 	$('#prowlarrDataTable').DataTable().destroy();
+	let preferBlackholeDownload = activeInfo.settings.homepage.prowlarr.homepageProwlarrBackholeDownload
 	let prowlarrTable = $("#prowlarrDataTable")
 		.on( 'error.dt', function ( e, settings, techNote, message ) {
 			console.log( 'An error has been reported by DataTables: ', message );
@@ -9772,9 +9773,13 @@ function searchProwlarr(){
 				{ data: 'downloadUrl',
 					render: function ( data, type, row ) {
 						if ( type === 'display' || type === 'filter' ) {
-                            if(data !== null){
-								return '<a href="'+data+'" target="_blank"><i class="fa fa-download"></i></a>';
-							}else{
+            	if(data !== null){
+								if(preferBlackholeDownload === true && row.guid !== null){
+									return '<a onclick="prowlarrDownload(\''+row.guid+","+row.indexerId+'\');return false;" href="#"><i class="fa fa-cloud-download"></i></a>';
+								} else {
+									return '<a href="'+data+'" target="_blank"><i class="fa fa-download"></i></a>';
+								}
+							}	else{
 								return 'No Download Link';
 							}
 						}
@@ -9791,9 +9796,10 @@ function searchProwlarr(){
 		} );
 }
 function prowlarrDownload(url) {
-	let blackholeLink=url.substring(url.indexOf("/bh/"));
+	const args = url.split(",")
 	var post = {
-		url: blackholeLink
+		guid: args[0],
+		indexerId: args[1],
 	};
 	organizrAPI2('POST', 'api/v2/homepage/prowlarr/download/', post, true)
 		.success(function() {