From f968e7e622ade55a06dfeb98d4063ddd5a6a297b Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Fri, 6 Feb 2026 15:23:39 -0600 Subject: [PATCH] feat: allows configuring whether to cache torrentio results --- .env | 3 +++ config/services.yaml | 3 +++ src/Base/ConfigResolver.php | 10 +++++++ .../Framework/Controller/WebController.php | 26 +++++++++++++------ 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.env b/.env index 5ca542a..b38c1cb 100644 --- a/.env +++ b/.env @@ -68,3 +68,6 @@ SENTRY_JS_URL= # - only include media originally # produced in this language TMDB_ORIGINAL_LANGUAGE=en + +# Cache Torrentio Results +TORRENTIO_CACHE_RESULTS=true diff --git a/config/services.yaml b/config/services.yaml index 572da57..7bd2fe0 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -52,6 +52,9 @@ parameters: sentry.dsn: '%env(SENTRY_DSN)%' sentry.javascript_url: '%env(SENTRY_JS_URL)%' + # Torrentio + torrentio.cache_results: '%env(bool:TORRENTIO_CACHE_RESULTS)%' + services: # default configuration for services in *this* file _defaults: diff --git a/src/Base/ConfigResolver.php b/src/Base/ConfigResolver.php index 92b4ddb..73b7ff3 100644 --- a/src/Base/ConfigResolver.php +++ b/src/Base/ConfigResolver.php @@ -4,6 +4,7 @@ namespace App\Base; use App\Base\Dto\AppVersionDto; use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; final class ConfigResolver @@ -14,6 +15,7 @@ final class ConfigResolver public function __construct( private readonly DenormalizerInterface $denormalizer, + private readonly RequestStack $requestStack, #[Autowire(param: 'app.url')] private readonly ?string $appUrl = null, @@ -62,6 +64,9 @@ final class ConfigResolver #[Autowire(param: 'sentry.javascript_url')] private ?string $sentryJavascriptUrl = null, + + #[Autowire(param: 'torrentio.cache_results')] + private ?bool $torrentioCacheResults = null, ) {} public function validate(): bool @@ -110,6 +115,11 @@ final class ConfigResolver return $this->authOidcBypassFormLogin; } + public function isTorrentioCacheEnabled(): bool + { + return $this->torrentioCacheResults; + } + public function getAppVersion(): AppVersionDto { $matches = []; diff --git a/src/Torrentio/Framework/Controller/WebController.php b/src/Torrentio/Framework/Controller/WebController.php index cf5e6ee..5986701 100644 --- a/src/Torrentio/Framework/Controller/WebController.php +++ b/src/Torrentio/Framework/Controller/WebController.php @@ -2,6 +2,7 @@ namespace App\Torrentio\Framework\Controller; +use App\Base\ConfigResolver; use App\Base\Service\Broadcaster; use App\Torrentio\Action\Handler\GetMovieOptionsHandler; use App\Torrentio\Action\Handler\GetTvShowOptionsHandler; @@ -27,6 +28,7 @@ final class WebController extends AbstractController public function __construct( private readonly GetMovieOptionsHandler $getMovieOptionsHandler, private readonly GetTvShowOptionsHandler $getTvShowOptionsHandler, + private readonly ConfigResolver $configResolver, private readonly Broadcaster $broadcaster, ) {} @@ -40,10 +42,14 @@ final class WebController extends AbstractController $input->imdbId ); - $results = $cache->get($cacheId, function (ItemInterface $item) use ($input, $request) { - $item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0)); - return $this->getMovieOptionsHandler->handle($input->toCommand()); - }); + if (true === $this->configResolver->isTorrentioCacheEnabled()) { + $results = $cache->get($cacheId, function (ItemInterface $item) use ($input, $request) { + $item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0)); + return $this->getMovieOptionsHandler->handle($input->toCommand()); + }); + } else { + $results = $this->getMovieOptionsHandler->handle($input->toCommand()); + } if ($request->headers->get('Turbo-Frame')) { return $this->sendFragmentResponse($results, $request); @@ -66,10 +72,14 @@ final class WebController extends AbstractController ); try { - $results = $cache->get($cacheId, function (ItemInterface $item) use ($input) { - $item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0)); - return $this->getTvShowOptionsHandler->handle($input->toCommand()); - }); + if (true === $this->configResolver->isTorrentioCacheEnabled()) { + $results = $cache->get($cacheId, function (ItemInterface $item) use ($input) { + $item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0)); + return $this->getTvShowOptionsHandler->handle($input->toCommand()); + }); + } else { + $results = $this->getTvShowOptionsHandler->handle($input->toCommand()); + } if ($request->headers->get('Turbo-Frame')) { return $this->sendFragmentResponse($results, $request);