From 2384bb2414e8a6c63a7a1e9e9779e1144640f564 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Tue, 8 Jul 2025 19:28:14 -0500 Subject: [PATCH] fix: adds missing indicator to tv episode results --- src/{Monitor => Base}/Service/MediaFiles.php | 2 +- .../Action/Handler/DownloadSeasonHandler.php | 7 +- src/Download/Downloader/ProcessDownloader.php | 2 +- .../Action/Handler/MonitorMovieHandler.php | 1 - .../Action/Handler/MonitorTvSeasonHandler.php | 2 +- .../Action/Handler/MonitorTvShowHandler.php | 2 +- .../Service/MonitorOptionEvaluator.php | 95 ------------------- .../Action/Handler/GetMediaInfoHandler.php | 6 ++ .../Action/Handler/GetMovieOptionsHandler.php | 2 +- .../Handler/GetTvShowOptionsHandler.php | 2 +- src/Twig/Extensions/UtilExtension.php | 5 +- templates/components/TvEpisodeList.html.twig | 25 +++++ 12 files changed, 39 insertions(+), 112 deletions(-) rename src/{Monitor => Base}/Service/MediaFiles.php (99%) delete mode 100644 src/Monitor/Service/MonitorOptionEvaluator.php diff --git a/src/Monitor/Service/MediaFiles.php b/src/Base/Service/MediaFiles.php similarity index 99% rename from src/Monitor/Service/MediaFiles.php rename to src/Base/Service/MediaFiles.php index 841ce06..c8bc847 100644 --- a/src/Monitor/Service/MediaFiles.php +++ b/src/Base/Service/MediaFiles.php @@ -1,6 +1,6 @@ getUser()->getUserPreferenceValues(); - - foreach ($results as $result) { - if (!in_array($userPreferences['language'], $result->languages)) { - continue; - } - - if ($result->resolution === $userPreferences['resolution'] - && $result->codec === $userPreferences['codec'] - ) { - $bestMatches[] = $result; - } - - if ($userPreferences['resolution'] === '2160p' - && $userPreferences['codec'] === $result->codec - && $result->resolution === '1080p' - ) { - $matches[] = $result; - } - - if ($userPreferences['codec'] === 'h264' - && $userPreferences['resolution'] === $result->resolution - && $result->codec === 'h265' - ) { - $matches[] = $result; - } - - if (($userPreferences['codec'] === null ) - && ($userPreferences['resolution'] === null )) { - $matches[] = $result; - } - } - - $sizeMatches = []; - - foreach ($bestMatches as $result) { - if (str_contains($result->size, 'GB')) { - $size = (int) trim(str_replace('GB', '', $result->size)) * 1024; - } else { - $size = (int) trim(str_replace('MB', '', $result->size)); - } - - if ($size > $sizeLow && $size < $sizeHigh) { - $sizeMatches[] = $result; - } - } - - if (!empty($sizeMatches)) { - return Map::from($sizeMatches)->usort(fn($a, $b) => $a->seeders <=> $b->seeders)->last(); - } - - foreach ($matches as $result) { - $size = 0; - if (str_contains($result->size, 'GB')) { - $size = (int) trim(str_replace('GB', '', $result->size)) * 1024; - } else { - $size = (int) trim(str_replace('MB', '', $result->size)); - } - - if ($size > $sizeLow && $size < $sizeHigh) { - $sizeMatches[] = $result; - } - } - - if (!empty($sizeMatches)) { - return Map::from($sizeMatches)->usort(fn($a, $b) => $a->seeders <=> $b->seeders)->last(); - } - - return null; - } -} diff --git a/src/Search/Action/Handler/GetMediaInfoHandler.php b/src/Search/Action/Handler/GetMediaInfoHandler.php index 24ae107..85bf597 100644 --- a/src/Search/Action/Handler/GetMediaInfoHandler.php +++ b/src/Search/Action/Handler/GetMediaInfoHandler.php @@ -2,6 +2,7 @@ namespace App\Search\Action\Handler; +use App\Base\Service\MediaFiles; use App\Search\Action\Command\GetMediaInfoCommand; use App\Search\Action\Result\GetMediaInfoResult; use App\Tmdb\Tmdb; @@ -14,12 +15,17 @@ class GetMediaInfoHandler implements HandlerInterface { public function __construct( private readonly Tmdb $tmdb, + private readonly MediaFiles $mediaFiles ) {} public function handle(CommandInterface $command): ResultInterface { $media = $this->tmdb->mediaDetails($command->imdbId, $command->mediaType); + foreach ($media->episodes[$command->season] as $key => $episode) { + $media->episodes[$command->season][$key]['file'] = $this->mediaFiles->episodeExists($media->title, $command->season, $episode['episode_number']); + } + return new GetMediaInfoResult($media, $command->season); } } diff --git a/src/Torrentio/Action/Handler/GetMovieOptionsHandler.php b/src/Torrentio/Action/Handler/GetMovieOptionsHandler.php index 51b9398..cc69ef1 100644 --- a/src/Torrentio/Action/Handler/GetMovieOptionsHandler.php +++ b/src/Torrentio/Action/Handler/GetMovieOptionsHandler.php @@ -2,7 +2,7 @@ namespace App\Torrentio\Action\Handler; -use App\Monitor\Service\MediaFiles; +use App\Base\Service\MediaFiles; use App\Tmdb\Tmdb; use App\Torrentio\Action\Result\GetMovieOptionsResult; use App\Torrentio\Client\Torrentio; diff --git a/src/Torrentio/Action/Handler/GetTvShowOptionsHandler.php b/src/Torrentio/Action/Handler/GetTvShowOptionsHandler.php index 1ef80a8..825d0e6 100644 --- a/src/Torrentio/Action/Handler/GetTvShowOptionsHandler.php +++ b/src/Torrentio/Action/Handler/GetTvShowOptionsHandler.php @@ -2,7 +2,7 @@ namespace App\Torrentio\Action\Handler; -use App\Monitor\Service\MediaFiles; +use App\Base\Service\MediaFiles; use App\Tmdb\Tmdb; use App\Torrentio\Action\Command\GetTvShowOptionsCommand; use App\Torrentio\Action\Result\GetTvShowOptionsResult; diff --git a/src/Twig/Extensions/UtilExtension.php b/src/Twig/Extensions/UtilExtension.php index fe80928..436b67a 100644 --- a/src/Twig/Extensions/UtilExtension.php +++ b/src/Twig/Extensions/UtilExtension.php @@ -2,12 +2,9 @@ namespace App\Twig\Extensions; -use App\Monitor\Framework\Entity\Monitor; -use App\Monitor\Service\MediaFiles; +use App\Base\Service\MediaFiles; use App\Torrentio\Action\Result\GetTvShowOptionsResult; -use App\Torrentio\Result\TorrentioResult; use ChrisUllyott\FileSize; -use Tmdb\Model\Tv\Episode; use Twig\Attribute\AsTwigFilter; use Twig\Attribute\AsTwigFunction; diff --git a/templates/components/TvEpisodeList.html.twig b/templates/components/TvEpisodeList.html.twig index ecff6af..e58fde7 100644 --- a/templates/components/TvEpisodeList.html.twig +++ b/templates/components/TvEpisodeList.html.twig @@ -39,6 +39,31 @@ {{ episode['air_date']|date(null, 'UTC') }} + + {% if episode['file'] != false %} + + + + exists + + + {% endif %} + + {% if episode['file'] == false %} + + missing + + {% endif %}