feat: pauses & resumes downloads
This commit is contained in:
@@ -38,7 +38,9 @@ readonly class DownloadMediaHandler implements HandlerInterface
|
||||
}
|
||||
|
||||
try {
|
||||
$this->downloadRepository->updateStatus($download->getId(), 'In Progress');
|
||||
if ($download->getStatus() !== 'Paused') {
|
||||
$this->downloadRepository->updateStatus($download->getId(), 'In Progress');
|
||||
}
|
||||
|
||||
$this->downloader->download(
|
||||
$command->mediaType,
|
||||
|
||||
@@ -6,7 +6,6 @@ use App\Download\Action\Command\PauseDownloadCommand;
|
||||
use App\Download\Action\Result\PauseDownloadResult;
|
||||
use App\Download\Framework\Entity\Download;
|
||||
use App\Download\Framework\Repository\DownloadRepository;
|
||||
use App\Monitor\Service\MediaFiles;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\HandlerInterface;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
@@ -15,11 +14,8 @@ use Symfony\Contracts\Cache\CacheInterface;
|
||||
/** @implements HandlerInterface<PauseDownloadCommand, PauseDownloadResult> */
|
||||
readonly class PauseDownloadHandler implements HandlerInterface
|
||||
{
|
||||
const PAUSED_EXTENSION = '.paused';
|
||||
|
||||
public function __construct(
|
||||
private DownloadRepository $downloadRepository,
|
||||
private MediaFiles $mediaFiles,
|
||||
private CacheInterface $cache,
|
||||
) {}
|
||||
|
||||
@@ -32,8 +28,6 @@ readonly class PauseDownloadHandler implements HandlerInterface
|
||||
return true;
|
||||
});
|
||||
|
||||
$download->setFilename($download->getFilename() . self::PAUSED_EXTENSION);
|
||||
|
||||
return new PauseDownloadResult(200, 'Success', $download);
|
||||
}
|
||||
}
|
||||
|
||||
40
src/Download/Action/Handler/ResumeDownloadHandler.php
Normal file
40
src/Download/Action/Handler/ResumeDownloadHandler.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Handler;
|
||||
|
||||
use App\Download\Action\Command\DownloadMediaCommand;
|
||||
use App\Download\Action\Command\ResumeDownloadCommand;
|
||||
use App\Download\Action\Result\ResumeDownloadResult;
|
||||
use App\Download\Framework\Entity\Download;
|
||||
use App\Download\Framework\Repository\DownloadRepository;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\HandlerInterface;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
|
||||
/** @implements HandlerInterface<ResumeDownloadCommand, ResumeDownloadResult> */
|
||||
readonly class ResumeDownloadHandler implements HandlerInterface
|
||||
{
|
||||
public function __construct(
|
||||
private DownloadRepository $downloadRepository,
|
||||
private MessageBusInterface $messageBus,
|
||||
) {}
|
||||
|
||||
public function handle(CommandInterface $command): ResultInterface
|
||||
{
|
||||
/** @var Download $download */
|
||||
$download = $this->downloadRepository->find($command->downloadId);
|
||||
|
||||
$this->messageBus->dispatch(new DownloadMediaCommand(
|
||||
$download->getUrl(),
|
||||
$download->getTitle(),
|
||||
$download->getFilename(),
|
||||
$download->getMediaType(),
|
||||
$download->getImdbId(),
|
||||
$download->getUser()->getId(),
|
||||
$download->getId()
|
||||
));
|
||||
|
||||
return new ResumeDownloadResult(200, 'Success', $download);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user