John Alberts
7 years ago
16 changed files with 164 additions and 0 deletions
@ -0,0 +1,126 @@ |
|||||
|
<?php namespace App\SupportedApps; |
||||
|
|
||||
|
use GuzzleHttp\Exception\GuzzleException; |
||||
|
use GuzzleHttp\Client; |
||||
|
use Illuminate\Support\Facades\Log; |
||||
|
|
||||
|
class CouchPotato implements Contracts\Applications, Contracts\Livestats |
||||
|
{ |
||||
|
|
||||
|
private $_client; |
||||
|
|
||||
|
public function __construct() |
||||
|
{ |
||||
|
$this->_client = new Client( |
||||
|
['http_errors' => false, |
||||
|
'timeout' => 10] |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
public function defaultColour() |
||||
|
{ |
||||
|
return '#363840'; |
||||
|
} |
||||
|
public function icon() |
||||
|
{ |
||||
|
return 'supportedapps/CouchPotato.png'; |
||||
|
} |
||||
|
public function configDetails() |
||||
|
{ |
||||
|
return 'couchpotato'; |
||||
|
} |
||||
|
public function testConfig() |
||||
|
{ |
||||
|
$res = $this->sendRequest(); |
||||
|
if ($res == null) { |
||||
|
echo 'CouchPotato connection failed'; |
||||
|
return; |
||||
|
} |
||||
|
switch($res->getStatusCode()) { |
||||
|
case 200: |
||||
|
echo "Successfully connected to CouchPotato"; |
||||
|
break; |
||||
|
case 401: |
||||
|
echo 'Failed: Invalid credentials'; |
||||
|
break; |
||||
|
case 404: |
||||
|
echo 'Failed: Please make sure your URL is correct and includes the port'; |
||||
|
break; |
||||
|
case 409: |
||||
|
echo 'Failed: Incorrect session id'; |
||||
|
break; |
||||
|
default: |
||||
|
echo 'Something went wrong... Code: '.$res->getStatusCode(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function executeConfig() |
||||
|
{ |
||||
|
$html = ''; |
||||
|
$res = $this->sendRequest(); |
||||
|
if ($res == null) { |
||||
|
Log::debug('CouchPotato connection failed'); |
||||
|
return ''; |
||||
|
} |
||||
|
$data = json_decode($res->getBody()); |
||||
|
if (! isset($data->movies)) { |
||||
|
Log::debug('Failed to fetch data from CouchPotato'); |
||||
|
return ''; |
||||
|
} |
||||
|
$movies = $data->movies; |
||||
|
$wantedMovies = $availableMovies = 0; |
||||
|
foreach ($movies as $v) { |
||||
|
switch ($v->status) { |
||||
|
case 'active': |
||||
|
$wantedMovies++; |
||||
|
break; |
||||
|
case 'done': |
||||
|
$availableMovies++; |
||||
|
break; |
||||
|
default: |
||||
|
Log::warning('Unexpected CouchPotato status received: '.$v['status']); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$html = ' |
||||
|
<ul class="livestats"> |
||||
|
<li><span class="title">Wanted</span><sub>'.$wantedMovies.'</sub></li> |
||||
|
<li><span class="title">Available</span><sub>'.$availableMovies.'</sub></li> |
||||
|
</ul> |
||||
|
'; |
||||
|
$active = 'inactive'; |
||||
|
if (isset($this->config->aggressive_polling) && $this->config->aggressive_polling) { |
||||
|
$active = 'active'; |
||||
|
} |
||||
|
return json_encode(['status' => $active, 'html' => $html]);; |
||||
|
} |
||||
|
|
||||
|
private function sendRequest() |
||||
|
{ |
||||
|
$res = null; |
||||
|
try{ |
||||
|
$res = $this->_client->request( |
||||
|
'GET', |
||||
|
$this->getApiUrl() |
||||
|
); |
||||
|
}catch(\GuzzleHttp\Exception\BadResponseException $e){ |
||||
|
Log::error("Connection to {$e->getRequest()->getUrl()} failed"); |
||||
|
Log::debug($e->getMessage()); |
||||
|
$res = $e->getRequest(); |
||||
|
}catch(\GuzzleHttp\Exception\ConnectException $e) { |
||||
|
Log::error("CouchPotato connection refused"); |
||||
|
Log::debug($e->getMessage()); |
||||
|
} |
||||
|
return $res; |
||||
|
} |
||||
|
|
||||
|
private function getApiUrl() |
||||
|
{ |
||||
|
$url = $this->config->url; |
||||
|
$url = rtrim($url, '/'); |
||||
|
$apiUrl = $url.'/api/'.$this->config->apikey.'/movie.list'; |
||||
|
return $apiUrl; |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2> |
||||
|
<div class="items"> |
||||
|
<input type="hidden" name="config[enabled]" value="1" /> |
||||
|
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\CouchPotato" /> |
||||
|
<div class="input"> |
||||
|
<label>{{ __('app.apps.aggressive_polling') }}</label> |
||||
|
{!! Form::hidden('config[aggressive_polling', '0') !!} |
||||
|
<label class="switch"> |
||||
|
<?php |
||||
|
$checked = false; |
||||
|
if(isset($item->config->aggressive_polling) && (bool)$item->config->aggressive_polling === true) $checked = true; |
||||
|
$set_checked = ($checked) ? ' checked="checked"' : ''; |
||||
|
?> |
||||
|
<input type="checkbox" name="config[aggressive_polling]" value="1"<?php echo $set_checked;?> /> |
||||
|
<span class="slider round"></span> |
||||
|
</label> |
||||
|
</div> |
||||
|
<div class="input"> |
||||
|
<label>{{ __('app.apps.apikey') }}</label> |
||||
|
{!! Form::text('config[apikey]', null, array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} |
||||
|
</div> |
||||
|
<div class="input"> |
||||
|
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button> |
||||
|
</div> |
||||
|
</div> |
After Width: | Height: | Size: 26 KiB |
Loading…
Reference in new issue