fix: monitors check for episodes in folders w/ & w/o the year appended (backwards compatible)
This commit is contained in:
@@ -11,6 +11,7 @@ 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;
|
||||
@@ -36,18 +37,14 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
||||
public function handle(CommandInterface $command): ResultInterface
|
||||
{
|
||||
$this->logger->info('> [MonitorTvShowHandler] Executing MonitorTvShowHandler');
|
||||
|
||||
$monitor = $this->monitorRepository->find($command->monitorId);
|
||||
$this->refreshData($monitor);
|
||||
$showTmdbData = $this->tmdb->tvshowDetails($monitor->getImdbId());
|
||||
|
||||
$this->refreshData($monitor, $showTmdbData);
|
||||
|
||||
// Check current episodes
|
||||
$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
|
||||
);
|
||||
$downloadedEpisodes = $this->getDownloadedEpisodes($monitor->getTitle(), $showTmdbData);
|
||||
|
||||
$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(
|
||||
string|DateTimeImmutable $monitorStartDate,
|
||||
TmdbEpisodeDto $episodeInShow
|
||||
@@ -159,11 +183,11 @@ readonly class MonitorTvShowHandler implements HandlerInterface
|
||||
]) !== null;
|
||||
}
|
||||
|
||||
private function refreshData(Monitor $monitor)
|
||||
private function refreshData(Monitor $monitor, TmdbResult $showTmdbData)
|
||||
{
|
||||
if (null === $monitor->getPoster()) {
|
||||
$this->logger->info('> [MonitorTvShowHandler] Refreshing poster for "' . $monitor->getTitle() . '"');
|
||||
$poster = $this->tmdb->tvshowDetails($monitor->getImdbId())->poster;
|
||||
$poster = $showTmdbData->poster;
|
||||
if (null !== $poster && "" !== $poster) {
|
||||
$monitor->setPoster($poster);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user