This commit is contained in:
Pierre Rudloff 2020-05-14 00:18:39 +02:00
parent 957de61892
commit d4c1357c32
16 changed files with 255 additions and 242 deletions

View file

@ -2,10 +2,10 @@
language: php
php: 7.3
addons:
apt:
packages:
- language-pack-fr
apt:
packages:
- language-pack-fr
install: composer install --no-progress
script:
- composer lint
- composer test
- composer lint
- composer test

View file

@ -1,17 +1,17 @@
---
parameters:
ascii: ~
tasks:
jsonlint: ~
xmllint: ~
yamllint: ~
composer: ~
phpcs:
standard: PSR12
ignore_patterns:
- RoboFile.php
phpstan:
level: max
configuration: phpstan.neon
ignore_patterns:
- RoboFile.php
ascii: ~
tasks:
jsonlint: ~
xmllint: ~
yamllint: ~
composer: ~
phpcs:
standard: PSR12
ignore_patterns:
- RoboFile.php
phpstan:
level: max
configuration: phpstan.neon
ignore_patterns:
- RoboFile.php

View file

@ -1,18 +1,18 @@
<?xml version="1.0"?>
<phpunit bootstrap="tests/bootstrap.php">
<filter>
<whitelist>
<directory>classes/</directory>
<directory>controllers/</directory>
</whitelist>
</filter>
<testsuites>
<testsuite name="Tests">
<directory>tests/</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="coverage/"/>
<log type="coverage-clover" target="clover.xml"/>
</logging>
<filter>
<whitelist>
<directory>classes/</directory>
<directory>controllers/</directory>
</whitelist>
</filter>
<testsuites>
<testsuite name="Tests">
<directory>tests/</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="coverage/"/>
<log type="coverage-clover" target="clover.xml"/>
</logging>
</phpunit>

View file

@ -1,21 +1,23 @@
<?xml version="1.0"?>
<!DOCTYPE HTML>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AllTube Download - Maintenance</title>
<link rel="stylesheet" href="../dist/main.css"/>
<link rel="icon" href="../img/favicon.png"/>
</head>
<body>
<div class="wrapper">
<div class="main">
</head>
<body>
<div class="wrapper">
<div class="main">
<h1>
<img class="logo" src="../img/logo.png" alt="AllTube Download" width="328" height="284"/>
<img class="logo" src="../img/logo.png" alt="AllTube Download" width="328" height="284"/>
</h1>
<div>An error occurred in the application and your page could not be served. Please try again in a few moments.</div>
</div>
<div>An error occurred in the application and your page could not be served. Please try again in a few
moments.
</div>
</div>
</body>
</div>
</body>
</html>

View file

@ -1,21 +1,21 @@
<?xml version="1.0"?>
<!DOCTYPE HTML>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AllTube Download - Maintenance</title>
<link rel="stylesheet" href="../dist/main.css"/>
<link rel="icon" href="../img/favicon.png"/>
</head>
<body>
<div class="wrapper">
<div class="main">
</head>
<body>
<div class="wrapper">
<div class="main">
<h1>
<img class="logo" src="../img/logo.png" alt="AllTube Download" width="328" height="284"/>
<img class="logo" src="../img/logo.png" alt="AllTube Download" width="328" height="284"/>
</h1>
<div>This application is undergoing maintenance right now. Please check back later.</div>
</div>
</div>
</body>
</div>
</body>
</html>

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://alltubedownload.net/</loc>
<changefreq>yearly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://alltubedownload.net/extractors</loc>
<changefreq>weekly</changefreq>
</url>
<url>
<loc>https://alltubedownload.net/</loc>
<changefreq>yearly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://alltubedownload.net/extractors</loc>
<changefreq>weekly</changefreq>
</url>
</urlset>

View file

@ -6,4 +6,4 @@
{t}Please check the URL of your video.{/t}
<p><i>{$error|escape}</i></p>
</main>
{include file='inc/footer.tpl'}
{include file='inc/footer.tpl'}

View file

@ -3,10 +3,10 @@
{include file='inc/logo.tpl'}
<h2 class="titre">{t}Supported websites{/t}</h2>
<div class="tripleliste">
<ul>
{foreach $extractors as $extractor}
<li>{$extractor}</li>
{/foreach}
</ul>
<ul>
{foreach $extractors as $extractor}
<li>{$extractor}</li>
{/foreach}
</ul>
</div>
{include file='inc/footer.tpl'}

