فهرست منبع

sabnzbd controls from homepage

causefx 8 سال پیش
والد
کامیت
6d975ae640
5فایلهای تغییر یافته به همراه104 افزوده شده و 4 حذف شده
  1. 1 1
      api/functions/homepage-connect-functions.php
  2. 53 0
      api/functions/organizr-functions.php
  3. 13 0
      api/index.php
  4. 19 0
      js/custom.js
  5. 18 3
      js/functions.js

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

@@ -482,7 +482,7 @@ function embyConnect($action,$key=null,$skip=false){
 	}
 	return false;
 }
-function sabnzbdConnect() {
+function sabnzbdConnect($action=null) {
     if($GLOBALS['homepageSabnzbdEnabled'] && !empty($GLOBALS['sabnzbdURL']) && !empty($GLOBALS['sabnzbdToken']) && qualifyRequest($GLOBALS['homepageSabnzbdAuth'])){
         $url = qualifyURL($GLOBALS['sabnzbdURL']);
         $url = $url.'/api?mode=queue&output=json&apikey='.$GLOBALS['sabnzbdToken'];

+ 53 - 0
api/functions/organizr-functions.php

@@ -754,6 +754,59 @@ function getImage() {
 		die("Invalid Request");
 	}
 }
+function downloader($array){
+	switch ($array['data']['source']) {
+        case 'sabnzbd':
+			switch ($array['data']['action']) {
+                case 'resume':
+                case 'pause':
+                    sabnzbdAction($array['data']['action'],$array['data']['target']);
+                    break;
+
+                default:
+                    # code...
+                    break;
+            }
+            break;
+		case 'nzbget':
+
+			break;
+        default:
+            # code...
+            break;
+    }
+}
+function sabnzbdAction($action=null, $target=null) {
+    if($GLOBALS['homepageSabnzbdEnabled'] && !empty($GLOBALS['sabnzbdURL']) && !empty($GLOBALS['sabnzbdToken']) && qualifyRequest($GLOBALS['homepageSabnzbdAuth'])){
+        $url = qualifyURL($GLOBALS['sabnzbdURL']);
+        switch ($action) {
+            case 'pause':
+                $id = ($target !== '' && $target !== 'main' && isset($target)) ? 'mode=queue&name=pause&value='.$target.'&' : 'mode=pause';
+                $url = $url.'/api?'.$id.'&output=json&apikey='.$GLOBALS['sabnzbdToken'];
+                break;
+            case 'resume':
+                $id = ($target !== '' && $target !== 'main' && isset($target)) ? 'mode=queue&name=resume&value='.$target.'&' : 'mode=resume';
+                $url = $url.'/api?'.$id.'&output=json&apikey='.$GLOBALS['sabnzbdToken'];
+                break;
+            default:
+                # code...
+                break;
+        }
+
+        try{
+			$options = (localURL($url)) ? array('verify' => false ) : array();
+			$response = Requests::get($url, array(), $options);
+			if($response->success){
+				$api['content'] = json_decode($response->body, true);
+			}
+		}catch( Requests_Exception $e ) {
+			writeLog('error', 'SabNZBd Connect Function - Error: '.$e->getMessage(), 'SYSTEM');
+		};
+        $api['content'] = isset($api['content']) ? $api['content'] : false;
+        return $api;
+    }
+}
+
 /*
 function sendEmail($email = null, $username = "Organizr User", $subject, $body, $cc = null, $bcc = null){
 	try {

+ 13 - 0
api/index.php

@@ -815,6 +815,19 @@ switch ($function) {
                 break;
         }
         break;
+	case 'v1_downloader':
+		switch ($method) {
+			case 'POST':
+                $result['status'] = 'success';
+                $result['statusText'] = 'success';
+                $result['data'] = downloader($_POST);
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: '.$method;
+				break;
+		}
+		break;
     default:
         //No Function Available
         $result['status'] = 'error';

+ 19 - 0
js/custom.js

@@ -1630,6 +1630,25 @@ $(document).on("click", ".metadata-get", function(e) {
 	});
 	ajaxloader();
 
+});
+// sad play/resume
+$(document).on("click", ".downloader", function(e) {
+    var action = $(this).attr('data-action');
+    var source = $(this).attr('data-source');
+    var target = $(this).attr('data-target');
+    console.log(action);
+    console.log(source);
+    console.log(target);
+    ajaxloader(".content-wrap","in");
+	organizrAPI('POST','api/?v1/downloader',{action:action, source:source, target:target}).success(function(data) {
+		var response = JSON.parse(data);
+        console.log(response);
+		homepageDownloader(source);
+	}).fail(function(xhr) {
+		console.error("Organizr Function: API Connection Failed");
+	});
+	ajaxloader();
+
 });
 /* ===== Open-Close Right Sidebar ===== */
 

+ 18 - 3
js/functions.js

@@ -2011,10 +2011,13 @@ function buildDownloaderItem(array, source, type='none'){
 						return '<tr><td class="max-texts" lang="en">Nothing in queue</td></tr>';
 					}
 					$.each(array.queue.slots, function(i,v) {
+						var action = (v.status == "Downloading") ? 'pause' : 'resume';
+						var actionIcon = (v.status == "Downloading") ? 'play' : 'pause';
 						items += `
 						<tr>
 							<td class="max-texts">`+v.filename+`</td>
-                            <td class="hidden-xs">`+v.status+`</td>
+							<td class="hidden-xs">`+v.status+`</td>
+                            <td class="downloader mouse" data-target="`+v.nzo_id+`" data-source="sabnzbd" data-action="`+action+`"><i class="fa fa-`+actionIcon+`"></i></td>
                             <td class="hidden-xs"><span class="label label-info">`+v.cat+`</span></td>
                             <td class="hidden-xs">`+v.size+`</td>
                             <td class="text-right">
@@ -2059,16 +2062,28 @@ function buildDownloaderItem(array, source, type='none'){
 	return items;
 }
 function buildDownloader(array, source){
-	console.log(array);
 	var menu = `<ul class="nav customtab nav-tabs pull-right" role="tablist">`;
 	var listing = '';
 	var queueItems = (typeof array.content.queueItems !== 'undefined') ? array.content.queueItems : false;
 	var historyItems = (typeof array.content.historyItems !== 'undefined') ? array.content.historyItems : false;
 	var downloader = (queueItems || historyItems) ? true : false;
+	var state = '';
+	console.log(array);
 	console.log(queueItems);
 	console.log(historyItems);
 	console.log(downloader);
 	if(queueItems){
+		switch (source) {
+			case 'sabnzbd':
+				if(queueItems.queue.paused){
+					state = `<span class="downloader mouse" data-source="sabnzbd" data-action="resume" data-target="main"><i class="fa fa-pause"></i></span>`;
+				}else{
+					state = `<span class="downloader mouse" data-source="sabnzbd" data-action="pause" data-target="main"><i class="fa fa-play"></i></span>`;
+				}
+				break;
+			default:
+
+		}
 		menu += `
 			<li role="presentation" class="active"><a href="#`+source+`-queue" aria-controls="home" role="tab" data-toggle="tab" aria-expanded="true"><span class="visible-xs"><i class="ti-download"></i></span><span class="hidden-xs"> QUEUE</span></a></li>
 			`;
@@ -2103,7 +2118,7 @@ function buildDownloader(array, source){
 	<div class="row">
 		<div class="col-lg-12">
 	        <div class="white-box bg-info m-b-0 p-b-0 p-t-10 mailbox-widget">
-	            <h2 class="text-white m-0 pull-left text-uppercase">`+source+`</h2>
+	            <h2 class="text-white m-0 pull-left text-uppercase">`+state+` `+source+`</h2>
 	            `+menu+`
 				<div class="clearfix"></div>
 	        </div>