fix: prepends episode id to tvshow files that don't include it
This commit is contained in:
35
migrations/Version20250709161037.php
Normal file
35
migrations/Version20250709161037.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user