mirror of
https://github.com/linuxserver/Heimdall.git
synced 2025-12-02 13:09:53 +09:00
@@ -1,6 +1,7 @@
|
|||||||
<?php namespace App\SupportedApps;
|
<?php namespace App\SupportedApps;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
class Deluge implements Contracts\Applications {
|
use GuzzleHttp\Client;
|
||||||
|
class Deluge implements Contracts\Applications, Contracts\Livestats {
|
||||||
public function defaultColour()
|
public function defaultColour()
|
||||||
{
|
{
|
||||||
return '#357';
|
return '#357';
|
||||||
@@ -9,4 +10,100 @@ class Deluge implements Contracts\Applications {
|
|||||||
{
|
{
|
||||||
return 'supportedapps/deluge.png';
|
return 'supportedapps/deluge.png';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public function configDetails()
|
||||||
|
{
|
||||||
|
return 'deluge';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testConfig()
|
||||||
|
{
|
||||||
|
$res = $this->login()[0];
|
||||||
|
switch($res->getStatusCode()) {
|
||||||
|
case 200:
|
||||||
|
$data = json_decode($res->getBody());
|
||||||
|
if(!isset($data->result) || is_null($data->result) || $data->result == false) {
|
||||||
|
echo 'Failed: Invalid Credentials';
|
||||||
|
} else {
|
||||||
|
echo 'Successfully connected to the API';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 401:
|
||||||
|
echo 'Failed: Invalid credentials';
|
||||||
|
break;
|
||||||
|
case 404:
|
||||||
|
echo 'Failed: Please make sure your URL is correct and that there is a trailing slash';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
echo 'Something went wrong... Code: '.$res->getStatusCode();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function executeConfig()
|
||||||
|
{
|
||||||
|
$html = '';
|
||||||
|
$active = 'active';
|
||||||
|
$jar = $this->login()[1];
|
||||||
|
$res = $this->getDetails($jar);
|
||||||
|
$data = json_decode($res->getBody());
|
||||||
|
$download_rate = $data->result->stats->download_rate;
|
||||||
|
$upload_rate = $data->result->stats->upload_rate;
|
||||||
|
$seed_count = $data->result->filters->state[2];
|
||||||
|
$leech_count = $data->result->filters->state[1];
|
||||||
|
$html = '
|
||||||
|
<ul class="livestats">
|
||||||
|
<li><span class="title"><i class="fas fa-arrow-down"></i> '.$this->formatBytes($download_rate).'</span></li>
|
||||||
|
<li><span class="title"><i class="fas fa-arrow-up"></i> '.$this->formatBytes($upload_rate).'</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="livestats">
|
||||||
|
<li><span class="title">Leech: '.$leech_count[1].'</span></li>
|
||||||
|
<li><span class="title">Seed: '.$seed_count[1].'</span></li>
|
||||||
|
</ul>
|
||||||
|
';
|
||||||
|
return json_encode(['status' => $active, 'html' => $html]);
|
||||||
|
}
|
||||||
|
public function getDetails($jar)
|
||||||
|
{
|
||||||
|
$config = $this->config;
|
||||||
|
$url = $config->url;
|
||||||
|
$url = rtrim($url, '/');
|
||||||
|
$api_url = $url.'/json';
|
||||||
|
$client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]);
|
||||||
|
$res = $client->request('POST', $api_url, [
|
||||||
|
'body' => '{"method": "web.update_ui", "params": [["none"], {}], "id": 1}',
|
||||||
|
'cookies' => $jar,
|
||||||
|
'headers' => ['content-type' => 'application/json', 'Accept' => 'application/json']
|
||||||
|
]);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
public function login()
|
||||||
|
{
|
||||||
|
$config = $this->config;
|
||||||
|
$url = $config->url;
|
||||||
|
$password = $config->password;
|
||||||
|
$url = rtrim($url, '/');
|
||||||
|
$api_url = $url.'/json';
|
||||||
|
$jar = new \GuzzleHttp\Cookie\CookieJar();
|
||||||
|
$client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]);
|
||||||
|
$res = $client->request('POST', $api_url, [
|
||||||
|
'body' => '{"method": "auth.login", "params": ["'.$password.'"], "id": 1}',
|
||||||
|
'cookies' => $jar,
|
||||||
|
'headers' => ['content-type' => 'application/json', 'Accept' => 'application/json']
|
||||||
|
]);
|
||||||
|
return array($res,$jar);
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatBytes($bytes, $precision = 2) {
|
||||||
|
$units = array('B', 'KB', 'MB', 'GB', 'TB');
|
||||||
|
|
||||||
|
$bytes = max($bytes, 0);
|
||||||
|
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
|
||||||
|
$pow = min($pow, count($units) - 1);
|
||||||
|
|
||||||
|
// Uncomment one of the following alternatives
|
||||||
|
$bytes /= pow(1024, $pow);
|
||||||
|
// $bytes /= (1 << (10 * $pow));
|
||||||
|
|
||||||
|
return round($bytes, $precision) . ' ' . $units[$pow] . 'ps';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ Supported applications are recognized by the title of the application as entered
|
|||||||
|
|
||||||
**Enhanced**
|
**Enhanced**
|
||||||
- CouchPotato
|
- CouchPotato
|
||||||
|
- Deluge
|
||||||
- NZBGet
|
- NZBGet
|
||||||
- Pihole
|
- Pihole
|
||||||
- PlexPy
|
- PlexPy
|
||||||
@@ -45,7 +46,6 @@ Supported applications are recognized by the title of the application as entered
|
|||||||
- AirSonic
|
- AirSonic
|
||||||
- Booksonic
|
- Booksonic
|
||||||
- Cardigann
|
- Cardigann
|
||||||
- Deluge
|
|
||||||
- DokuWiki
|
- DokuWiki
|
||||||
- Duplicati
|
- Duplicati
|
||||||
- Emby
|
- Emby
|
||||||
|
|||||||
11
resources/views/supportedapps/deluge.blade.php
Normal file
11
resources/views/supportedapps/deluge.blade.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
|
||||||
|
<div class="items">
|
||||||
|
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Deluge" />
|
||||||
|
<div class="input">
|
||||||
|
<label>{{ __('app.apps.password') }}</label>
|
||||||
|
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||||
|
</div>
|
||||||
|
<div class="input">
|
||||||
|
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user