fix: monitors after tmdb updates

This commit is contained in:
2025-09-15 09:41:20 -05:00
parent 09e1c75826
commit af8a30826c
2 changed files with 15 additions and 13 deletions

View File

@@ -42,7 +42,7 @@ readonly class MonitorTvEpisodeHandler implements HandlerInterface
$monitor = $this->monitorRepository->find($command->movieMonitorId); $monitor = $this->monitorRepository->find($command->movieMonitorId);
$this->logger->info('> [MonitorTvEpisodeHandler] Executing MonitorTvEpisodeHandler for ' . $monitor->getTitle() . ' season ' . $monitor->getSeason() . ' episode ' . $monitor->getEpisode()); $this->logger->info('> [MonitorTvEpisodeHandler] Executing MonitorTvEpisodeHandler for ' . $monitor->getTitle() . ' season ' . $monitor->getSeason() . ' episode ' . $monitor->getEpisode());
$episodeData = $this->tmdb->episodeDetails($monitor->getTmdbId(), $monitor->getSeason(), $monitor->getEpisode()); $episodeData = $this->tmdb->tvEpisodeDetails($monitor->getTmdbId(), $monitor->getSeason(), $monitor->getEpisode());
if (null === $monitor->getAirDate() && null !== $episodeData->episodeAirDate && "" !== $episodeData->episodeAirDate) { if (null === $monitor->getAirDate() && null !== $episodeData->episodeAirDate && "" !== $episodeData->episodeAirDate) {
$monitor->setAirDate(Carbon::parse($episodeData->episodeAirDate)); $monitor->setAirDate(Carbon::parse($episodeData->episodeAirDate));

View File

@@ -9,6 +9,7 @@ use App\Monitor\Action\Command\MonitorTvEpisodeCommand;
use App\Monitor\Action\Result\MonitorTvShowResult; use App\Monitor\Action\Result\MonitorTvShowResult;
use App\Monitor\Framework\Entity\Monitor; 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\TmdbClient; use App\Tmdb\TmdbClient;
use Carbon\Carbon; use Carbon\Carbon;
use DateTimeImmutable; use DateTimeImmutable;
@@ -61,8 +62,9 @@ readonly class MonitorTvShowHandler implements HandlerInterface
if ($downloadedEpisodes->count() !== $episodesInShow->count()) { if ($downloadedEpisodes->count() !== $episodesInShow->count()) {
// Dispatch Episode commands for each missing Episode // Dispatch Episode commands for each missing Episode
foreach ($episodesInShow as $episode) { foreach ($episodesInShow as $episode) {
/** @var TmdbEpisodeDto $episode */
// Only monitor future episodes // Only monitor future episodes
$this->logger->info('> [MonitorTvShowHandler] Evaluating "' . $monitor->getTitle() . '", season "' . $episode['season_number'] . '" episode "' . $episode['episode_number'] . '"'); $this->logger->info('> [MonitorTvShowHandler] Evaluating "' . $monitor->getTitle() . '", season "' . $episode->seasonNumber . '" episode "' . $episode->episodeNumber . '"');
$episodeInFuture = $this->episodeReleasedAfterMonitorCreated($monitor->getCreatedAt(), $episode); $episodeInFuture = $this->episodeReleasedAfterMonitorCreated($monitor->getCreatedAt(), $episode);
$this->logger->info('> [MonitorTvShowHandler] ...Released after monitor started? ' . (true === $episodeInFuture ? 'YES' : 'NO')); $this->logger->info('> [MonitorTvShowHandler] ...Released after monitor started? ' . (true === $episodeInFuture ? 'YES' : 'NO'));
if (false === $episodeInFuture) { if (false === $episodeInFuture) {
@@ -94,9 +96,9 @@ readonly class MonitorTvShowHandler implements HandlerInterface
->setImdbId($monitor->getImdbId()) ->setImdbId($monitor->getImdbId())
->setTitle($monitor->getTitle()) ->setTitle($monitor->getTitle())
->setMonitorType('tvepisode') ->setMonitorType('tvepisode')
->setSeason($episode['season_number']) ->setSeason($episode->seasonNumber)
->setEpisode($episode['episode_number']) ->setEpisode($episode->episodeNumber)
->setAirDate($episode['air_date'] !== null && $episode['air_date'] !== "" ? Carbon::parse($episode['air_date']) : null) ->setAirDate($episode->airDate !== null && $episode->airDate !== "" ? Carbon::parse($episode->airDate) : null)
->setCreatedAt(new DateTimeImmutable()) ->setCreatedAt(new DateTimeImmutable())
->setSearchCount(0) ->setSearchCount(0)
->setStatus('New'); ->setStatus('New');
@@ -128,29 +130,29 @@ readonly class MonitorTvShowHandler implements HandlerInterface
); );
} }
private function episodeReleasedAfterMonitorCreated(string|DateTimeImmutable $monitorStartDate, array $episodeInShow): bool private function episodeReleasedAfterMonitorCreated(string|DateTimeImmutable $monitorStartDate, TmdbEpisodeDto $episodeInShow): bool
{ {
$monitorStartDate = Carbon::parse($monitorStartDate)->setTime(0, 0); $monitorStartDate = Carbon::parse($monitorStartDate)->setTime(0, 0);
$episodeAirDate = Carbon::parse($episodeInShow['air_date']); $episodeAirDate = Carbon::parse($episodeInShow->airDate);
return $episodeAirDate >= $monitorStartDate; return $episodeAirDate >= $monitorStartDate;
} }
private function episodeExists(array $episodeInShow, Map $downloadedEpisodes): bool private function episodeExists(TmdbEpisodeDto $episodeInShow, Map $downloadedEpisodes): bool
{ {
return $downloadedEpisodes->filter( return $downloadedEpisodes->filter(
fn (object $episode) => $episode->episode === $episodeInShow['episode_number'] fn (object $episode) => $episode->episode === $episodeInShow->episodeNumber
&& $episode->season === $episodeInShow['season_number'] && $episode->season === $episodeInShow->seasonNumber
)->count() > 0; )->count() > 0;
} }
private function monitorExists(Monitor $monitor, array $episode): bool private function monitorExists(Monitor $monitor, TmdbEpisodeDto $episode): bool
{ {
return $this->monitorRepository->findOneBy([ return $this->monitorRepository->findOneBy([
'imdbId' => $monitor->getImdbId(), 'imdbId' => $monitor->getImdbId(),
'title' => $monitor->getTitle(), 'title' => $monitor->getTitle(),
'monitorType' => 'tvepisode', 'monitorType' => 'tvepisode',
'season' => $episode['season_number'], 'season' => $episode->seasonNumber,
'episode' => $episode['episode_number'], 'episode' => $episode->episodeNumber,
'status' => ['New', 'Active', 'In Progress'] 'status' => ['New', 'Active', 'In Progress']
]) !== null; ]) !== null;
} }