View file

@ -31,7 +31,7 @@
&middot;
<a rel="noopener" target="_blank" title="{t}Donate using Liberapay{/t}"
href="https://liberapay.com/Rudloff/donate">
href="https://liberapay.com/Rudloff/donate">
{t}Donate{/t}
</a>
</div>

View file

@ -1,25 +1,25 @@
<!doctype html>
<html {if isset($locale)}lang="{$locale->getBcp47()}"{/if}>
<head>
<meta charset="UTF-8" />
<meta charset="UTF-8"/>
<meta name=viewport content="width=device-width, initial-scale=1">
{if isset($description)}
<meta name="description" content="{$description|escape}" />
<meta name="twitter:description" content="{$description|escape}" />
<meta property="og:description" content="{$description|escape}" />
<meta name="description" content="{$description|escape}"/>
<meta name="twitter:description" content="{$description|escape}"/>
<meta property="og:description" content="{$description|escape}"/>
{/if}
<link rel="stylesheet" href="{base_url}/css/fonts.css" />
<link rel="stylesheet" href="{base_url}/css/style.css" />
<link rel="stylesheet" href="{base_url}/css/fonts.css"/>
<link rel="stylesheet" href="{base_url}/css/style.css"/>
<title>{$config->appName}{if isset($title)} - {$title|escape}{/if}</title>
<link rel="canonical" href="{$canonical}" />
<link rel="icon" href="{base_url}/img/favicon.png" />
<meta property="og:title" content="{$config->appName}{if isset($title)} - {$title|escape}{/if}" />
<meta property="og:image" content="{base_url}/img/logo.png" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="{$config->appName}{if isset($title)} - {$title|escape}{/if}" />
<meta name="twitter:image" content="{base_url}/img/logo.png" />
<meta name="twitter:creator" content="@Tael67" />
<link rel="canonical" href="{$canonical}"/>
<link rel="icon" href="{base_url}/img/favicon.png"/>
<meta property="og:title" content="{$config->appName}{if isset($title)} - {$title|escape}{/if}"/>
<meta property="og:image" content="{base_url}/img/logo.png"/>
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="{$config->appName}{if isset($title)} - {$title|escape}{/if}"/>
<meta name="twitter:image" content="{base_url}/img/logo.png"/>
<meta name="twitter:creator" content="@Tael67"/>
<meta name="theme-color" content="#4F4F4F">
<link rel="manifest" href="{base_url}/resources/manifest.json" />
<link rel="manifest" href="{base_url}/resources/manifest.json"/>
</head>
<body class="{$class}">

View file

@ -13,8 +13,8 @@
{if $supportedLocale != $locale}
<li>
<a hreflang="{$supportedLocale->getBcp47()}"
lang="{$supportedLocale->getBcp47()}"
href="{path_for name='locale' data=['locale'=>$supportedLocale->getIso15897()]}">
lang="{$supportedLocale->getBcp47()}"
href="{path_for name='locale' data=['locale'=>$supportedLocale->getIso15897()]}">
{if $supportedLocale->getCountry()}
{$supportedLocale->getCountry()->getEmoji()}
{/if}

View file

@ -1,4 +1,5 @@
<h1 class="logobis">
<a class="logocompatible" href="{base_url}">
<span class="logocompatiblemask"><img src="{base_url}/img/logocompatiblemask.png" width="447" height="107" alt="{$config->appName}" /></span>
</a></h1>
<a class="logocompatible" href="{base_url}">
<span class="logocompatiblemask"><img src="{base_url}/img/logocompatiblemask.png" width="447" height="107"
alt="{$config->appName}"/></span>
</a></h1>

View file

