diff --git a/migrations/Version20251106045808.php b/migrations/Version20251106045808.php new file mode 100644 index 0000000..e6ff793 --- /dev/null +++ b/migrations/Version20251106045808.php @@ -0,0 +1,34 @@ +addSql(<<<'SQL' + ALTER TABLE monitor ADD poster VARCHAR(1024) DEFAULT NULL + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + ALTER TABLE monitor DROP poster + SQL); + } +} diff --git a/src/Monitor/Action/Handler/AddMonitorHandler.php b/src/Monitor/Action/Handler/AddMonitorHandler.php index 7a2ab54..823f8e9 100644 --- a/src/Monitor/Action/Handler/AddMonitorHandler.php +++ b/src/Monitor/Action/Handler/AddMonitorHandler.php @@ -8,6 +8,7 @@ use App\Monitor\Action\Result\AddMonitorResult; use App\Monitor\Framework\Entity\Monitor; use App\Monitor\Framework\Repository\MonitorRepository; use App\Monitor\MonitorEvents; +use App\Tmdb\TmdbClient; use App\User\Framework\Repository\UserRepository; use DateTimeImmutable; use OneToMany\RichBundle\Contract\CommandInterface; @@ -22,13 +23,17 @@ readonly class AddMonitorHandler implements HandlerInterface private MessageBusInterface $bus, private MonitorRepository $movieMonitorRepository, private UserRepository $userRepository, + private TmdbClient $tmdb, ) {} public function handle(CommandInterface $command): ResultInterface { $user = $this->userRepository->find($command->userId); + $poster = $this->getPoster($command->imdbId); + $monitor = (new Monitor()) ->setUser($user) + ->setPoster($poster) ->setTmdbId($command->tmdbId) ->setImdbId($command->imdbId) ->setTitle($command->title) @@ -56,4 +61,10 @@ readonly class AddMonitorHandler implements HandlerInterface ] ); } + + private function getPoster(string $imdbId): ?string + { + $data = $this->tmdb->tvShowDetails($imdbId); + return $data->poster; + } } diff --git a/src/Monitor/Action/Handler/MonitorTvShowHandler.php b/src/Monitor/Action/Handler/MonitorTvShowHandler.php index 732a25a..f777718 100644 --- a/src/Monitor/Action/Handler/MonitorTvShowHandler.php +++ b/src/Monitor/Action/Handler/MonitorTvShowHandler.php @@ -37,6 +37,7 @@ readonly class MonitorTvShowHandler implements HandlerInterface { $this->logger->info('> [MonitorTvShowHandler] Executing MonitorTvShowHandler'); $monitor = $this->monitorRepository->find($command->monitorId); + $this->refreshData($monitor); // Check current episodes $downloadedEpisodes = $this->mediaFiles @@ -157,4 +158,15 @@ readonly class MonitorTvShowHandler implements HandlerInterface 'status' => ['New', 'Active', 'In Progress'] ]) !== null; } + + private function refreshData(Monitor $monitor) + { + if (null === $monitor->getPoster()) { + $this->logger->info('> [MonitorTvShowHandler] Refreshing poster for "' . $monitor->getTitle() . '"'); + $poster = $this->tmdb->tvshowDetails($monitor->getImdbId())->poster; + if (null !== $poster && "" !== $poster) { + $monitor->setPoster($poster); + } + } + } } diff --git a/src/Monitor/Framework/Entity/Monitor.php b/src/Monitor/Framework/Entity/Monitor.php index e2b0a2f..412f327 100644 --- a/src/Monitor/Framework/Entity/Monitor.php +++ b/src/Monitor/Framework/Entity/Monitor.php @@ -50,6 +50,9 @@ class Monitor #[ORM\Column(nullable: true)] private ?int $searchCount = null; + #[ORM\Column(nullable: true)] + private ?string $poster = null; + #[ORM\Column] private bool $onlyFuture = true; @@ -230,6 +233,17 @@ class Monitor return $this; } + public function getPoster(): ?string + { + return $this->poster; + } + + public function setPoster(?string $poster): ?self + { + $this->poster = $poster; + return $this; + } + public function getParent(): ?self { return $this->parent;