Browse Source

Merge pull request #1206 from rix1337/home_jdownloader

[Homepage] JDownloader integration
causefx 6 years ago
parent
commit
8f5e8732ce

+ 5 - 0
api/config/default.php

@@ -57,6 +57,8 @@ return array(
 	'couchpotatoToken' => '',
 	'sickrageURL' => '',
 	'sickrageToken' => '',
+	'jdownloaderURL' => '',
+	'jdownloaderCombine' => false,
 	'sabnzbdURL' => '',
 	'sabnzbdToken' => '',
 	'sabnzbdCombine' => false,
@@ -101,6 +103,8 @@ return array(
 	'homepagCustomHTMLtwoAuth' => '1',
 	'homepageDelugeEnabled' => false,
 	'homepageDelugeAuth' => '1',
+    'homepageJdownloaderEnabled' => false,
+	'homepageJdownloaderAuth' => '1',
 	'homepageSabnzbdEnabled' => false,
 	'homepageSabnzbdAuth' => '1',
 	'homepageSonarrEnabled' => false,
@@ -152,6 +156,7 @@ return array(
 	'homepageOrderrTorrent' => '15',
 	'homepageOrderdownloader' => '16',
 	'homepageOrderhealthchecks' => '17',
+    "homepageOrderjdownloader" => '18',
 	'homepageShowStreamNames' => false,
 	'homepageShowStreamNamesAuth' => '1',
 	'homepageStreamRefresh' => '60000',

+ 60 - 0
api/functions/homepage-connect-functions.php

@@ -27,6 +27,9 @@ function homepageConnect($array)
 		case 'getEmbyMetadata':
 			return (qualifyRequest($GLOBALS['homepageEmbyAuth']) && $GLOBALS['homepageEmbyEnabled']) ? embyConnect('metadata', $array['data']['key'], true) : false;
 			break;
+		case 'getJdownloader':
+			return jdownloaderConnect();
+			break;
 		case 'getSabnzbd':
 			return sabnzbdConnect();
 			break;
@@ -732,6 +735,47 @@ function embyConnect($action, $key = null, $skip = false)
 	return false;
 }
 
+function jdownloaderConnect()
+{
+    if ($GLOBALS['homepageJdownloaderEnabled'] && !empty($GLOBALS['jdownloaderURL']) && qualifyRequest($GLOBALS['homepageJdownloaderAuth'])) {
+        $url = qualifyURL($GLOBALS['jdownloaderURL']);
+        $url = $url . '/';
+        try {
+            $options = (localURL($url)) ? array('verify' => false) : array();
+            $response = Requests::get($url, array(), $options);
+            if ($response->success) {
+                $temp = json_decode($response->body, true);
+                $packages = $temp['packages'];
+                if ($packages['downloader']) {
+                    $api['content']['queueItems'] = $packages['downloader'];
+                } else {
+                    $api['content']['queueItems'] = [];
+                }
+
+                $grabbed = array();
+                if ($packages['linkgrabber_decrypted']) {
+                    $grabbed = array_merge($grabbed, $packages['linkgrabber_decrypted']);
+                }
+                if ($packages['linkgrabber_failed']) {
+                    $grabbed = array_merge($grabbed, $packages['linkgrabber_failed']);
+                }
+                if ($packages['linkgrabber_offline']) {
+                    $grabbed = array_merge($grabbed, $packages['linkgrabber_offline']);
+                }
+                $api['content']['grabberItems'] = $grabbed;
+
+                $status = array($temp['downloader_state'], $temp['grabber_collecting'], $temp['update_ready']);
+                $api['content']['$status'] = $status;
+            }
+        } catch (Requests_Exception $e) {
+            writeLog('error', 'JDownloader Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
+        };
+        $api['content'] = isset($api['content']) ? $api['content'] : false;
+        return $api;
+    }
+    return false;
+}
+
 function sabnzbdConnect()
 {
 	if ($GLOBALS['homepageSabnzbdEnabled'] && !empty($GLOBALS['sabnzbdURL']) && !empty($GLOBALS['sabnzbdToken']) && qualifyRequest($GLOBALS['homepageSabnzbdAuth'])) {
@@ -2402,6 +2446,22 @@ function testAPIConnection($array)
 				return 'URL/s and/or Token/s not setup';
 			}
 			break;
+        case 'jdownloader':
+            if (!empty($GLOBALS['jdownloaderURL'])) {
+                $url = qualifyURL($GLOBALS['jdownloaderURL']);
+                try {
+                    $options = (localURL($url)) ? array('verify' => false) : array();
+                    $response = Requests::get($url, array(), $options);
+                    if ($response->success) {
+                        return true;
+                    }
+                } catch (Requests_Exception $e) {
+                    return $e->getMessage();
+                };
+            } else {
+                return 'URL and/or Token not setup';
+            }
+            break;
 		case 'sabnzbd':
 			if (!empty($GLOBALS['sabnzbdURL']) && !empty($GLOBALS['sabnzbdToken'])) {
 				$url = qualifyURL($GLOBALS['sabnzbdURL']);

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

@@ -6,6 +6,7 @@ function homepageOrder()
 		"homepageOrdercustomhtml" => $GLOBALS['homepageOrdercustomhtml'],
 		"homepageOrdercustomhtmlTwo" => $GLOBALS['homepageOrdercustomhtmlTwo'],
 		"homepageOrdernzbget" => $GLOBALS['homepageOrdernzbget'],
+		"homepageOrderjdownloader" => $GLOBALS['homepageOrderjdownloader'],
 		"homepageOrdersabnzbd" => $GLOBALS['homepageOrdersabnzbd'],
 		"homepageOrderplexnowplaying" => $GLOBALS['homepageOrderplexnowplaying'],
 		"homepageOrderplexrecent" => $GLOBALS['homepageOrderplexrecent'],
@@ -173,6 +174,30 @@ function buildHomepageItem($homepageItem)
 				}
 			}
 			break;
+        case 'homepageOrderjdownloader':
+            if ($GLOBALS['homepageJdownloaderEnabled'] && qualifyRequest($GLOBALS['homepageJdownloaderAuth'])) {
+                if ($GLOBALS['jdownloaderCombine']) {
+                    $item .= '
+					<script>
+					// JDownloader
+					buildDownloaderCombined(\'jdownloader\');
+					homepageDownloader("jdownloader", "' . $GLOBALS['homepageDownloadRefresh'] . '");
+					// End JDownloader
+					</script>
+					';
+                } else {
+                    $item .= '<div class="white-box"><h2 class="text-center" lang="en">Loading Download Queue...</h2></div>';
+                    $item .= '
+					<script>
+					// JDownloader
+					$("#' . $homepageItem . '").html(buildDownloader("jdownloader"));
+					homepageDownloader("jdownloader", "' . $GLOBALS['homepageDownloadRefresh'] . '");
+					// End JDownloader
+					</script>
+					';
+                }
+            }
+            break;
 		case 'homepageOrdersabnzbd':
 			if ($GLOBALS['homepageSabnzbdEnabled'] && qualifyRequest($GLOBALS['homepageSabnzbdAuth'])) {
 				if ($GLOBALS['sabnzbdCombine']) {
@@ -975,6 +1000,68 @@ function getHomepageList()
 				)
 			)
 		),
+        array(
+            'name' => 'JDownloader',
+            'enabled' => (strpos('personal', $GLOBALS['license']) !== false) ? true : false,
+            'image' => 'plugins/images/tabs/jdownloader.png',
+            'category' => 'Downloader',
+            'settings' => array(
+                'Enable' => array(
+                    array(
+                        'type' => 'switch',
+                        'name' => 'homepageJdownloaderEnabled',
+                        'label' => 'Enable',
+                        'value' => $GLOBALS['homepageJdownloaderEnabled']
+                    ),
+                    array(
+                        'type' => 'select',
+                        'name' => 'homepageJdownloaderAuth',
+                        'label' => 'Minimum Authentication',
+                        'value' => $GLOBALS['homepageJdownloaderAuth'],
+                        'options' => $groups
+                    )
+                ),
+                'Connection' => array(
+                    array(
+                        'type' => 'input',
+                        'name' => 'jdownloaderURL',
+                        'label' => 'URL',
+                        'value' => $GLOBALS['jdownloaderURL'],
+                        'help' => 'Please make sure to use local IP address and port - You also may use local dns name too.',
+                        'placeholder' => 'http(s)://hostname:port'
+                    )
+                ),
+                'Misc Options' => array(
+                    array(
+                        'type' => 'select',
+                        'name' => 'homepageDownloadRefresh',
+                        'label' => 'Refresh Seconds',
+                        'value' => $GLOBALS['homepageDownloadRefresh'],
+                        'options' => optionTime()
+                    ),
+                    array(
+                        'type' => 'switch',
+                        'name' => 'jdownloaderCombine',
+                        'label' => 'Add to Combined Downloader',
+                        'value' => $GLOBALS['jdownloaderCombine']
+                    ),
+                ),
+                'Test Connection' => array(
+                    array(
+                        'type' => 'blank',
+                        'label' => 'Please Save before Testing'
+                    ),
+                    array(
+                        'type' => 'button',
+                        'label' => '',
+                        'icon' => 'fa fa-flask',
+                        'class' => 'pull-right',
+                        'text' => 'Test Connection',
+                        'attr' => 'onclick="testAPIConnection(\'jdownloader\')"'
+                    ),
+                )
+            )
+        ),
 		array(
 			'name' => 'SabNZBD',
 			'enabled' => (strpos('personal', $GLOBALS['license']) !== false) ? true : false,
@@ -2228,6 +2315,13 @@ function buildHomepageSettings()
 					$class .= ' faded';
 				}
 				break;
+            case 'homepageOrderjdownloader':
+                $class = 'bg-sab';
+                $image = 'plugins/images/tabs/jdownloader.png';
+                if (!$GLOBALS['homepageJdownloaderEnabled']) {
+                    $class .= ' faded';
+                }
+                break;
 			case 'homepageOrdersabnzbd':
 				$class = 'bg-sab';
 				$image = 'plugins/images/tabs/sabnzbd.png';
@@ -2290,7 +2384,7 @@ function buildHomepageSettings()
 			case 'homepageOrderdownloader':
 				$class = 'bg-inverse';
 				$image = 'plugins/images/tabs/downloader.png';
-				if (!$GLOBALS['sabnzbdCombine'] && !$GLOBALS['nzbgetCombine'] && !$GLOBALS['rTorrentCombine'] && !$GLOBALS['delugeCombine'] && !$GLOBALS['transmissionCombine'] && !$GLOBALS['qBittorrentCombine']) {
+				if (!$GLOBALS['jdownloaderCombine'] && !$GLOBALS['sabnzbdCombine'] && !$GLOBALS['nzbgetCombine'] && !$GLOBALS['rTorrentCombine'] && !$GLOBALS['delugeCombine'] && !$GLOBALS['transmissionCombine'] && !$GLOBALS['qBittorrentCombine']) {
 					$class .= ' faded';
 				}
 				break;

+ 54 - 0
js/functions.js

@@ -1894,6 +1894,8 @@ function checkTabHomepageItem(id, name, url, urlLocal){
         addEditHomepageItem(id,'Plex');
     }else if(name.includes('emby') || url.includes('emby') || urlLocal.includes('emby')){
         addEditHomepageItem(id,'Emby');
+    }else if(name.includes('jdownloader') || url.includes('jdownloader') || urlLocal.includes('jdownloader')){
+        addEditHomepageItem(id,'jDownloader');
     }else if(name.includes('sab') || url.includes('sab') || urlLocal.includes('sab')){
         addEditHomepageItem(id,'SabNZBD');
     }else if(name.includes('nzbget') || url.includes('nzbget') || urlLocal.includes('nzbget')){
@@ -4903,6 +4905,53 @@ function buildDownloaderItem(array, source, type='none'){
     var history = '';
     var count = 0;
 	switch (source) {
+        case 'jdownloader':
+            if(array.content === false){
+                queue = '<tr><td class="max-texts" lang="en">Connection Error to ' + source + '</td></tr>';
+                break;
+            }
+
+            /*
+            if(array.content.$status[0] != 'RUNNING'){
+                var state = `<a href="#"><span class="downloader mouse" data-source="jdownloader" data-action="resume" data-target="main"><i class="fa fa-play"></i></span></a>`;
+                var active = 'grayscale';
+            }else{
+                var state = `<a href="#"><span class="downloader mouse" data-source="jdownloader" data-action="pause" data-target="main"><i class="fa fa-pause"></i></span></a>`;
+                var active = '';
+            }
+            $('.jdownloader-downloader-action').html(state);
+            */
+
+            if(array.content.queueItems.length == 0){
+                queue = '<tr><td class="max-texts" lang="en">Nothing in queue</td></tr>';
+            }
+            $.each(array.content.queueItems, function(i,v) {
+                count = count + 1;
+                queue += `
+                <tr>
+                    <td class="max-texts">`+v.name+`</td>
+                    <td class="hidden-xs">`+v.speed+`</td>
+                    <td class="hidden-xs" alt="`+v.done+`">`+v.size+`</td>
+                    <td class="hidden-xs">`+v.eta+`</td>
+                    <td class="text-right">
+                        <div class="progress progress-lg m-b-0">
+                            <div class="progress-bar progress-bar-info" style="width: `+v.percentage+`%;" role="progressbar">`+v.percentage+`%</div>
+                        </div>
+                    </td>
+                </tr>
+                `;
+            });
+            if(array.content.grabberItems.length == 0){
+                history = '<tr><td class="max-texts" lang="en">Nothing in Linkgrabbber</td></tr>';
+            }
+            $.each(array.content.grabberItems, function(i,v) {
+                history += `
+                <tr>
+                    <td class="max-texts">`+ v.name+`</td>
+                </tr>
+                `;
+            });
+            break;
 		case 'sabnzbd':
             if(array.content === false){
                 queue = '<tr><td class="max-texts" lang="en">Connection Error to ' + source + '</td></tr>';
@@ -5216,6 +5265,7 @@ function buildDownloader(source){
     var queueButton = 'QUEUE';
     var historyButton = 'HISTORY';
     switch (source) {
+        case 'jdownloader':
         case 'sabnzbd':
         case 'nzbget':
             var queue = true;
@@ -5311,6 +5361,7 @@ function buildDownloaderCombined(source){
     var queueButton = 'QUEUE';
     var historyButton = 'HISTORY';
     switch (source) {
+        case 'jdownloader':
         case 'sabnzbd':
         case 'nzbget':
             var queue = true;
@@ -5640,6 +5691,9 @@ function homepageDownloader(type, timeout){
 	var timeout = (typeof timeout !== 'undefined') ? timeout : activeInfo.settings.homepage.refresh.homepageDownloadRefresh;
 	//if(isHidden()){ return; }
 	switch (type) {
+        case 'jdownloader':
+            var action = 'getJdownloader';
+            break;
 		case 'sabnzbd':
 			var action = 'getSabnzbd';
 			break;

BIN
plugins/images/tabs/jdownloader.png