@ -2,41 +2,45 @@
{include file='inc/header.tpl'}
<main class="main">
<div><img class="logo" src="{base_url}/img/logo.png"
alt="{$config->appName}" width="328" height="284"></div>
alt="{$config->appName}" width="328" height="284"></div>
<form action="{path_for name="info"}">
<label class="labelurl" for="url">
{t}Copy here the URL of your video (Youtube, Dailymotion, etc.){/t}
</label>
<div class="champs">
<label class="labelurl" for="url">
{t}Copy here the URL of your video (Youtube, Dailymotion, etc.){/t}
</label>
<div class="champs">
<span class="URLinput_wrapper">
<!-- We used to have an autofocus attribute on this field but it triggerd a very specific CSS bug: https://github.com/Rudloff/alltube/issues/117 -->
<input class="URLinput large-font" type="url" name="url" id="url"
required placeholder="http://example.com/video" />
required placeholder="http://example.com/video"/>
</span>
{if $config->uglyUrls}
<input type="hidden" name="page" value="info" />
{/if}
<input class="downloadBtn large-font" type="submit" value="{t}Download{/t}" /><br/>
{if $config->convert}
<div class="mp3 small-font">
<div class="mp3-inner">
<input type="checkbox" id="audio" class="audio" name="audio">
<label for="audio"><span class="ui"></span>
{t}Audio only (MP3){/t}
</label>
<div class="seekOptions">
<label for="from">{t}From{/t}</label> <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?" placeholder="HH:MM:SS" value="" name="from" id="from" />
<label for="to">{t}to{/t}</label> <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?" placeholder="HH:MM:SS" value="" name="to" id="to" />
{if $config->uglyUrls}
<input type="hidden" name="page" value="info"/>
{/if}
<input class="downloadBtn large-font" type="submit" value="{t}Download{/t}"/><br/>
{if $config->convert}
<div class="mp3 small-font">
<div class="mp3-inner">
<input type="checkbox" id="audio" class="audio" name="audio">
<label for="audio"><span class="ui"></span>
{t}Audio only (MP3){/t}
</label>
<div class="seekOptions">
<label for="from">{t}From{/t}</label> <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?"
placeholder="HH:MM:SS" value="" name="from"
id="from"/>
<label for="to">{t}to{/t}</label> <input type="text" pattern="(\d+:)?(\d+:)?\d+(\.\d+)?"
placeholder="HH:MM:SS" value="" name="to" id="to"/>
</div>
</div>
</div>
</div>
{/if}
</div>
{/if}
</div>
</form>
<a class="combatiblelink small-font" href="{path_for name="extractors"}">{t}See all supported websites{/t}</a>
<div id="bookmarklet" class="bookmarklet_wrapper">
<p> {t}Drag this to your bookmarks bar:{/t} </p>
<a class="bookmarklet small-font" href="javascript:window.location='{$domain}{path_for name='info'}?url='+encodeURIComponent(location.href);">{t}Bookmarklet{/t}</a>
<a class="bookmarklet small-font"
href="javascript:window.location='{$domain}{path_for name='info'}?url='+encodeURIComponent(location.href);">{t}Bookmarklet{/t}</a>
</div>
</main>

View file

