|
|
|
|
@@ -11,7 +11,6 @@ use App\Monitor\Framework\Entity\Monitor;
|
|
|
|
|
use App\Monitor\Framework\Repository\MonitorRepository;
|
|
|
|
|
use App\Tmdb\Dto\TmdbEpisodeDto;
|
|
|
|
|
use App\Tmdb\TmdbClient;
|
|
|
|
|
use App\Tmdb\TmdbResult;
|
|
|
|
|
use Carbon\Carbon;
|
|
|
|
|
use DateTimeImmutable;
|
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
|
@@ -37,14 +36,18 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
|
|
|
|
public function handle(CommandInterface $command): ResultInterface
|
|
|
|
|
{
|
|
|
|
|
$this->logger->info('> [MonitorTvShowHandler] Executing MonitorTvShowHandler');
|
|
|
|
|
|
|
|
|
|
$monitor = $this->monitorRepository->find($command->monitorId);
|
|
|
|
|
$showTmdbData = $this->tmdb->tvshowDetails($monitor->getImdbId());
|
|
|
|
|
|
|
|
|
|
$this->refreshData($monitor, $showTmdbData);
|
|
|
|
|
$this->refreshData($monitor);
|
|
|
|
|
|
|
|
|
|
// Check current episodes
|
|
|
|
|
$downloadedEpisodes = $this->getDownloadedEpisodes($monitor->getTitle(), $showTmdbData);
|
|
|
|
|
$downloadedEpisodes = $this->mediaFiles
|
|
|
|
|
->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());
|
|
|
|
|
|
|
|
|
|
@@ -127,33 +130,6 @@ 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(
|
|
|
|
|
string|DateTimeImmutable $monitorStartDate,
|
|
|
|
|
TmdbEpisodeDto $episodeInShow
|
|
|
|
|
@@ -183,11 +159,11 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
|
|
|
|
]) !== null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function refreshData(Monitor $monitor, TmdbResult $showTmdbData)
|
|
|
|
|
private function refreshData(Monitor $monitor)
|
|
|
|
|
{
|
|
|
|
|
if (null === $monitor->getPoster()) {
|
|
|
|
|
$this->logger->info('> [MonitorTvShowHandler] Refreshing poster for "' . $monitor->getTitle() . '"');
|
|
|
|
|
$poster = $showTmdbData->poster;
|
|
|
|
|
$poster = $this->tmdb->tvshowDetails($monitor->getImdbId())->poster;
|
|
|
|
|
if (null !== $poster && "" !== $poster) {
|
|
|
|
|
$monitor->setPoster($poster);
|
|
|
|
|
}
|
|
|
|
|
|