Merge branch 'dev-filename-convention'
All checks were successful
CI / build-test (push) Successful in 2m57s

This commit is contained in:
Brock H Caldwell
2026-03-18 09:29:17 -05:00

View File

@@ -11,6 +11,7 @@ use App\Monitor\Framework\Entity\Monitor;
use App\Monitor\Framework\Repository\MonitorRepository; use App\Monitor\Framework\Repository\MonitorRepository;
use App\Tmdb\Dto\TmdbEpisodeDto; use App\Tmdb\Dto\TmdbEpisodeDto;
use App\Tmdb\TmdbClient; use App\Tmdb\TmdbClient;
use App\Tmdb\TmdbResult;
use Carbon\Carbon; use Carbon\Carbon;
use DateTimeImmutable; use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
@@ -36,18 +37,14 @@ readonly class MonitorTvShowHandler implements HandlerInterface
public function handle(CommandInterface $command): ResultInterface public function handle(CommandInterface $command): ResultInterface
{ {
$this->logger->info('> [MonitorTvShowHandler] Executing MonitorTvShowHandler'); $this->logger->info('> [MonitorTvShowHandler] Executing MonitorTvShowHandler');
$monitor = $this->monitorRepository->find($command->monitorId); $monitor = $this->monitorRepository->find($command->monitorId);
$this->refreshData($monitor); $showTmdbData = $this->tmdb->tvshowDetails($monitor->getImdbId());
$this->refreshData($monitor, $showTmdbData);
// Check current episodes // Check current episodes
$downloadedEpisodes = $this->mediaFiles $downloadedEpisodes = $this->getDownloadedEpisodes($monitor->getTitle(), $showTmdbData);
->getEpisodes($monitor->getTitle())
->map(fn($episode) => (object)(new PTN())->parse($episode))
->filter(fn($episode) => property_exists($episode, 'episode')
&& property_exists($episode, 'season')
&& null !== $episode->episode
&& null !== $episode->season
);
$this->logger->info('> [MonitorTvShowHandler] Found ' . count($downloadedEpisodes) . ' downloaded episodes for title: ' . $monitor->getTitle()); $this->logger->info('> [MonitorTvShowHandler] Found ' . count($downloadedEpisodes) . ' downloaded episodes for title: ' . $monitor->getTitle());
@@ -130,6 +127,33 @@ readonly class MonitorTvShowHandler implements HandlerInterface
); );
} }
private function getDownloadedEpisodes(string $title, TmdbResult $showTmdbData): Map
{
// Episodes in folder w/o the year
$downloadedEpisodes = $this->mediaFiles
->getEpisodes($title)
->map(fn($episode) => (object) new PTN()->parse($episode))
->filter(fn($episode) =>
property_exists($episode, 'episode')
&& property_exists($episode, 'season')
&& null !== $episode->episode
&& null !== $episode->season
);
return $downloadedEpisodes->concat(
// Episodes in folder w/ the year
$this->mediaFiles
->getEpisodes(sprintf("%s (%s)", $title, $showTmdbData->year))
->map(fn($episode) => (object) new PTN()->parse($episode))
->filter(fn($episode) =>
property_exists($episode, 'episode')
&& property_exists($episode, 'season')
&& null !== $episode->episode
&& null !== $episode->season
)
);
}
private function episodeReleasedAfterMonitorCreated( private function episodeReleasedAfterMonitorCreated(
string|DateTimeImmutable $monitorStartDate, string|DateTimeImmutable $monitorStartDate,
TmdbEpisodeDto $episodeInShow TmdbEpisodeDto $episodeInShow
@@ -159,11 +183,11 @@ readonly class MonitorTvShowHandler implements HandlerInterface
]) !== null; ]) !== null;
} }
private function refreshData(Monitor $monitor) private function refreshData(Monitor $monitor, TmdbResult $showTmdbData)
{ {
if (null === $monitor->getPoster()) { if (null === $monitor->getPoster()) {
$this->logger->info('> [MonitorTvShowHandler] Refreshing poster for "' . $monitor->getTitle() . '"'); $this->logger->info('> [MonitorTvShowHandler] Refreshing poster for "' . $monitor->getTitle() . '"');
$poster = $this->tmdb->tvshowDetails($monitor->getImdbId())->poster; $poster = $showTmdbData->poster;
if (null !== $poster && "" !== $poster) { if (null !== $poster && "" !== $poster) {
$monitor->setPoster($poster); $monitor->setPoster($poster);
} }