diff --git a/.gitignore b/.gitignore index b0dd8bb..7a3db24 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ coverage/ bower_components/ config.yml docs/ +clover.xml diff --git a/.travis.yml b/.travis.yml index d12f0db..9f514fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,3 +3,5 @@ install: - composer install --no-dev before_install: - composer selfupdate +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..898a247 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,6 @@ +## Report a bug +Before opening a new issue, make sure that: + +* It has not already been [reported](https://github.com/Rudloff/alltube/issues). +* You read the [README](README.md) and the [FAQ](FAQ.md). +* You can provide **logs**. diff --git a/Gruntfile.js b/Gruntfile.js index 76ec640..6e13bd6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -77,6 +77,19 @@ module.exports = function (grunt) { directory: 'classes/,controllers/,tests/' } } + }, + jsonlint: { + manifests: { + src: ['*.json', '*.webapp'], + options: { + format: true + } + } + }, + fixpack: { + package: { + src: 'package.json' + } } } ); @@ -90,9 +103,11 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-compress'); grunt.loadNpmTasks('grunt-jslint'); grunt.loadNpmTasks('grunt-phpdocumentor'); + grunt.loadNpmTasks('grunt-jsonlint'); + grunt.loadNpmTasks('grunt-fixpack'); grunt.registerTask('default', ['uglify', 'cssmin']); - grunt.registerTask('lint', ['phpcs', 'jslint']); + grunt.registerTask('lint', ['jslint', 'fixpack', 'jsonlint', 'phpcs']); grunt.registerTask('test', ['phpunit']); grunt.registerTask('doc', ['phpdocumentor']); grunt.registerTask('release', ['default', 'githash', 'compress']); diff --git a/bower.json b/bower.json index f367807..8c7ffdb 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { - "name": "alltube", - "dependencies": { - "opensans-googlefont": "*" - } + "name": "alltube", + "dependencies": { + "opensans-googlefont": "*" + } } diff --git a/classes/Config.php b/classes/Config.php index c86f418..208e85b 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -1,76 +1,94 @@ file = $yamlfile; if (is_file($yamlfile)) { $yaml = Yaml::parse(file_get_contents($yamlfile)); if (isset($yaml) && is_array($yaml)) { @@ -87,20 +105,25 @@ class Config } /** - * Get singleton instance + * Get singleton instance. + * + * @param string $yamlfile YAML config file name * * @return Config */ - public static function getInstance() + public static function getInstance($yamlfile = 'config.yml') { - if (is_null(self::$instance)) { - self::$instance = new Config(); + $yamlfile = __DIR__.'/../'.$yamlfile; + if (is_null(self::$instance) || self::$instance->file != $yamlfile) { + self::$instance = new self($yamlfile); } + return self::$instance; } /** - * Destroy singleton instance + * Destroy singleton instance. + * * @return void */ public static function destroyInstance() diff --git a/classes/VideoDownload.php b/classes/VideoDownload.php index 5023a20..e497113 100644 --- a/classes/VideoDownload.php +++ b/classes/VideoDownload.php @@ -1,21 +1,19 @@ procBuilder = new ProcessBuilder(); $this->procBuilder->setPrefix( array_merge( - array($this->config->python, $this->config->youtubedl), + [$this->config->python, $this->config->youtubedl], $this->config->params ) ); } /** - * List all extractors + * List all extractors. * * @return string[] Extractors * */ public function listExtractors() { $this->procBuilder->setArguments( - array( - '--list-extractors' - ) + [ + '--list-extractors', + ] ); $process = $this->procBuilder->getProcess(); $process->run(); + return explode(PHP_EOL, trim($process->getOutput())); } /** - * Get all information about a video + * Get all information about a video. * * @param string $url URL of page * @param string $format Format to use for the video @@ -57,10 +56,10 @@ class VideoDownload public function getJSON($url, $format = null) { $this->procBuilder->setArguments( - array( + [ '--dump-json', - $url - ) + $url, + ] ); if (isset($format)) { $this->procBuilder->add('-f '.$format); @@ -75,7 +74,7 @@ class VideoDownload } /** - * Get URL of video from URL of page + * Get URL of video from URL of page. * * @param string $url URL of page * @param string $format Format to use for the video @@ -85,10 +84,10 @@ class VideoDownload public function getURL($url, $format = null) { $this->procBuilder->setArguments( - array( + [ '--get-url', - $url - ) + $url, + ] ); if (isset($format)) { $this->procBuilder->add('-f '.$format); @@ -103,7 +102,7 @@ class VideoDownload } /** - * Get filename of video file from URL of page + * Get filename of video file from URL of page. * * @param string $url URL of page * @param string $format Format to use for the video @@ -113,10 +112,10 @@ class VideoDownload public function getFilename($url, $format = null) { $this->procBuilder->setArguments( - array( + [ '--get-filename', - $url - ) + $url, + ] ); if (isset($format)) { $this->procBuilder->add('-f '.$format); @@ -131,7 +130,7 @@ class VideoDownload } /** - * Get filename of audio from URL of page + * Get filename of audio from URL of page. * * @param string $url URL of page * @param string $format Format to use for the video @@ -151,7 +150,7 @@ class VideoDownload } /** - * Get audio stream of converted video + * Get audio stream of converted video. * * @param string $url URL of page * @param string $format Format to use for the video @@ -172,14 +171,14 @@ class VideoDownload $video->http_headers->{'User-Agent'} ); $avconvProc = ProcessBuilder::create( - array( + [ $this->config->avconv, '-v', 'quiet', '-i', '-', '-f', 'mp3', '-vn', - 'pipe:1' - ) + 'pipe:1', + ] ); if (parse_url($video->url, PHP_URL_SCHEME) == 'rtmp') { @@ -187,13 +186,13 @@ class VideoDownload throw(new \Exception('Can\'t find rtmpdump')); } $builder = new ProcessBuilder( - array( + [ $this->config->rtmpdump, '-q', '-r', $video->url, - '--pageUrl', $video->webpage_url - ) + '--pageUrl', $video->webpage_url, + ] ); if (isset($video->player_url)) { $builder->add('--swfVfy'); @@ -226,19 +225,20 @@ class VideoDownload $chain = new Chain( ProcessBuilder::create( array_merge( - array( + [ $this->config->curl, '--silent', '--location', '--user-agent', $video->http_headers->{'User-Agent'}, - $video->url - ), + $video->url, + ], $this->config->curl_params ) ) ); $chain->add('|', $avconvProc); } + return popen($chain->getProcess()->getCommandLine(), 'r'); } } diff --git a/composer.json b/composer.json index 9421e33..5b7d99f 100644 --- a/composer.json +++ b/composer.json @@ -1,77 +1,83 @@ { - "name": "rudloff/alltube", - "description": "HTML GUI for youtube-dl", - "license": "GPL-3.0", - "homepage": "http://alltubedownload.net/", - "type": "project", - "require": { - "smarty/smarty": "~3.1.29", - "rg3/youtube-dl": "~2016.08.12", - "slim/slim": "~3.5.0", - "mathmarques/smarty-view": "~1.1.0", - "symfony/yaml": "~3.1.0", - "symfony/process": "~3.1.0", - "ptachoire/process-builder-chain": "~1.2.0", - "ffmpeg/ffmpeg": "dev-release", - "rudloff/smarty-plugin-noscheme": "~0.1.0", - "guzzlehttp/guzzle": "~6.2.0", - "rudloff/rtmpdump-bin": "~2.3" - }, - "require-dev": { - "symfony/var-dumper": "~3.1.0", - "squizlabs/php_codesniffer": "~2.6.2", - "phpunit/phpunit": "~5.4.8" - }, - "extra": { - "paas": { - "nginx-includes": [ - "nginx.conf" - ] - } - }, - "repositories": [{ - "type": "package", - "package": { - "name": "rg3/youtube-dl", - "version": "2016.08.12", - "source": { - "url": "https://github.com/rg3/youtube-dl.git", - "type": "git", - "reference": "2016.08.12" - } - } - }, { - "type": "package", - "package": { - "name": "ffmpeg/ffmpeg", - "version": "dev-release", - "dist": { - "url": "http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz", - "type": "xz" - }, - "bin": [ - "ffmpeg" - ] - } - }], - "authors": [{ - "name": "Pierre Rudloff", - "email": "contact@rudloff.pro", - "homepage": "https://rudloff.pro/", - "role": "Developer" - }, { - "name": "Olivier Haquette", - "email": "contact@olivierhaquette.fr", - "homepage": "http://olivierhaquette.fr/", - "role": "Designer" - }], - "autoload": { - "psr-4": { - "Alltube\\": "classes/", - "Alltube\\Controller\\": "controllers/" - } - }, - "config": { - "secure-http": false - } + "name": "rudloff/alltube", + "description": "HTML GUI for youtube-dl", + "license": "GPL-3.0", + "homepage": "http://alltubedownload.net/", + "type": "project", + "require": { + "smarty/smarty": "~3.1.29", + "rg3/youtube-dl": "~2016.09.08", + "slim/slim": "~3.5.0", + "mathmarques/smarty-view": "~1.1.0", + "symfony/yaml": "~3.1.0", + "symfony/process": "~3.1.0", + "ptachoire/process-builder-chain": "~1.2.0", + "ffmpeg/ffmpeg": "dev-release", + "rudloff/smarty-plugin-noscheme": "~0.1.0", + "guzzlehttp/guzzle": "~6.2.0", + "rudloff/rtmpdump-bin": "~2.3" + }, + "require-dev": { + "symfony/var-dumper": "~3.1.0", + "squizlabs/php_codesniffer": "~2.6.2", + "phpunit/phpunit": "~5.5.2" + }, + "extra": { + "paas": { + "nginx-includes": [ + "nginx.conf" + ] + } + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "rg3/youtube-dl", + "version": "2016.09.08", + "source": { + "url": "https://github.com/rg3/youtube-dl.git", + "type": "git", + "reference": "2016.09.08" + } + } + }, + { + "type": "package", + "package": { + "name": "ffmpeg/ffmpeg", + "version": "dev-release", + "dist": { + "url": "http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz", + "type": "xz" + }, + "bin": [ + "ffmpeg" + ] + } + } + ], + "authors": [ + { + "name": "Pierre Rudloff", + "email": "contact@rudloff.pro", + "homepage": "https://rudloff.pro/", + "role": "Developer" + }, + { + "name": "Olivier Haquette", + "email": "contact@olivierhaquette.fr", + "homepage": "http://olivierhaquette.fr/", + "role": "Designer" + } + ], + "autoload": { + "psr-4": { + "Alltube\\": "classes/", + "Alltube\\Controller\\": "controllers/" + } + }, + "config": { + "secure-http": false + } } diff --git a/composer.lock b/composer.lock index fdd5e99..6e7e42d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "45458ad3758a4bfcdcff81c70a53e796", - "content-hash": "2ee8e0ffa53778d2a2eaa5de447573e8", + "hash": "086ca596eeeb4c2a0e5d27976b21e4d2", + "content-hash": "ec541955f4eb561e1b37b3bbb081af09", "packages": [ { "name": "container-interop/container-interop", @@ -347,16 +347,16 @@ }, { "name": "mathmarques/smarty-view", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/mathmarques/Smarty-View.git", - "reference": "66f4d28c564c0363eda18d3f5b85a4241b1c4ad1" + "reference": "c8f8501a0be4c290e1165fcb9e5064952ef6969d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mathmarques/Smarty-View/zipball/66f4d28c564c0363eda18d3f5b85a4241b1c4ad1", - "reference": "66f4d28c564c0363eda18d3f5b85a4241b1c4ad1", + "url": "https://api.github.com/repos/mathmarques/Smarty-View/zipball/c8f8501a0be4c290e1165fcb9e5064952ef6969d", + "reference": "c8f8501a0be4c290e1165fcb9e5064952ef6969d", "shasum": "" }, "require": { @@ -393,7 +393,7 @@ "template", "view" ], - "time": "2016-03-31 00:41:59" + "time": "2016-08-25 19:04:49" }, { "name": "nikic/fast-route", @@ -572,11 +572,11 @@ }, { "name": "rg3/youtube-dl", - "version": "2016.08.12", + "version": "2016.09.08", "source": { "type": "git", "url": "https://github.com/rg3/youtube-dl.git", - "reference": "2016.08.12" + "reference": "2016.09.08" }, "type": "library" }, @@ -776,16 +776,16 @@ }, { "name": "symfony/process", - "version": "v3.1.3", + "version": "v3.1.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "04c2dfaae4ec56a5c677b0c69fac34637d815758" + "reference": "e64e93041c80e77197ace5ab9385dedb5a143697" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/04c2dfaae4ec56a5c677b0c69fac34637d815758", - "reference": "04c2dfaae4ec56a5c677b0c69fac34637d815758", + "url": "https://api.github.com/repos/symfony/process/zipball/e64e93041c80e77197ace5ab9385dedb5a143697", + "reference": "e64e93041c80e77197ace5ab9385dedb5a143697", "shasum": "" }, "require": { @@ -821,20 +821,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-07-28 11:13:48" + "time": "2016-08-16 14:58:24" }, { "name": "symfony/yaml", - "version": "v3.1.3", + "version": "v3.1.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "1819adf2066880c7967df7180f4f662b6f0567ac" + "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/1819adf2066880c7967df7180f4f662b6f0567ac", - "reference": "1819adf2066880c7967df7180f4f662b6f0567ac", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f291ed25eb1435bddbe8a96caaef16469c2a092d", + "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d", "shasum": "" }, "require": { @@ -870,7 +870,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-07-17 14:02:08" + "time": "2016-09-02 02:12:52" } ], "packages-dev": [ @@ -930,16 +930,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "a8773992b362b58498eed24bf85005f363c34771" + "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a8773992b362b58498eed24bf85005f363c34771", - "reference": "a8773992b362b58498eed24bf85005f363c34771", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/da8529775f14f4fdae33f916eb0cf65f6afbddbc", + "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc", "shasum": "" }, "require": { @@ -968,7 +968,7 @@ "object", "object graph" ], - "time": "2015-11-20 12:04:31" + "time": "2016-09-06 16:07:05" }, { "name": "phpdocumentor/reflection-common", @@ -1424,16 +1424,16 @@ }, { "name": "phpunit/phpunit", - "version": "5.4.8", + "version": "5.5.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3132365e1430c091f208e120b8845d39c25f20e6" + "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3132365e1430c091f208e120b8845d39c25f20e6", - "reference": "3132365e1430c091f208e120b8845d39c25f20e6", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6e88e56c912133de6e99b87728cca7ed70c5f5", + "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5", "shasum": "" }, "require": { @@ -1472,7 +1472,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4.x-dev" + "dev-master": "5.5.x-dev" } }, "autoload": { @@ -1498,20 +1498,20 @@ "testing", "xunit" ], - "time": "2016-07-26 14:48:00" + "time": "2016-08-26 07:11:44" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.2.4", + "version": "3.2.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "4e83390f64e7ce04fcaec2ce95cd72823b431d19" + "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/4e83390f64e7ce04fcaec2ce95cd72823b431d19", - "reference": "4e83390f64e7ce04fcaec2ce95cd72823b431d19", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", + "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", "shasum": "" }, "require": { @@ -1557,7 +1557,7 @@ "mock", "xunit" ], - "time": "2016-08-17 09:33:51" + "time": "2016-09-06 16:07:45" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -2211,16 +2211,16 @@ }, { "name": "symfony/var-dumper", - "version": "v3.1.3", + "version": "v3.1.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "076235b750137518408f1bc17a8e69b43211836a" + "reference": "62ee73706c421654a4c840028954510277f7dfc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/076235b750137518408f1bc17a8e69b43211836a", - "reference": "076235b750137518408f1bc17a8e69b43211836a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/62ee73706c421654a4c840028954510277f7dfc8", + "reference": "62ee73706c421654a4c840028954510277f7dfc8", "shasum": "" }, "require": { @@ -2270,7 +2270,7 @@ "debug", "dump" ], - "time": "2016-07-26 08:04:17" + "time": "2016-08-31 09:05:42" }, { "name": "webmozart/assert", diff --git a/config_test.yml b/config_test.yml new file mode 100644 index 0000000..8ede545 --- /dev/null +++ b/config_test.yml @@ -0,0 +1 @@ +convert: false diff --git a/controllers/FrontController.php b/controllers/FrontController.php index 40e87d0..dbfab37 100644 --- a/controllers/FrontController.php +++ b/controllers/FrontController.php @@ -1,41 +1,45 @@ container->view->render( $response, 'index.tpl', - array( - 'convert'=>$this->config->convert, - 'class'=>'index', - 'description'=>'Easily download videos from Youtube, Dailymotion, Vimeo and other websites.' - ) + [ + 'convert' => $this->config->convert, + 'class' => 'index', + 'description' => 'Easily download videos from Youtube, Dailymotion, Vimeo and other websites.', + ] ); } /** - * Display a list of extractors + * Display a list of extractors. * * @param Request $request PSR-7 request * @param Response $response PSR-7 response @@ -79,18 +83,17 @@ class FrontController $this->container->view->render( $response, 'extractors.tpl', - array( - 'extractors'=>$this->download->listExtractors(), - 'class'=>'extractors', - 'title'=>'Supported websites', - 'description' - =>'List of all supported websites from which Alltube Download can extract video or audio files' - ) + [ + 'extractors' => $this->download->listExtractors(), + 'class' => 'extractors', + 'title' => 'Supported websites', + 'description' => 'List of all supported websites from which Alltube Download can extract video or audio files', + ] ); } /** - * Dislay information about the video + * Dislay information about the video. * * @param Request $request PSR-7 request * @param Response $response PSR-7 response @@ -101,7 +104,7 @@ class FrontController { $params = $request->getQueryParams(); $this->config = Config::getInstance(); - if (isset($params["url"])) { + if (isset($params['url'])) { if (isset($params['audio'])) { try { return $this->getStream($params["url"], 'mp3[protocol^=http]', $response, $request); @@ -109,27 +112,28 @@ class FrontController $response = $response->withHeader( 'Content-Disposition', 'attachment; filename="'. - $this->download->getAudioFilename($params["url"], 'bestaudio/best').'"' + $this->download->getAudioFilename($params['url'], 'bestaudio/best').'"' ); $response = $response->withHeader('Content-Type', 'audio/mpeg'); if ($request->isGet()) { - $process = $this->download->getAudioStream($params["url"], 'bestaudio/best'); + $process = $this->download->getAudioStream($params['url'], 'bestaudio/best'); $response = $response->withBody(new Stream($process)); } + return $response; } } else { - $video = $this->download->getJSON($params["url"]); + $video = $this->download->getJSON($params['url']); $this->container->view->render( $response, 'video.tpl', - array( - 'video'=>$video, - 'class'=>'video', - 'title'=>$video->title, - 'description'=>'Download "'.$video->title.'" from '.$video->extractor_key - ) + [ + 'video' => $video, + 'class' => 'video', + 'title' => $video->title, + 'description' => 'Download "'.$video->title.'" from '.$video->extractor_key, + ] ); } } else { @@ -138,10 +142,12 @@ class FrontController } /** - * Display an error page - * @param Request $request PSR-7 request - * @param Response $response PSR-7 response - * @param \Exception $exception Error to display + * Display an error page. + * + * @param Request $request PSR-7 request + * @param Response $response PSR-7 response + * @param \Exception $exception Error to display + * * @return Response HTTP response */ public function error(Request $request, Response $response, \Exception $exception) @@ -149,12 +155,13 @@ class FrontController $this->container->view->render( $response, 'error.tpl', - array( - 'errors'=>$exception->getMessage(), - 'class'=>'video', - 'title'=>'Error' - ) + [ + 'errors' => $exception->getMessage(), + 'class' => 'video', + 'title' => 'Error', + ] ); + return $response->withStatus(500); } @@ -176,7 +183,7 @@ class FrontController } /** - * Redirect to video file + * Redirect to video file. * * @param Request $request PSR-7 request * @param Response $response PSR-7 response @@ -186,18 +193,19 @@ class FrontController public function redirect(Request $request, Response $response) { $params = $request->getQueryParams(); - if (isset($params["url"])) { + if (isset($params['url'])) { try { return $this->getStream($params["url"], $params["format"], $response, $request); } catch (\Exception $e) { $response->getBody()->write($e->getMessage()); + return $response->withHeader('Content-Type', 'text/plain'); } } } /** - * Output JSON info about the video + * Output JSON info about the video. * * @param Request $request PSR-7 request * @param Response $response PSR-7 response @@ -207,13 +215,14 @@ class FrontController public function json(Request $request, Response $response) { $params = $request->getQueryParams(); - if (isset($params["url"])) { + if (isset($params['url'])) { try { - $video = $this->download->getJSON($params["url"]); + $video = $this->download->getJSON($params['url']); + return $response->withJson($video); } catch (\Exception $e) { return $response->withJson( - array('success'=>false, 'error'=>$e->getMessage()) + ['success' => false, 'error' => $e->getMessage()] ); } } diff --git a/index.php b/index.php index 60026bf..0653081 100644 --- a/index.php +++ b/index.php @@ -1,6 +1,6 @@ get( '/', - array($controller, 'index') + [$controller, 'index'] )->setName('index'); $app->get( '/extractors', - array($controller, 'extractors') + [$controller, 'extractors'] )->setName('extractors'); $app->get( '/video', - array($controller, 'video') + [$controller, 'video'] )->setName('video'); $app->get( '/redirect', - array($controller, 'redirect') + [$controller, 'redirect'] )->setName('redirect'); $app->get( '/json', - array($controller, 'json') + [$controller, 'json'] ); $app->run(); diff --git a/manifest.json b/manifest.json index 9f08114..0c4b662 100644 --- a/manifest.json +++ b/manifest.json @@ -1,31 +1,37 @@ { - "short_name": "AllTube", - "name": "AllTube Download", - "description": "Easily download videos from Youtube, Dailymotion, Vimeo and other websites", - "display": "standalone", - "icons": [{ - "src": "img/favicon.png", - "sizes": "32x32", - "type": "image/png" - }, { - "src": "img/logo_60.png", - "sizes": "60x60", - "type": "image/png" - }, { - "src": "img/logo_90.png", - "sizes": "90x60", - "type": "image/png" - }, { - "src": "img/logo_app.png", - "sizes": "243x243", - "type": "image/png" - }, { - "src": "img/logo_250.png", - "sizes": "250x250", - "type": "image/png" - }], - "lang": "en", - "start_url": "./", - "theme_color": "#4F4F4F", - "orientation": "portrait" + "short_name": "AllTube", + "name": "AllTube Download", + "description": "Easily download videos from Youtube, Dailymotion, Vimeo and other websites", + "display": "standalone", + "icons": [ + { + "src": "img/favicon.png", + "sizes": "32x32", + "type": "image/png" + }, + { + "src": "img/logo_60.png", + "sizes": "60x60", + "type": "image/png" + }, + { + "src": "img/logo_90.png", + "sizes": "90x60", + "type": "image/png" + }, + { + "src": "img/logo_app.png", + "sizes": "243x243", + "type": "image/png" + }, + { + "src": "img/logo_250.png", + "sizes": "250x250", + "type": "image/png" + } + ], + "lang": "en", + "start_url": "./", + "theme_color": "#4F4F4F", + "orientation": "portrait" } diff --git a/manifest.webapp b/manifest.webapp index 517c21b..91435b8 100644 --- a/manifest.webapp +++ b/manifest.webapp @@ -1,17 +1,17 @@ { - "name": "AllTube", - "description": "Easily download videos from Youtube, Dailymotion, Vimeo and other websites", - "developer": { - "name": "Pierre Rudloff", - "url": "https://rudloff.pro/" - }, - "icons": { - "32": "/img/favicon.png", - "60": "/img/logo_60.png", - "90": "/img/logo_90.png", - "243": "/img/logo_app.png", - "250": "/img/logo_250.png" - }, - "default_locale": "en", - "launch_path": "/index.php" + "name": "AllTube", + "description": "Easily download videos from Youtube, Dailymotion, Vimeo and other websites", + "developer": { + "name": "Pierre Rudloff", + "url": "https://rudloff.pro/" + }, + "icons": { + "32": "/img/favicon.png", + "60": "/img/logo_60.png", + "90": "/img/logo_90.png", + "243": "/img/logo_app.png", + "250": "/img/logo_250.png" + }, + "default_locale": "en", + "launch_path": "/index.php" } diff --git a/package.json b/package.json index 8c9f981..fcaf214 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,41 @@ { - "name": "alltube", - "version": "0.5.0", - "license": "GPL-3.0", - "dependencies": { - "grunt": "~1.0.1", - "grunt-cli": "~1.2.0", - "grunt-contrib-cssmin": "~1.0.0", - "grunt-contrib-uglify": "~2.0.0", - "bower": "~1.7.1" - }, - "devDependencies": { - "grunt-contrib-watch": "~1.0.0", - "grunt-phpcs": "~0.4.0", - "grunt-phpunit": "~0.3.6", - "grunt-contrib-compress": "~1.3.0", - "grunt-githash": "~0.1.3", - "grunt-jslint": "~1.1.14", - "grunt-phpdocumentor": "~0.4.1" - }, - "repository": { - "type": "git", - "url": "https://github.com/Rudloff/alltube.git" - }, - "scripts": { - "postinstall": "node node_modules/bower/bin/bower install && node node_modules/grunt-cli/bin/grunt" - } + "name": "alltube", + "description": "HTML GUI for youtube-dl", + "version": "0.5.0", + "author": "Pierre Rudloff", + "bugs": "https://github.com/Rudloff/alltube/issues", + "dependencies": { + "bower": "~1.7.1", + "grunt": "~1.0.1", + "grunt-cli": "~1.2.0", + "grunt-contrib-cssmin": "~1.0.0", + "grunt-contrib-uglify": "~2.0.0" + }, + "devDependencies": { + "grunt-contrib-compress": "~1.3.0", + "grunt-contrib-watch": "~1.0.0", + "grunt-fixpack": "~0.1.0", + "grunt-githash": "~0.1.3", + "grunt-jslint": "~1.1.14", + "grunt-jsonlint": "~1.1.0", + "grunt-phpcs": "~0.4.0", + "grunt-phpdocumentor": "~0.4.1", + "grunt-phpunit": "~0.3.6" + }, + "homepage": "https://www.alltubedownload.net/", + "keywords": [ + "alltube", + "dowload", + "video", + "youtube" + ], + "license": "GPL-3.0", + "main": "index.php", + "repository": { + "type": "git", + "url": "https://github.com/Rudloff/alltube.git" + }, + "scripts": { + "postinstall": "node node_modules/bower/bin/bower install && node node_modules/grunt-cli/bin/grunt" + } } diff --git a/phpunit.xml b/phpunit.xml index 0288925..fe96cd9 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -11,5 +11,6 @@ + diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php index 88acd67..9e7e1d8 100644 --- a/tests/ConfigTest.php +++ b/tests/ConfigTest.php @@ -1,32 +1,57 @@ config = Config::getInstance('config_test.yml'); + } + + /** + * Test the getInstance function. * * @return void */ public function testGetInstance() + { + $this->assertEquals($this->config->convert, false); + $this->assertInternalType('array', $this->config->curl_params); + $this->assertInternalType('array', $this->config->params); + $this->assertInternalType('string', $this->config->youtubedl); + $this->assertInternalType('string', $this->config->python); + $this->assertInternalType('string', $this->config->avconv); + $this->assertInternalType('string', $this->config->rtmpdump); + } + + /** + * Test the getInstance function with the CONVERT environment variable. + * + * @return void + */ + public function testGetInstanceWithEnv() { putenv('CONVERT=1'); - $config = Config::getInstance(); + Config::destroyInstance(); + $config = Config::getInstance('config_test.yml'); $this->assertEquals($config->convert, true); - $this->assertInternalType('array', $config->curl_params); - $this->assertInternalType('array', $config->params); - $this->assertInternalType('string', $config->youtubedl); - $this->assertInternalType('string', $config->python); - $this->assertInternalType('string', $config->avconv); - $this->assertInternalType('string', $config->rtmpdump); } } diff --git a/tests/VideoDownloadTest.php b/tests/VideoDownloadTest.php index c0ce2d7..8e5d705 100644 --- a/tests/VideoDownloadTest.php +++ b/tests/VideoDownloadTest.php @@ -1,24 +1,25 @@