diff --git a/config/routes.yaml b/config/routes.yaml index 15131fa..6b1edf1 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -16,6 +16,15 @@ torrents_show: method: GET id: '\d+' +# Mainly for Telegram bot +magnet_redirect: + path: /magnet/{infoHash} + controller: App\Controller\MagnetRedirectController::redirect + requirements: + method: GET + # SHA-1 hash + infoHash: '[0-9a-fA-F]{40}' + user_register: path: /register/{inviteCode} controller: App\Controller\UserController::register diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml deleted file mode 100644 index d49a502..0000000 --- a/config/routes/annotations.yaml +++ /dev/null @@ -1,3 +0,0 @@ -controllers: - resource: ../../src/Controller/ - type: annotation diff --git a/src/Controller/MagnetRedirectController.php b/src/Controller/MagnetRedirectController.php new file mode 100644 index 0000000..d3d0117 --- /dev/null +++ b/src/Controller/MagnetRedirectController.php @@ -0,0 +1,14 @@ +generate($infoHash), RedirectResponse::HTTP_TEMPORARY_REDIRECT); + } +} diff --git a/src/Magnet/MagnetGenerator.php b/src/Magnet/MagnetGenerator.php new file mode 100644 index 0000000..3482971 --- /dev/null +++ b/src/Magnet/MagnetGenerator.php @@ -0,0 +1,36 @@ +publicTrackers = $publicTrackers; + } + + public function generate(string $infoHash, ?string $name = null, bool $withTrackers = true): string + { + $url = sprintf(self::MAGNET_TEMPLATE, urlencode($infoHash)); + + if (null !== $name) { + $url .= '&dn='.urlencode($name); + } + + if ($withTrackers) { + foreach ($this->publicTrackers as $tracker) { + $url .= '&tr='.urlencode($tracker); + } + } + + return $url; + } +} \ No newline at end of file diff --git a/src/Twig/MagnetExtension.php b/src/Twig/MagnetExtension.php index f935919..2d7bff3 100644 --- a/src/Twig/MagnetExtension.php +++ b/src/Twig/MagnetExtension.php @@ -2,42 +2,31 @@ namespace App\Twig; +use App\Magnet\MagnetGenerator; use Twig\Extension\AbstractExtension; -use Twig\TwigFunction; +use Twig\{TwigFilter, TwigFunction}; class MagnetExtension extends AbstractExtension { - private const MAGNET_TEMPLATE = 'magnet:?xt=urn:btih:%s&dn=%s'; + /** @var MagnetGenerator */ + private $magnetGenerator; - /** @var string[] Array of public trackers which will be added to the magnet link */ - private $publicTrackers = []; - - /** - * @param string[] $publicTrackers - */ - public function __construct(array $publicTrackers = []) + public function __construct(MagnetGenerator $magnetGenerator) { - $this->publicTrackers = $publicTrackers; + $this->magnetGenerator = $magnetGenerator; } - public function getFunctions(): array { return [ - new TwigFunction('magnet', [$this, 'createMagnet']), + new TwigFunction('magnet', [$this->magnetGenerator, 'generate']), ]; } - public function createMagnet(string $name, string $infoHash, bool $addPublicTrackers = true): string + public function getFilters() { - $magnetUrl = sprintf(self::MAGNET_TEMPLATE, urlencode($infoHash), urlencode($name)); - - if ($addPublicTrackers) { - foreach ($this->publicTrackers as $tracker) { - $magnetUrl .= '&tr='.urlencode($tracker); - } - } - - return $magnetUrl; + return [ + new TwigFilter('magnet', [$this->magnetGenerator, 'generate']), + ]; } } \ No newline at end of file diff --git a/templates/torrent_list.html.twig b/templates/torrent_list.html.twig index 1654d4d..6a6fe01 100644 --- a/templates/torrent_list.html.twig +++ b/templates/torrent_list.html.twig @@ -19,7 +19,7 @@ {# @var torrent \App\Magnetico\Entity\Torrent #} {% for torrent in torrents %}