From dd52a903f6aef32c3ff20e64ae4196a8845ae207 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Wed, 9 Jul 2025 11:47:20 -0500 Subject: [PATCH] fix: prepends episode id to tvshow files that don't include it --- migrations/Version20250709161037.php | 35 +++++++++++++++++++ src/Download/Downloader/ProcessDownloader.php | 5 ++- .../Framework/Controller/ApiController.php | 11 +----- src/Download/Framework/Entity/Download.php | 10 +++--- .../Repository/DownloadRepository.php | 11 ++++-- .../Action/Handler/MonitorTvShowHandler.php | 2 +- 6 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 migrations/Version20250709161037.php diff --git a/migrations/Version20250709161037.php b/migrations/Version20250709161037.php new file mode 100644 index 0000000..6ac6939 --- /dev/null +++ b/migrations/Version20250709161037.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + ALTER TABLE download CHANGE batch_id episode_id VARCHAR(255) 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 download CHANGE episode_id batch_id VARCHAR(255) DEFAULT NULL + SQL); + } +} diff --git a/src/Download/Downloader/ProcessDownloader.php b/src/Download/Downloader/ProcessDownloader.php index 6b93fb8..947c7c4 100644 --- a/src/Download/Downloader/ProcessDownloader.php +++ b/src/Download/Downloader/ProcessDownloader.php @@ -15,7 +15,6 @@ class ProcessDownloader implements DownloaderInterface /** * @var RedisAdapter $cache */ - public function __construct( private EntityManagerInterface $entityManager, private MediaFiles $mediaFiles, @@ -34,11 +33,11 @@ class ProcessDownloader implements DownloaderInterface $downloadPreferences = $downloadEntity->getUser()->getDownloadPreferences(); $path = $this->getDownloadPath($mediaType, $title, $downloadPreferences); - $processArgs = ['wget', $url]; + $processArgs = ['wget', '-O', $downloadEntity->getFilename(), $url]; if ($downloadEntity->getStatus() === 'Paused') { $downloadEntity->setStatus('In Progress'); - $processArgs = ['wget', '-c', $url]; + $processArgs = ['wget', '-c', '-O', $downloadEntity->getFilename(), $url]; } else { $downloadEntity->setProgress(0); } diff --git a/src/Download/Framework/Controller/ApiController.php b/src/Download/Framework/Controller/ApiController.php index b28bfb9..9a9086c 100644 --- a/src/Download/Framework/Controller/ApiController.php +++ b/src/Download/Framework/Controller/ApiController.php @@ -32,13 +32,6 @@ class ApiController extends AbstractController public function download( DownloadMediaInput $input, ): Response { - $ptn = (object) new Ptn()->parse($input->filename); - if ($input->mediaType === "tvshows" && - !property_exists($ptn, 'episode') && !property_exists($ptn, 'season') - ) { - $input->filename = $input->episodeId . '_' . $input->filename; - } - $download = $this->downloadRepository->insert( $this->getUser(), $input->url, @@ -46,10 +39,8 @@ class ApiController extends AbstractController $input->filename, $input->imdbId, $input->mediaType, - "", + $input->episodeId, ); - $this->downloadRepository->getEntityManager()->persist($download); - $this->downloadRepository->getEntityManager()->flush(); $input->downloadId = $download->getId(); $input->userId = $this->getUser()->getId(); diff --git a/src/Download/Framework/Entity/Download.php b/src/Download/Framework/Entity/Download.php index 67add3a..777029f 100644 --- a/src/Download/Framework/Entity/Download.php +++ b/src/Download/Framework/Entity/Download.php @@ -42,7 +42,7 @@ class Download private ?int $progress = null; #[ORM\Column(length: 255, nullable: true)] - private ?string $batchId = null; + private ?string $episodeId = null; #[ORM\ManyToOne(inversedBy: 'downloads')] private ?User $user = null; @@ -143,14 +143,14 @@ class Download return $this; } - public function getBatchId(): ?string + public function getEpisodeId(): ?string { - return $this->batchId; + return $this->episodeId; } - public function setBatchId(?string $batchId): static + public function setEpisodeId(?string $episodeId): static { - $this->batchId = $batchId; + $this->episodeId = $episodeId; return $this; } diff --git a/src/Download/Framework/Repository/DownloadRepository.php b/src/Download/Framework/Repository/DownloadRepository.php index b0b6a35..b0a4610 100644 --- a/src/Download/Framework/Repository/DownloadRepository.php +++ b/src/Download/Framework/Repository/DownloadRepository.php @@ -7,6 +7,7 @@ use App\Download\Framework\Entity\Download; use App\User\Framework\Entity\User; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Nihilarr\PTN; use Symfony\Component\Security\Core\User\UserInterface; /** @@ -62,9 +63,15 @@ class DownloadRepository extends ServiceEntityRepository string $filename, string $imdbId, string $mediaType, - string $batchId, + ?string $episodeId = null, string $status = 'New' ): Download { + $ptn = (object) new Ptn()->parse($filename); + if ($mediaType === "tvshows" && + !property_exists($ptn, 'episode') && !property_exists($ptn, 'season') + ) { + $filename = $episodeId . '_' . $filename; + } /** @var User $user */ $download = (new Download()) ->setUser($user) @@ -73,7 +80,7 @@ class DownloadRepository extends ServiceEntityRepository ->setFilename($filename) ->setImdbId($imdbId) ->setMediaType($mediaType) - ->setBatchId($batchId) + ->setEpisodeId($episodeId) ->setProgress(0) ->setStatus($status); diff --git a/src/Monitor/Action/Handler/MonitorTvShowHandler.php b/src/Monitor/Action/Handler/MonitorTvShowHandler.php index cec13ec..5bad0f6 100644 --- a/src/Monitor/Action/Handler/MonitorTvShowHandler.php +++ b/src/Monitor/Action/Handler/MonitorTvShowHandler.php @@ -149,7 +149,7 @@ readonly class MonitorTvShowHandler implements HandlerInterface 'monitorType' => 'tvepisode', 'season' => $episode['season_number'], 'episode' => $episode['episode_number'], - 'status' => ['New', 'Active', 'In Progress'] + 'status' => ['New', 'Active', 'In Progress', 'Complete'] ]) !== null; } }