fix: prepends episode id to tvshow files that don't include it

This commit is contained in:
2025-07-09 11:47:20 -05:00
parent 5729949774
commit dd52a903f6
6 changed files with 53 additions and 21 deletions

View File

@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20250709161037 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->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);
}
}

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;
}
}