mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 01:08:56 +00:00
Move Utility and Country into services
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace Blacklight;
|
||||
|
||||
use Blacklight\utility\Utility;
|
||||
|
||||
/**
|
||||
* Basic IRC client for fetching IRCScraper.
|
||||
@@ -556,7 +555,7 @@ class IRCClient
|
||||
|
||||
// Create SSL/TLS context if using secure connection
|
||||
$context = $this->_remote_tls
|
||||
? stream_context_create(Utility::streamSslContextOptions(true))
|
||||
? stream_context_create(streamSslContextOptions(true))
|
||||
: null;
|
||||
|
||||
$socket = stream_socket_client(
|
||||
|
||||
@@ -11,7 +11,6 @@ use App\Services\FanartTvService;
|
||||
use App\Services\ImdbScraper;
|
||||
use App\Services\TmdbClient;
|
||||
use App\Services\TvProcessing\Providers\TraktProvider;
|
||||
use Blacklight\utility\Utility;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
@@ -296,7 +295,7 @@ class Movie
|
||||
}
|
||||
}
|
||||
|
||||
$trailer = Utility::imdb_trailers($imdbId);
|
||||
$trailer = imdb_trailers($imdbId);
|
||||
if ($trailer) {
|
||||
MovieInfo::query()->where('imdbid', $imdbId)->update(['trailer' => $trailer]);
|
||||
|
||||
|
||||
+1
-2
@@ -4,7 +4,6 @@ namespace Blacklight;
|
||||
|
||||
use App\Extensions\util\PhpYenc;
|
||||
use App\Models\Settings;
|
||||
use Blacklight\utility\Utility;
|
||||
|
||||
/*
|
||||
* Class for connecting to the usenet, retrieving articles and article headers,
|
||||
@@ -1274,7 +1273,7 @@ class NNTP extends \Net_NNTP_Client
|
||||
// Attempt to connect to usenet.
|
||||
// Only create SSL context if using TLS/SSL transport
|
||||
$context = preg_match('/tls|ssl/', $transport)
|
||||
? stream_context_create(Utility::streamSslContextOptions())
|
||||
? stream_context_create(streamSslContextOptions())
|
||||
: null;
|
||||
|
||||
$socket = stream_socket_client(
|
||||
|
||||
@@ -7,7 +7,6 @@ namespace Blacklight;
|
||||
use App\Models\Release;
|
||||
use App\Models\Settings;
|
||||
use App\Services\PostProcessService;
|
||||
use Blacklight\utility\Utility;
|
||||
|
||||
/**
|
||||
* Gets information contained within the NZB.
|
||||
@@ -293,7 +292,7 @@ class NZBContents
|
||||
}
|
||||
|
||||
// Attempt to decompress the NZB file
|
||||
$nzbContents = Utility::unzipGzipFile($nzbPath);
|
||||
$nzbContents = unzipGzipFile($nzbPath);
|
||||
if (empty($nzbContents)) {
|
||||
if ($this->echooutput) {
|
||||
$perms = fileperms($nzbPath);
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace Blacklight;
|
||||
|
||||
use App\Models\UsenetGroup;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
@@ -149,7 +148,7 @@ class NZBExport
|
||||
}
|
||||
// If not, decompress it and create a file to store it in.
|
||||
} else {
|
||||
$nzbContents = Utility::unzipGzipFile($nzbFile);
|
||||
$nzbContents = unzipGzipFile($nzbFile);
|
||||
if (! $nzbContents) {
|
||||
if ($this->echoCLI) {
|
||||
echo 'Unable to export NZB with GUID: '.$release['guid'];
|
||||
|
||||
@@ -7,7 +7,6 @@ use App\Models\Settings;
|
||||
use App\Models\UsenetGroup;
|
||||
use App\Services\BlacklistService;
|
||||
use App\Services\Categorization\CategorizationService;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Str;
|
||||
@@ -123,7 +122,7 @@ class NZBImport
|
||||
if (File::isFile($nzbFile)) {
|
||||
// Get the contents of the NZB file as a string.
|
||||
if (Str::endsWith($nzbFile, '.nzb.gz')) {
|
||||
$nzbString = Utility::unzipGzipFile($nzbFile);
|
||||
$nzbString = unzipGzipFile($nzbFile);
|
||||
} else {
|
||||
$nzbString = File::get($nzbFile);
|
||||
}
|
||||
|
||||
+3
-4
@@ -9,7 +9,6 @@ use App\Models\ReleaseNfo;
|
||||
use App\Models\Settings;
|
||||
use App\Models\UsenetGroup;
|
||||
use App\Services\PostProcessService;
|
||||
use Blacklight\utility\Utility;
|
||||
use dariusiii\rarinfo\Par2Info;
|
||||
use dariusiii\rarinfo\SfvInfo;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
@@ -275,8 +274,8 @@ class Nfo
|
||||
// File/GetId3 work with files, so save to disk.
|
||||
File::put($tmpPath, $possibleNFO);
|
||||
|
||||
// Use 'file' command via Utility::fileInfo if available
|
||||
$result = Utility::fileInfo($tmpPath);
|
||||
// Use 'file' command via fileInfo if available
|
||||
$result = fileInfo($tmpPath);
|
||||
if (! empty($result)) {
|
||||
if (preg_match($this->_textFileRegex, $result)) {
|
||||
$isNfo = true;
|
||||
@@ -1214,7 +1213,7 @@ class Nfo
|
||||
public function cleanNfoContent(string $nfoContent): string
|
||||
{
|
||||
// Convert to UTF-8 if needed (CP437 is common for NFOs)
|
||||
$content = Utility::cp437toUTF($nfoContent);
|
||||
$content = cp437toUTF($nfoContent);
|
||||
|
||||
// Normalize line endings
|
||||
$content = str_replace(["\r\n", "\r"], "\n", $content);
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (see LICENSE.txt in the base directory. If
|
||||
* not, see:
|
||||
*
|
||||
* @link <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @author ruhllatio
|
||||
* @copyright 2015 nZEDb
|
||||
*/
|
||||
|
||||
namespace Blacklight\utility;
|
||||
|
||||
use App\Models\Country as CountryModel;
|
||||
|
||||
/**
|
||||
* Class Country.
|
||||
*/
|
||||
class Country
|
||||
{
|
||||
/**
|
||||
* Get a country code for a country name.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function countryCode(string $country)
|
||||
{
|
||||
if (\strlen($country) > 2) {
|
||||
$code = CountryModel::whereFullName($country)->orWhere('name', $country)->first(['iso_3166_2']);
|
||||
if ($code !== null && isset($code['iso_3166_2'])) {
|
||||
return $code['iso_3166_2'];
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -1,250 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Blacklight\utility;
|
||||
|
||||
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Process;
|
||||
|
||||
/**
|
||||
* Class Utility.
|
||||
*/
|
||||
class Utility
|
||||
{
|
||||
/**
|
||||
* Unzip a gzip file, return the output. Return false on error / empty.
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function unzipGzipFile(string $filePath)
|
||||
{
|
||||
$string = '';
|
||||
$gzFile = @gzopen($filePath, 'rb', 0);
|
||||
if ($gzFile) {
|
||||
while (! gzeof($gzFile)) {
|
||||
$temp = gzread($gzFile, 1024);
|
||||
// Check for empty string.
|
||||
// Without this the loop would be endless and consume 100% CPU.
|
||||
// Do not set $string empty here, as the data might still be good.
|
||||
if (! $temp) {
|
||||
break;
|
||||
}
|
||||
$string .= $temp;
|
||||
}
|
||||
gzclose($gzFile);
|
||||
}
|
||||
|
||||
return $string === '' ? false : $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array to be used with stream_context_create() to verify openssl certificates
|
||||
* when connecting to a tls or ssl connection when using stream functions (fopen/file_get_contents/etc).
|
||||
*
|
||||
* @param bool $forceIgnore Force ignoring of verification (useful for self-signed certs in development).
|
||||
* @return array Stream context options for SSL/TLS connections
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
public static function streamSslContextOptions(bool $forceIgnore = false): array
|
||||
{
|
||||
$cafile = config('nntmux_ssl.ssl_cafile', '');
|
||||
$capath = config('nntmux_ssl.ssl_capath', '');
|
||||
$hasCustomCerts = $cafile !== '' || $capath !== '';
|
||||
|
||||
// Base options - either insecure (no certs configured) or configured
|
||||
$options = [
|
||||
'verify_peer' => ! $forceIgnore && $hasCustomCerts && config('nntmux_ssl.ssl_verify_peer', false),
|
||||
'verify_peer_name' => ! $forceIgnore && $hasCustomCerts && config('nntmux_ssl.ssl_verify_host', false),
|
||||
'allow_self_signed' => $forceIgnore ? true : config('nntmux_ssl.ssl_allow_self_signed', true),
|
||||
];
|
||||
|
||||
// Add certificate paths if configured
|
||||
if ($hasCustomCerts && ! $forceIgnore) {
|
||||
if ($cafile !== '') {
|
||||
$options['cafile'] = $cafile;
|
||||
}
|
||||
if ($capath !== '') {
|
||||
$options['capath'] = $capath;
|
||||
}
|
||||
}
|
||||
|
||||
// Additional security options for modern TLS
|
||||
$options['crypto_method'] = STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT;
|
||||
$options['disable_compression'] = true; // Prevent CRIME attacks
|
||||
$options['SNI_enabled'] = true; // Enable Server Name Indication
|
||||
|
||||
// If we set the transport to tls and the server falls back to ssl,
|
||||
// the context options would be for tls and would not apply to ssl,
|
||||
// so set both tls and ssl context in case the server does not support tls.
|
||||
return ['tls' => $options, 'ssl' => $options];
|
||||
}
|
||||
|
||||
public static function getCoverURL(array $options = []): string
|
||||
{
|
||||
$defaults = [
|
||||
'id' => null,
|
||||
'suffix' => '-cover.jpg',
|
||||
'type' => '',
|
||||
];
|
||||
$options += $defaults;
|
||||
$fileSpecTemplate = '%s/%s%s';
|
||||
$fileSpec = '';
|
||||
|
||||
if (! empty($options['id']) && \in_array(
|
||||
$options['type'],
|
||||
['anime', 'audio', 'audiosample', 'book', 'console', 'games', 'movies', 'music', 'preview', 'sample', 'tvrage', 'video', 'xxx'],
|
||||
false
|
||||
)
|
||||
) {
|
||||
$fileSpec = sprintf($fileSpecTemplate, $options['type'], $options['id'], $options['suffix']);
|
||||
$fileSpec = file_exists(storage_path('covers/').$fileSpec) ? $fileSpec :
|
||||
sprintf($fileSpecTemplate, $options['type'], 'no', $options['suffix']);
|
||||
}
|
||||
|
||||
return $fileSpec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return file type/info using magic numbers.
|
||||
* Try using `file` program where available, fallback to using PHP's finfo class.
|
||||
*
|
||||
* @param string $path Path to the file / folder to check.
|
||||
* @return string File info. Empty string on failure.
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function fileInfo(string $path): string
|
||||
{
|
||||
$magicPath = config('nntmux_settings.magic_file_path');
|
||||
if ($magicPath !== null && Process::run('which file')->successful()) {
|
||||
$magicSwitch = " -m $magicPath";
|
||||
$output = runCmd('file'.$magicSwitch.' -b "'.$path.'"');
|
||||
} else {
|
||||
$fileInfo = $magicPath === null ? finfo_open(FILEINFO_RAW) : finfo_open(FILEINFO_RAW, $magicPath);
|
||||
|
||||
$output = finfo_file($fileInfo, $path);
|
||||
if (empty($output)) {
|
||||
$output = '';
|
||||
}
|
||||
finfo_close($fileInfo);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert Code page 437 chars to UTF.
|
||||
*/
|
||||
public static function cp437toUTF(string $string): string
|
||||
{
|
||||
return iconv('CP437', 'UTF-8//IGNORE//TRANSLIT', $string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches an embeddable video to a IMDB trailer from http://www.traileraddict.com.
|
||||
*/
|
||||
public static function imdb_trailers($imdbID): string
|
||||
{
|
||||
$xml = getRawHtml('https://api.traileraddict.com/?imdb='.$imdbID);
|
||||
if ($xml !== false && preg_match('#(v\.traileraddict\.com/\d+)#i', $xml, $html)) {
|
||||
return 'https://'.$html[1];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function showApiError(int $errorCode = 900, string $errorText = '')
|
||||
{
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
if ($errorText === '') {
|
||||
switch ($errorCode) {
|
||||
case 100:
|
||||
$errorText = 'Incorrect user credentials';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
case 101:
|
||||
$errorText = 'Account suspended';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 102:
|
||||
$errorText = 'Insufficient privileges/not authorized';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
case 103:
|
||||
$errorText = 'Registration denied';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 104:
|
||||
$errorText = 'Registrations are closed';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 105:
|
||||
$errorText = 'Invalid registration (Email Address Taken)';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 106:
|
||||
$errorText = 'Invalid registration (Email Address Bad Format)';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 107:
|
||||
$errorText = 'Registration Failed (Data error)';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 200:
|
||||
$errorText = 'Missing parameter';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 201:
|
||||
$errorText = 'Incorrect parameter';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 202:
|
||||
$errorText = 'No such function';
|
||||
$errorHeader = 'HTTP 1.1 404 Not Found';
|
||||
break;
|
||||
case 203:
|
||||
$errorText = 'Function not available';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 300:
|
||||
$errorText = 'No such item';
|
||||
$errorHeader = 'HTTP 1.1 404 Not Found';
|
||||
break;
|
||||
case 500:
|
||||
$errorText = 'Request limit reached';
|
||||
$errorHeader = 'HTTP 1.1 429 Too Many Requests';
|
||||
break;
|
||||
case 501:
|
||||
$errorText = 'Download limit reached';
|
||||
$errorHeader = 'HTTP 1.1 429 Too Many Requests';
|
||||
break;
|
||||
case 910:
|
||||
$errorText = 'API disabled';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
default:
|
||||
$errorText = 'Unknown error';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$response =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
|
||||
'<error code="'.$errorCode.'" description="'.$errorText."\"/>\n";
|
||||
|
||||
return response($response)->header('Content-type', 'text/xml')->header('Content-Length', strlen($response))->header('X-NNTmux', 'API ERROR ['.$errorCode.'] '.$errorText)->header('HTTP/1.1', $errorHeader);
|
||||
}
|
||||
|
||||
public static function getRange($tableName): LengthAwarePaginator
|
||||
{
|
||||
$range = DB::table($tableName);
|
||||
if ($tableName === 'xxxinfo') {
|
||||
$range->selectRaw('UNCOMPRESS(plot) AS plot');
|
||||
}
|
||||
|
||||
return $range->orderByDesc('created_at')->paginate(config('nntmux.items_per_page'));
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Country as CountryModel;
|
||||
use App\Models\Release;
|
||||
use Blacklight\NZB;
|
||||
use Blacklight\utility\Utility;
|
||||
use Blacklight\XXX;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Cookie\CookieJar;
|
||||
@@ -304,7 +304,7 @@ if (! function_exists('getStreamingZip')) {
|
||||
foreach ($guids as $guid) {
|
||||
$nzbPath = $nzb->NZBPath($guid);
|
||||
if ($nzbPath) {
|
||||
$nzbContents = Utility::unzipGzipFile($nzbPath);
|
||||
$nzbContents = unzipGzipFile($nzbPath);
|
||||
if ($nzbContents) {
|
||||
$filename = $guid;
|
||||
$r = Release::query()->where('guid', $guid)->first();
|
||||
@@ -682,3 +682,306 @@ if (! function_exists('getAvailableTimezones')) {
|
||||
return $timezones;
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('countryCode')) {
|
||||
/**
|
||||
* Get a country code for a country name.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
function countryCode(string $country)
|
||||
{
|
||||
if (\strlen($country) > 2) {
|
||||
$code = CountryModel::whereFullName($country)->orWhere('name', $country)->first(['iso_3166_2']);
|
||||
if ($code !== null && isset($code['iso_3166_2'])) {
|
||||
return $code['iso_3166_2'];
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('unzipGzipFile')) {
|
||||
/**
|
||||
* Unzip a gzip file, return the output. Return false on error / empty.
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
function unzipGzipFile(string $filePath)
|
||||
{
|
||||
$string = '';
|
||||
$gzFile = @gzopen($filePath, 'rb', 0);
|
||||
if ($gzFile) {
|
||||
while (! gzeof($gzFile)) {
|
||||
$temp = gzread($gzFile, 1024);
|
||||
// Check for empty string.
|
||||
// Without this the loop would be endless and consume 100% CPU.
|
||||
// Do not set $string empty here, as the data might still be good.
|
||||
if (! $temp) {
|
||||
break;
|
||||
}
|
||||
$string .= $temp;
|
||||
}
|
||||
gzclose($gzFile);
|
||||
}
|
||||
|
||||
return $string === '' ? false : $string;
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('streamSslContextOptions')) {
|
||||
/**
|
||||
* Creates an array to be used with stream_context_create() to verify openssl certificates
|
||||
* when connecting to a tls or ssl connection when using stream functions (fopen/file_get_contents/etc).
|
||||
*
|
||||
* @param bool $forceIgnore Force ignoring of verification (useful for self-signed certs in development).
|
||||
* @return array Stream context options for SSL/TLS connections
|
||||
*/
|
||||
function streamSslContextOptions(bool $forceIgnore = false): array
|
||||
{
|
||||
$cafile = config('nntmux_ssl.ssl_cafile', '');
|
||||
$capath = config('nntmux_ssl.ssl_capath', '');
|
||||
$hasCustomCerts = $cafile !== '' || $capath !== '';
|
||||
|
||||
// Base options - either insecure (no certs configured) or configured
|
||||
$options = [
|
||||
'verify_peer' => ! $forceIgnore && $hasCustomCerts && config('nntmux_ssl.ssl_verify_peer', false),
|
||||
'verify_peer_name' => ! $forceIgnore && $hasCustomCerts && config('nntmux_ssl.ssl_verify_host', false),
|
||||
'allow_self_signed' => $forceIgnore ? true : config('nntmux_ssl.ssl_allow_self_signed', true),
|
||||
];
|
||||
|
||||
// Add certificate paths if configured
|
||||
if ($hasCustomCerts && ! $forceIgnore) {
|
||||
if ($cafile !== '') {
|
||||
$options['cafile'] = $cafile;
|
||||
}
|
||||
if ($capath !== '') {
|
||||
$options['capath'] = $capath;
|
||||
}
|
||||
}
|
||||
|
||||
// Additional security options for modern TLS
|
||||
$options['crypto_method'] = STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT;
|
||||
$options['disable_compression'] = true; // Prevent CRIME attacks
|
||||
$options['SNI_enabled'] = true; // Enable Server Name Indication
|
||||
|
||||
// If we set the transport to tls and the server falls back to ssl,
|
||||
// the context options would be for tls and would not apply to ssl,
|
||||
// so set both tls and ssl context in case the server does not support tls.
|
||||
return ['tls' => $options, 'ssl' => $options];
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('getCoverURL')) {
|
||||
function getCoverURL(array $options = []): string
|
||||
{
|
||||
$defaults = [
|
||||
'id' => null,
|
||||
'suffix' => '-cover.jpg',
|
||||
'type' => '',
|
||||
];
|
||||
$options += $defaults;
|
||||
$fileSpecTemplate = '%s/%s%s';
|
||||
$fileSpec = '';
|
||||
|
||||
if (! empty($options['id']) && \in_array(
|
||||
$options['type'],
|
||||
['anime', 'audio', 'audiosample', 'book', 'console', 'games', 'movies', 'music', 'preview', 'sample', 'tvrage', 'video', 'xxx'],
|
||||
false
|
||||
)
|
||||
) {
|
||||
$fileSpec = sprintf($fileSpecTemplate, $options['type'], $options['id'], $options['suffix']);
|
||||
$fileSpec = file_exists(storage_path('covers/').$fileSpec) ? $fileSpec :
|
||||
sprintf($fileSpecTemplate, $options['type'], 'no', $options['suffix']);
|
||||
}
|
||||
|
||||
return $fileSpec;
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('fileInfo')) {
|
||||
/**
|
||||
* Return file type/info using magic numbers.
|
||||
* Try using `file` program where available, fallback to using PHP's finfo class.
|
||||
*
|
||||
* @param string $path Path to the file / folder to check.
|
||||
* @return string File info. Empty string on failure.
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
function fileInfo(string $path): string
|
||||
{
|
||||
$magicPath = config('nntmux_settings.magic_file_path');
|
||||
if ($magicPath !== null && \Illuminate\Support\Facades\Process::run('which file')->successful()) {
|
||||
$magicSwitch = " -m $magicPath";
|
||||
$output = runCmd('file'.$magicSwitch.' -b "'.$path.'"');
|
||||
} else {
|
||||
$fileInfo = $magicPath === null ? finfo_open(FILEINFO_RAW) : finfo_open(FILEINFO_RAW, $magicPath);
|
||||
|
||||
$output = finfo_file($fileInfo, $path);
|
||||
if (empty($output)) {
|
||||
$output = '';
|
||||
}
|
||||
finfo_close($fileInfo);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('cp437toUTF')) {
|
||||
/**
|
||||
* Convert Code page 437 chars to UTF.
|
||||
*/
|
||||
function cp437toUTF(string $string): string
|
||||
{
|
||||
return iconv('CP437', 'UTF-8//IGNORE//TRANSLIT', $string);
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('imdb_trailers')) {
|
||||
/**
|
||||
* Fetches an embeddable video to a IMDB trailer from http://www.traileraddict.com.
|
||||
*/
|
||||
function imdb_trailers($imdbID): string
|
||||
{
|
||||
$xml = getRawHtml('https://api.traileraddict.com/?imdb='.$imdbID);
|
||||
if ($xml !== false && preg_match('#(v\.traileraddict\.com/\d+)#i', $xml, $html)) {
|
||||
return 'https://'.$html[1];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('showApiError')) {
|
||||
function showApiError(int $errorCode = 900, string $errorText = '')
|
||||
{
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
if ($errorText === '') {
|
||||
switch ($errorCode) {
|
||||
case 100:
|
||||
$errorText = 'Incorrect user credentials';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
case 101:
|
||||
$errorText = 'Account suspended';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 102:
|
||||
$errorText = 'Insufficient privileges/not authorized';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
case 103:
|
||||
$errorText = 'Registration denied';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 104:
|
||||
$errorText = 'Registrations are closed';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 105:
|
||||
$errorText = 'Invalid registration (Email Address Taken)';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 106:
|
||||
$errorText = 'Invalid registration (Email Address Bad Format)';
|
||||
$errorHeader = 'HTTP 1.1 403 Forbidden';
|
||||
break;
|
||||
case 107:
|
||||
$errorText = 'Registration Failed (Data error)';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 200:
|
||||
$errorText = 'Missing parameter';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 201:
|
||||
$errorText = 'Incorrect parameter';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 202:
|
||||
$errorText = 'No such function';
|
||||
$errorHeader = 'HTTP 1.1 404 Not Found';
|
||||
break;
|
||||
case 203:
|
||||
$errorText = 'Function not available';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
case 300:
|
||||
$errorText = 'No such item';
|
||||
$errorHeader = 'HTTP 1.1 404 Not Found';
|
||||
break;
|
||||
case 500:
|
||||
$errorText = 'Request limit reached';
|
||||
$errorHeader = 'HTTP 1.1 429 Too Many Requests';
|
||||
break;
|
||||
case 501:
|
||||
$errorText = 'Download limit reached';
|
||||
$errorHeader = 'HTTP 1.1 429 Too Many Requests';
|
||||
break;
|
||||
case 910:
|
||||
$errorText = 'API disabled';
|
||||
$errorHeader = 'HTTP 1.1 401 Unauthorized';
|
||||
break;
|
||||
default:
|
||||
$errorText = 'Unknown error';
|
||||
$errorHeader = 'HTTP 1.1 400 Bad Request';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$response =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
|
||||
'<error code="'.$errorCode.'" description="'.$errorText."\"/>\n";
|
||||
|
||||
return response($response)->header('Content-type', 'text/xml')->header('Content-Length', strlen($response))->header('X-NNTmux', 'API ERROR ['.$errorCode.'] '.$errorText)->header('HTTP/1.1', $errorHeader);
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('getRange')) {
|
||||
function getRange($tableName): \Illuminate\Contracts\Pagination\LengthAwarePaginator
|
||||
{
|
||||
$range = \Illuminate\Support\Facades\DB::table($tableName);
|
||||
if ($tableName === 'xxxinfo') {
|
||||
$range->selectRaw('UNCOMPRESS(plot) AS plot');
|
||||
}
|
||||
|
||||
return $range->orderByDesc('created_at')->paginate(config('nntmux.items_per_page'));
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('isValidNewznabNzb')) {
|
||||
/**
|
||||
* Validate if the content is a valid Newznab NZB file.
|
||||
*
|
||||
* @param string $content The NZB file content
|
||||
* @return bool True if valid NZB, false otherwise
|
||||
*/
|
||||
function isValidNewznabNzb(string $content): bool
|
||||
{
|
||||
// Check if content starts with valid XML declaration and contains NZB namespace
|
||||
if (empty($content)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Try to load as XML
|
||||
libxml_use_internal_errors(true);
|
||||
$xml = @simplexml_load_string($content);
|
||||
|
||||
if ($xml === false) {
|
||||
libxml_clear_errors();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for NZB namespace or nzb root element
|
||||
$namespaces = $xml->getNamespaces(true);
|
||||
$hasNzbNamespace = isset($namespaces['']) && str_contains($namespaces[''], 'nzb');
|
||||
$isNzbRoot = strtolower($xml->getName()) === 'nzb';
|
||||
|
||||
libxml_clear_errors();
|
||||
|
||||
return $hasNzbNamespace || $isNzbRoot;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Http\Controllers\BasePageController;
|
||||
use Blacklight\Console;
|
||||
use Blacklight\Genres;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
@@ -22,7 +21,7 @@ class AdminConsoleController extends BasePageController
|
||||
|
||||
$meta_title = $title = 'Console List';
|
||||
|
||||
$consoleList = Utility::getRange('consoleinfo');
|
||||
$consoleList = getRange('consoleinfo');
|
||||
|
||||
return view('admin.console.index', compact('consoleList', 'title', 'meta_title'));
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Http\Controllers\BasePageController;
|
||||
use Blacklight\Genres;
|
||||
use Blacklight\Music;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
@@ -22,10 +21,10 @@ class AdminMusicController extends BasePageController
|
||||
$search = $request->input('musicsearch', '');
|
||||
|
||||
if (! empty($search)) {
|
||||
$musicList = Utility::getRange('musicinfo', $search);
|
||||
$musicList = getRange('musicinfo', $search);
|
||||
$lastSearch = $search;
|
||||
} else {
|
||||
$musicList = Utility::getRange('musicinfo');
|
||||
$musicList = getRange('musicinfo');
|
||||
$lastSearch = '';
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ use App\Models\UserDownload;
|
||||
use App\Models\UserRequest;
|
||||
use Blacklight\NZB;
|
||||
use Blacklight\Releases;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -73,10 +72,10 @@ class ApiController extends BasePageController
|
||||
$function = 'nzbAdd';
|
||||
break;
|
||||
default:
|
||||
return Utility::showApiError(202, 'No such function ('.$request->input('t').')');
|
||||
return showApiError(202, 'No such function ('.$request->input('t').')');
|
||||
}
|
||||
} else {
|
||||
return Utility::showApiError(200, 'Missing parameter (t)');
|
||||
return showApiError(200, 'Missing parameter (t)');
|
||||
}
|
||||
|
||||
$uid = $apiKey = $oldestGrabTime = $thisOldestTime = '';
|
||||
@@ -87,17 +86,17 @@ class ApiController extends BasePageController
|
||||
|
||||
if ($function !== 'c' && $function !== 'r') {
|
||||
if ($request->missing('apikey') || ($request->has('apikey') && empty($request->input('apikey')))) {
|
||||
return Utility::showApiError(200, 'Missing parameter (apikey)');
|
||||
return showApiError(200, 'Missing parameter (apikey)');
|
||||
}
|
||||
|
||||
$apiKey = $request->input('apikey');
|
||||
$res = User::getByRssToken($apiKey);
|
||||
if ($res === null) {
|
||||
return Utility::showApiError(100, 'Incorrect user credentials (wrong API key)');
|
||||
return showApiError(100, 'Incorrect user credentials (wrong API key)');
|
||||
}
|
||||
|
||||
if ($res->hasRole('Disabled')) {
|
||||
return Utility::showApiError(101);
|
||||
return showApiError(101);
|
||||
}
|
||||
|
||||
$uid = $res->id;
|
||||
@@ -116,7 +115,7 @@ class ApiController extends BasePageController
|
||||
$thisRequests = UserRequest::getApiRequests($uid);
|
||||
$grabs = UserDownload::getDownloadRequests($uid);
|
||||
if ($thisRequests > $maxRequests) {
|
||||
return Utility::showApiError(500, 'Request limit reached ('.$thisRequests.'/'.$maxRequests.')');
|
||||
return showApiError(500, 'Request limit reached ('.$thisRequests.'/'.$maxRequests.')');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,7 +264,7 @@ class ApiController extends BasePageController
|
||||
$this->addCoverURL(
|
||||
$relData,
|
||||
function ($release) {
|
||||
return Utility::getCoverURL(['type' => 'movies', 'id' => $release->imdbid]);
|
||||
return getCoverURL(['type' => 'movies', 'id' => $release->imdbid]);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -281,12 +280,12 @@ class ApiController extends BasePageController
|
||||
return redirect(url('/getnzb?r='.$apiKey.'&id='.$request->input('id').(($request->has('del') && $request->input('del') === '1') ? '&del=1' : '')));
|
||||
}
|
||||
|
||||
return Utility::showApiError(300, 'No such item (the guid you provided has no release in our database)');
|
||||
return showApiError(300, 'No such item (the guid you provided has no release in our database)');
|
||||
|
||||
// Get individual NZB details.
|
||||
case 'd':
|
||||
if ($request->missing('id')) {
|
||||
return Utility::showApiError(200, 'Missing parameter (guid is required for single release details)');
|
||||
return showApiError(200, 'Missing parameter (guid is required for single release details)');
|
||||
}
|
||||
|
||||
UserRequest::addApiRequest($apiKey, $request->getRequestUri());
|
||||
@@ -298,7 +297,7 @@ class ApiController extends BasePageController
|
||||
// Get an NFO file for an individual release.
|
||||
case 'n':
|
||||
if ($request->missing('id')) {
|
||||
return Utility::showApiError(200, 'Missing parameter (id is required for retrieving an NFO)');
|
||||
return showApiError(200, 'Missing parameter (id is required for retrieving an NFO)');
|
||||
}
|
||||
|
||||
UserRequest::addApiRequest($apiKey, $request->getRequestUri());
|
||||
@@ -313,12 +312,12 @@ class ApiController extends BasePageController
|
||||
}, $rel['searchname'].'.nfo', ['Content-type:' => 'application/octet-stream']);
|
||||
}
|
||||
|
||||
echo nl2br(Utility::cp437toUTF($data['nfo']));
|
||||
echo nl2br(cp437toUTF($data['nfo']));
|
||||
} else {
|
||||
return Utility::showApiError(300, 'Release does not have an NFO file associated.');
|
||||
return showApiError(300, 'Release does not have an NFO file associated.');
|
||||
}
|
||||
} else {
|
||||
return Utility::showApiError(300, 'Release does not exist.');
|
||||
return showApiError(300, 'Release does not exist.');
|
||||
}
|
||||
break;
|
||||
//
|
||||
@@ -352,7 +351,7 @@ class ApiController extends BasePageController
|
||||
return response('File is not an NZB file', 400);
|
||||
}
|
||||
// Check if the file is proper xml nzb file.
|
||||
if (! Utility::isValidNewznabNzb($nzbFile->getContent())) {
|
||||
if (! isValidNewznabNzb($nzbFile->getContent())) {
|
||||
return response('File is not a valid Newznab NZB file', 400);
|
||||
}
|
||||
if (! File::isDirectory(config('nntmux.nzb_upload_folder'))) {
|
||||
@@ -406,7 +405,7 @@ class ApiController extends BasePageController
|
||||
header('Content-type: application/json');
|
||||
}
|
||||
if ($response === false) {
|
||||
return Utility::showApiError(201);
|
||||
return showApiError(201);
|
||||
} else {
|
||||
header('Content-Length: '.\strlen($response));
|
||||
echo $response;
|
||||
@@ -461,9 +460,9 @@ class ApiController extends BasePageController
|
||||
$maxAge = -1;
|
||||
if ($request->has('maxage')) {
|
||||
if (! $request->filled('maxage')) {
|
||||
return Utility::showApiError(201, 'Incorrect parameter (maxage must not be empty)');
|
||||
return showApiError(201, 'Incorrect parameter (maxage must not be empty)');
|
||||
} elseif (! is_numeric($request->input('maxage'))) {
|
||||
return Utility::showApiError(201, 'Incorrect parameter (maxage must be numeric)');
|
||||
return showApiError(201, 'Incorrect parameter (maxage must be numeric)');
|
||||
} else {
|
||||
$maxAge = (int) $request->input('maxage');
|
||||
}
|
||||
@@ -541,7 +540,7 @@ class ApiController extends BasePageController
|
||||
public function verifyEmptyParameter(Request $request, string $parameter)
|
||||
{
|
||||
if ($request->has($parameter) && $request->isNotFilled($parameter)) {
|
||||
return Utility::showApiError(201, 'Incorrect parameter ('.$parameter.' must not be empty)');
|
||||
return showApiError(201, 'Incorrect parameter ('.$parameter.' must not be empty)');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ use App\Models\User;
|
||||
use App\Models\UserDownload;
|
||||
use App\Models\UsersRelease;
|
||||
use Blacklight\NZB;
|
||||
use Blacklight\utility\Utility;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
@@ -100,7 +99,7 @@ class GetNzbController extends BasePageController
|
||||
private function getUserDataFromSession()
|
||||
{
|
||||
if ($this->userdata->hasRole('Disabled')) {
|
||||
return Utility::showApiError(101);
|
||||
return showApiError(101);
|
||||
}
|
||||
|
||||
return [
|
||||
@@ -119,16 +118,16 @@ class GetNzbController extends BasePageController
|
||||
private function getUserDataFromRssToken(Request $request)
|
||||
{
|
||||
if ($request->missing('r')) {
|
||||
return Utility::showApiError(200);
|
||||
return showApiError(200);
|
||||
}
|
||||
|
||||
$user = User::getByRssToken($request->input('r'));
|
||||
if (! $user) {
|
||||
return Utility::showApiError(100);
|
||||
return showApiError(100);
|
||||
}
|
||||
|
||||
if ($user->hasRole('Disabled')) {
|
||||
return Utility::showApiError(101);
|
||||
return showApiError(101);
|
||||
}
|
||||
|
||||
return [
|
||||
@@ -150,7 +149,7 @@ class GetNzbController extends BasePageController
|
||||
{
|
||||
$requests = UserDownload::getDownloadRequests($uid);
|
||||
if ($requests > $maxDownloads) {
|
||||
return Utility::showApiError(501);
|
||||
return showApiError(501);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -166,7 +165,7 @@ class GetNzbController extends BasePageController
|
||||
$id = $request->input('id');
|
||||
|
||||
if (empty($id)) {
|
||||
return Utility::showApiError(200, 'Parameter id is required');
|
||||
return showApiError(200, 'Parameter id is required');
|
||||
}
|
||||
|
||||
// Remove .nzb suffix if present
|
||||
@@ -204,7 +203,7 @@ class GetNzbController extends BasePageController
|
||||
// Check if zip download would exceed limits
|
||||
$requests = UserDownload::getDownloadRequests($uid);
|
||||
if ($requests + $guidCount > $maxDownloads) {
|
||||
return Utility::showApiError(501);
|
||||
return showApiError(501);
|
||||
}
|
||||
|
||||
$zip = getStreamingZip($guids);
|
||||
@@ -254,13 +253,13 @@ class GetNzbController extends BasePageController
|
||||
// Get NZB file path and validate
|
||||
$nzbPath = (new NZB)->getNZBPath($releaseId);
|
||||
if (! File::exists($nzbPath)) {
|
||||
return Utility::showApiError(300, 'NZB file not found!');
|
||||
return showApiError(300, 'NZB file not found!');
|
||||
}
|
||||
|
||||
// Get release data
|
||||
$releaseData = Release::getByGuid($releaseId);
|
||||
if ($releaseData === null) {
|
||||
return Utility::showApiError(300, 'Release not found!');
|
||||
return showApiError(300, 'Release not found!');
|
||||
}
|
||||
|
||||
// Update statistics
|
||||
|
||||
@@ -4,7 +4,6 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Release;
|
||||
use App\Models\ReleaseNfo;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NfoController extends BasePageController
|
||||
@@ -24,7 +23,7 @@ class NfoController extends BasePageController
|
||||
$nfo = ReleaseNfo::getReleaseNfo($rel['id']);
|
||||
|
||||
if ($nfo !== null) {
|
||||
$nfo['nfoUTF'] = Utility::cp437toUTF($nfo['nfo']);
|
||||
$nfo['nfoUTF'] = cp437toUTF($nfo['nfo']);
|
||||
|
||||
$modal = $request->has('modal');
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ use App\Services\AdditionalProcessing\Config\ProcessingConfiguration;
|
||||
use App\Services\AdditionalProcessing\DTO\ReleaseProcessingContext;
|
||||
use App\Services\TempWorkspaceService;
|
||||
use Blacklight\Releases;
|
||||
use Blacklight\utility\Utility;
|
||||
use Exception;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -685,7 +684,7 @@ class AdditionalProcessingOrchestrator
|
||||
}
|
||||
|
||||
// Check file magic
|
||||
$output = Utility::fileInfo($filePath);
|
||||
$output = fileInfo($filePath);
|
||||
if (empty($output)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace App\Services\AdditionalProcessing;
|
||||
|
||||
use Blacklight\NZB;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -32,7 +31,7 @@ class NzbContentParser
|
||||
return ['contents' => [], 'error' => 'NZB not found for GUID: '.$guid];
|
||||
}
|
||||
|
||||
$nzbContents = Utility::unzipGzipFile($nzbPath);
|
||||
$nzbContents = unzipGzipFile($nzbPath);
|
||||
if (! $nzbContents) {
|
||||
// Try repair on raw file contents
|
||||
$nzbContents = $this->attemptRawRepair($nzbPath);
|
||||
|
||||
@@ -440,9 +440,9 @@ class ReleaseFileManager
|
||||
}
|
||||
|
||||
// Try CP437 (DOS encoding - common for scene NFOs with ASCII art)
|
||||
// Use the utility function if available
|
||||
if (class_exists('\Blacklight\utility\Utility') && method_exists('\Blacklight\utility\Utility', 'cp437toUTF')) {
|
||||
return \Blacklight\utility\Utility::cp437toUTF($data);
|
||||
// Use the cp437toUTF helper function
|
||||
if (function_exists('cp437toUTF')) {
|
||||
return cp437toUTF($data);
|
||||
}
|
||||
|
||||
// Fallback: try ISO-8859-1 (Latin-1)
|
||||
|
||||
@@ -10,7 +10,6 @@ use App\Models\TvInfo;
|
||||
use App\Models\Video;
|
||||
use Blacklight\ColorCLI;
|
||||
use Blacklight\Releases;
|
||||
use Blacklight\utility\Country;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
/**
|
||||
@@ -182,7 +181,7 @@ abstract class AbstractTvProvider extends BaseVideoProvider
|
||||
|
||||
// Check if the country is not a proper code and retrieve if not
|
||||
if ($show['country'] !== '' && \strlen($show['country']) > 2) {
|
||||
$show['country'] = Country::countryCode($show['country']);
|
||||
$show['country'] = countryCode($show['country']);
|
||||
}
|
||||
|
||||
// Check if video already exists based on site ID info
|
||||
@@ -257,7 +256,7 @@ abstract class AbstractTvProvider extends BaseVideoProvider
|
||||
public function update(int $videoId, array $show = []): void
|
||||
{
|
||||
if ($show['country'] !== '') {
|
||||
$show['country'] = Country::countryCode($show['country']);
|
||||
$show['country'] = countryCode($show['country']);
|
||||
}
|
||||
|
||||
$ifStringID = 'IF(%s = 0, %s, %s)';
|
||||
|
||||
@@ -7,7 +7,6 @@ use Blacklight\ColorCLI;
|
||||
use Blacklight\NZB;
|
||||
use Blacklight\ReleaseImage;
|
||||
use Blacklight\Releases;
|
||||
use Blacklight\utility\Utility;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
$dir = resource_path().'/movednzbs/';
|
||||
@@ -41,7 +40,7 @@ $itr = new RecursiveIteratorIterator($dirItr, RecursiveIteratorIterator::LEAVES_
|
||||
foreach ($itr as $filePath) {
|
||||
$guid = stristr($filePath->getFilename(), '.nzb.gz', true);
|
||||
if (File::isFile($filePath) && $guid) {
|
||||
$nzbfile = Utility::unzipGzipFile($filePath);
|
||||
$nzbfile = unzipGzipFile($filePath);
|
||||
$nzbContents = $nzb->nzbFileList($nzbfile, ['no-file-key' => false, 'strip-count' => true]);
|
||||
if (! $nzbfile || ! @simplexml_load_string($nzbfile) || count($nzbContents) === 0) {
|
||||
if ($argv[1] === 'move') {
|
||||
|
||||
Reference in New Issue
Block a user