'SabNZBD', 'enabled' => strpos('personal', $this->config['license']) !== false, 'image' => 'plugins/images/tabs/sabnzbd.png', 'category' => 'Downloader', 'settingsArray' => __FUNCTION__ ]; if ($infoOnly) { return $homepageInformation; } $homepageSettings = [ 'debug' => true, 'settings' => [ 'Enable' => [ $this->settingsOption('enable', 'homepageSabnzbdEnabled'), $this->settingsOption('auth', 'homepageSabnzbdAuth'), ], 'Connection' => [ $this->settingsOption('url', 'sabnzbdURL'), $this->settingsOption('token', 'sabnzbdToken'), $this->settingsOption('disable-cert-check', 'sabnzbdDisableCertCheck'), $this->settingsOption('use-custom-certificate', 'sabnzbdUseCustomCertificate'), ], 'API SOCKS' => [ $this->settingsOption('socks', 'sabnzbd'), $this->settingsOption('blank'), $this->settingsOption('enable', 'sabnzbdSocksEnabled'), $this->settingsOption('auth', 'sabnzbdSocksAuth'), ], 'Misc Options' => [ $this->settingsOption('refresh', 'sabnzbdRefresh'), $this->settingsOption('combine', 'sabnzbdCombine'), ], 'Test Connection' => [ $this->settingsOption('blank', null, ['label' => 'Please Save before Testing']), $this->settingsOption('test', 'sabnzbd'), ] ] ]; return array_merge($homepageInformation, $homepageSettings); } public function testConnectionSabNZBd() { $this->setLoggerChannel('Sabnzbd Homepage'); $this->logger->debug('Starting API Connection Test'); if (!empty($this->config['sabnzbdURL']) && !empty($this->config['sabnzbdToken'])) { $url = $this->qualifyURL($this->config['sabnzbdURL']); $url = $url . '/api?mode=queue&output=json&apikey=' . $this->config['sabnzbdToken']; try { $options = $this->requestOptions($url, null, $this->config['sabnzbdDisableCertCheck'], $this->config['sabnzbdUseCustomCertificate']); $response = Requests::get($url, [], $options); if ($response->success) { $data = json_decode($response->body, true); $status = 'success'; $responseCode = 200; $message = 'API Connection succeeded'; if (isset($data['error'])) { $status = 'error'; $responseCode = 500; $message = $data['error']; } $this->setAPIResponse($status, $message, $responseCode, $data); $this->logger->debug('API Connection Test was successful'); return true; } else { $this->setAPIResponse('error', $response->body, 500); $this->logger->debug('API Connection Test was unsuccessful'); return false; } } catch (Requests_Exception $e) { $this->logger->critical($e, [$url]); $this->setResponse(500, $e->getMessage()); return false; } } else { $this->logger->debug('URL and/or Token not setup'); $this->setAPIResponse('error', 'URL and/or Token not setup', 422); return 'URL and/or Token not setup'; } } public function sabNZBdHomepagePermissions($key = null) { $permissions = [ 'main' => [ 'enabled' => [ 'homepageSabnzbdEnabled' ], 'auth' => [ 'homepageSabnzbdAuth' ], 'not_empty' => [ 'sabnzbdURL', 'sabnzbdToken' ] ] ]; return $this->homepageCheckKeyPermissions($key, $permissions); } public function homepageOrdersabnzbd() { if ($this->homepageItemPermissions($this->sabNZBdHomepagePermissions('main'))) { $loadingBox = ($this->config['sabnzbdCombine']) ? '' : '

Loading Download Queue...

'; $builder = ($this->config['sabnzbdCombine']) ? 'buildDownloaderCombined(\'sabnzbd\');' : '$("#' . __FUNCTION__ . '").html(buildDownloader("sabnzbd"));'; return '
' . $loadingBox . '
'; } } public function getSabNZBdHomepageQueue() { $this->setLoggerChannel('Sabnzbd Homepage'); if (!$this->homepageItemPermissions($this->sabNZBdHomepagePermissions('main'), true)) { return false; } $url = $this->qualifyURL($this->config['sabnzbdURL']); $url = $url . '/api?mode=queue&output=json&apikey=' . $this->config['sabnzbdToken']; try { $options = $this->requestOptions($url, $this->config['sabnzbdRefresh'], $this->config['sabnzbdDisableCertCheck'], $this->config['sabnzbdUseCustomCertificate']); $response = Requests::get($url, [], $options); if ($response->success) { $api['content']['queueItems'] = json_decode($response->body, true); } } catch (Requests_Exception $e) { $this->logger->critical($e, [$url]); $this->setResponse(500, $e->getMessage()); return false; }; $url = $this->qualifyURL($this->config['sabnzbdURL']); $url = $url . '/api?mode=history&output=json&limit=100&apikey=' . $this->config['sabnzbdToken']; try { $options = $this->requestOptions($url, $this->config['sabnzbdRefresh'], $this->config['sabnzbdDisableCertCheck'], $this->config['sabnzbdUseCustomCertificate']); $response = Requests::get($url, array(), $options); if ($response->success) { $api['content']['historyItems'] = json_decode($response->body, true); } } catch (Requests_Exception $e) { $this->logger->critical($e, [$url]); $this->setResponse(500, $e->getMessage()); return false; }; $api['content'] = isset($api['content']) ? $api['content'] : false; $this->setAPIResponse('success', null, 200, $api); return $api; } public function pauseSabNZBdQueue($target = null) { $this->setLoggerChannel('Sabnzbd Homepage'); if (!$this->homepageItemPermissions($this->sabNZBdHomepagePermissions('main'), true)) { return false; } $url = $this->qualifyURL($this->config['sabnzbdURL']); $id = ($target !== '' && $target !== 'main' && isset($target)) ? 'mode=queue&name=pause&value=' . $target . '&' : 'mode=pause'; $url = $url . '/api?' . $id . '&output=json&apikey=' . $this->config['sabnzbdToken']; try { $options = $this->requestOptions($url, $this->config['sabnzbdRefresh'], $this->config['sabnzbdDisableCertCheck'], $this->config['sabnzbdUseCustomCertificate']); $response = Requests::get($url, [], $options); if ($response->success) { $api['content'] = json_decode($response->body, true); } } catch (Requests_Exception $e) { $this->logger->critical($e, [$url]); $this->setResponse(500, $e->getMessage()); return false; }; $api['content'] = isset($api['content']) ? $api['content'] : false; $this->setAPIResponse('success', null, 200, $api); return $api; } public function resumeSabNZBdQueue($target = null) { $this->setLoggerChannel('Sabnzbd Homepage'); if (!$this->homepageItemPermissions($this->sabNZBdHomepagePermissions('main'), true)) { return false; } $url = $this->qualifyURL($this->config['sabnzbdURL']); $id = ($target !== '' && $target !== 'main' && isset($target)) ? 'mode=queue&name=resume&value=' . $target . '&' : 'mode=resume'; $url = $url . '/api?' . $id . '&output=json&apikey=' . $this->config['sabnzbdToken']; try { $options = $this->requestOptions($url, $this->config['sabnzbdRefresh'], $this->config['sabnzbdDisableCertCheck'], $this->config['sabnzbdUseCustomCertificate']); $response = Requests::get($url, [], $options); if ($response->success) { $api['content'] = json_decode($response->body, true); } } catch (Requests_Exception $e) { $this->logger->critical($e, [$url]); $this->setResponse(500, $e->getMessage()); return false; }; $api['content'] = isset($api['content']) ? $api['content'] : false; $this->setAPIResponse('success', null, 200, $api); return $api; } }