@ -1,100 +1,105 @@
{include file="inc/head.tpl"}
<div class="wrapper">
<div itemscope itemtype="http://schema.org/VideoObject">
<main class="main">
{include file="inc/logo.tpl"}
{$title="<i itemprop='name'>
<div itemscope itemtype="http://schema.org/VideoObject">
<main class="main">
{include file="inc/logo.tpl"}
{$title="<i itemprop='name'>
<a itemprop='url' id='video_link'
href='{$video->webpage_url}'>
{$video->title}</a></i>"}
<p id="download_intro">
{t params=['@title' => $title]}You are going to download @title.{/t}
</p>
{if isset($video->thumbnail)}
<img itemprop="thumbnailUrl" class="thumb" src="{$video->thumbnail}" alt="" />
{/if}
{if isset($video->description)}
<meta itemprop="description" content="{$video->description|escape}" />
{/if}
{if isset($video->upload_date)}
<meta itemprop="uploadDate" content="{$video->upload_date}" />
{/if}
<br/>
<form action="{path_for name="download"}">
<input type="hidden" name="url" value="{$video->webpage_url}" />
{if $config->uglyUrls}
<input type="hidden" name="page" value="download" />
{/if}
{if isset($video->formats) && count($video->formats) > 1}
<h3><label for="format">{t}Available formats:{/t}</label></h3>
<select name="format" id="format" class="formats monospace">
<optgroup label="{t}Generic formats{/t}">
{foreach $config->genericFormats as $format => $name}
<option value="{$format}">{t}{$name}{/t}</option>
{/foreach}
</optgroup>
<optgroup label="{t}Detailed formats{/t}" class="monospace">
{foreach $video->formats as $format}
{if $config->stream || $format->protocol|in_array:array('http', 'https')}
{strip}
<option value="{$format->format_id}">
{$format->ext}
{for $foo=1 to (5 - ($format->ext|strlen))}
&nbsp;
{/for}
{if isset($format->width)}
{$format->width}x{$format->height}
{for $foo=1 to (10 - (("{$format->width}x{$format->height}")|strlen))}
&nbsp;
{/for}
{else}
{for $foo=1 to 10}
&nbsp;
{/for}
{/if}
{if isset($format->filesize)}
{($format->filesize/1000000)|round:2} MB
{for $foo=1 to (7 - (($format->filesize/1000000)|round:2|strlen))}
&nbsp;
{/for}
{else}
{for $foo=1 to 10}
&nbsp;
{/for}
{/if}
{if isset($format->format_note)}
{$format->format_note}
{/if}
&nbsp;({$format->format_id})
</option>
{/strip}
{/if}
{/foreach}
</optgroup>
</select><br/><br/>
{/if}
{if $config->stream}
<input type="checkbox" {if $config->stream != 'ask'}checked{/if} name="stream" id="stream"/>
<label for="stream">{t}Stream the video through the server{/t}</label>
<br/><br/>
{/if}
{if $config->convertAdvanced}
<input type="checkbox" name="customConvert" id="customConvert"/>
<label for="customConvert">{t}Convert into a custom format:{/t}</label>
<select title="{t}Custom format{/t}" name="customFormat" aria-label="{t}Format to convert to{/t}">
{foreach $config->convertAdvancedFormats as $format}
<option>{$format}</option>
{/foreach}
</select>
{t}with{/t}
<label for="customBitrate" class="sr-only">{t}Bit rate{/t}</label>
<input type="number" value="{$config->audioBitrate}" title="{t}Custom bitrate{/t}" class="customBitrate"
name="customBitrate" id="customBitrate" aria-describedby="customBitrateUnit" />
<span id="customBitrateUnit">{t}kbit/s audio{/t}</span>
<br/><br/>
{/if}
<input class="downloadBtn" type="submit" value="{t}Download{/t}" /><br/>
</form>
</main>
</div>
{include file="inc/footer.tpl"}
<p id="download_intro">
{t params=['@title' => $title]}You are going to download @title.{/t}
</p>
{if isset($video->thumbnail)}
<img itemprop="thumbnailUrl" class="thumb" src="{$video->thumbnail}" alt=""/>
{/if}
{if isset($video->description)}
<meta itemprop="description" content="{$video->description|escape}"/>
{/if}
{if isset($video->upload_date)}
<meta itemprop="uploadDate" content="{$video->upload_date}"/>
{/if}
<br/>
<form action="{path_for name="download"}">
<input type="hidden" name="url" value="{$video->webpage_url}"/>
{if $config->uglyUrls}
<input type="hidden" name="page" value="download"/>
{/if}
{if isset($video->formats) && count($video->formats) > 1}
<h3><label for="format">{t}Available formats:{/t}</label></h3>
<select name="format" id="format" class="formats monospace">
<optgroup label="{t}Generic formats{/t}">
{foreach $config->genericFormats as $format => $name}
<option value="{$format}">{t}{$name}{/t}</option>
{/foreach}
</optgroup>
<optgroup label="{t}Detailed formats{/t}" class="monospace">
{foreach $video->formats as $format}
{if $config->stream || $format->protocol|in_array:array('http', 'https')}
{strip}
<option value="{$format->format_id}">
{$format->ext}
{for $foo=1 to (5 - ($format->ext|strlen))}
&nbsp;
{/for}
{if isset($format->width)}
{$format->width}x{$format->height}
{for $foo=1 to (10 - (("{$format->width}x{$format->height}")|strlen))}
&nbsp;
{/for}
{else}
{for $foo=1 to 10}
&nbsp;
{/for}
{/if}
{if isset($format->filesize)}
{($format->filesize/1000000)|round:2} MB
{for $foo=1 to (7 - (($format->filesize/1000000)|round:2|strlen))}
&nbsp;
{/for}
{else}
{for $foo=1 to 10}
&nbsp;
{/for}
{/if}
{if isset($format->format_note)}
{$format->format_note}
{/if}
&nbsp;({$format->format_id})
</option>
{/strip}
{/if}
{/foreach}
</optgroup>
</select>
<br/>
<br/>
{/if}
{if $config->stream}
<input type="checkbox" {if $config->stream != 'ask'}checked{/if} name="stream" id="stream"/>
<label for="stream">{t}Stream the video through the server{/t}</label>
<br/>
<br/>
{/if}
{if $config->convertAdvanced}
<input type="checkbox" name="customConvert" id="customConvert"/>
<label for="customConvert">{t}Convert into a custom format:{/t}</label>
<select title="{t}Custom format{/t}" name="customFormat" aria-label="{t}Format to convert to{/t}">
{foreach $config->convertAdvancedFormats as $format}
<option>{$format}</option>
{/foreach}
</select>
{t}with{/t}
<label for="customBitrate" class="sr-only">{t}Bit rate{/t}</label>
<input type="number" value="{$config->audioBitrate}" title="{t}Custom bitrate{/t}"
class="customBitrate"
name="customBitrate" id="customBitrate" aria-describedby="customBitrateUnit"/>
<span id="customBitrateUnit">{t}kbit/s audio{/t}</span>
<br/>
<br/>
{/if}
<input class="downloadBtn" type="submit" value="{t}Download{/t}"/><br/>
</form>
</main>
</div>
{include file="inc/footer.tpl"}

View file

@ -6,9 +6,9 @@
<p>{t}You need a password in order to download this video.{/t}</p>
<form action="" method="POST">
<label class="sr-only" for="password">{t}Video password{/t}</label>
<input class="URLinput" type="password" name="password" id="password" />
<input class="URLinput" type="password" name="password" id="password"/>
<br/><br/>
<input class="downloadBtn" type="submit" value="{t}Download{/t}" />
<input class="downloadBtn" type="submit" value="{t}Download{/t}"/>
</form>
</main>
{include file='inc/footer.tpl'}
{include file='inc/footer.tpl'}

View file

@ -1,43 +1,44 @@
{include file="inc/head.tpl"}
<div class="wrapper">
<main class="main">
{include file="inc/logo.tpl"}
<main class="main">
{include file="inc/logo.tpl"}
{if isset($video->title)}
{$title="<i>
{if isset($video->title)}
{$title="<i>
<a href='{$video->webpage_url}'>
{$video->title}</a>
</i>"}
<p>
{t params=['@title'=>$title]}Videos extracted from @title:{/t}
</p>
{/if}
<p>
{t params=['@title'=>$title]}Videos extracted from @title:{/t}
</p>
{/if}
{if $config->stream}
<a href="{path_for name="download"}?url={$video->webpage_url}" class="downloadBtn">Download everything</a>
{/if}
{foreach $video->entries as $entry}
<div class="playlist-entry">
<h3 class="playlist-entry-title"><a target="_blank" href="{strip}
{if $config->stream}
<a href="{path_for name="download"}?url={$video->webpage_url}" class="downloadBtn">Download everything</a>
{/if}
{foreach $video->entries as $entry}
<div class="playlist-entry">
<h3 class="playlist-entry-title"><a target="_blank" href="{strip}
{if isset($entry->ie_key) and $entry->ie_key == Youtube and !filter_var($entry->url, FILTER_VALIDATE_URL)}
https://www.youtube.com/watch?v=
{/if}
{$entry->url}
{/strip}">
{if !isset($entry->title)}
{if $entry->ie_key == YoutubePlaylist}
Playlist
{else}
Video
{/if}
{else}
{$entry->title}
{/if}
</a></h3>
<a target="_blank" class="downloadBtn" href="{path_for name="download"}?url={$entry->url}">{t}Download{/t}</a>
<a target="_blank" href="{path_for name="info"}?url={$entry->url}">{t}More options{/t}</a>
</div>
{/foreach}
{if !isset($entry->title)}
{if $entry->ie_key == YoutubePlaylist}
Playlist
{else}
Video
{/if}
{else}
{$entry->title}
{/if}
</a></h3>
<a target="_blank" class="downloadBtn"
href="{path_for name="download"}?url={$entry->url}">{t}Download{/t}</a>
<a target="_blank" href="{path_for name="info"}?url={$entry->url}">{t}More options{/t}</a>
</div>
{/foreach}
</main>
{include file="inc/footer.tpl"}
</main>
{include file="inc/footer.tpl"}