wip: pauses downloads
This commit is contained in:
15
src/Download/Action/Command/PauseDownloadCommand.php
Normal file
15
src/Download/Action/Command/PauseDownloadCommand.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Command;
|
||||
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
|
||||
/**
|
||||
* @implements CommandInterface<PauseDownloadCommand>
|
||||
*/
|
||||
class PauseDownloadCommand implements CommandInterface
|
||||
{
|
||||
public function __construct(
|
||||
public int $downloadId,
|
||||
) {}
|
||||
}
|
||||
@@ -47,7 +47,9 @@ readonly class DownloadMediaHandler implements HandlerInterface
|
||||
$download->getId()
|
||||
);
|
||||
|
||||
$this->downloadRepository->updateStatus($download->getId(), 'Complete');
|
||||
if ($download->getStatus() !== 'Paused') {
|
||||
$this->downloadRepository->updateStatus($download->getId(), 'Complete');
|
||||
}
|
||||
|
||||
} catch (\Throwable $exception) {
|
||||
throw new UnrecoverableMessageHandlingException($exception->getMessage(), 500);
|
||||
|
||||
39
src/Download/Action/Handler/PauseDownloadHandler.php
Normal file
39
src/Download/Action/Handler/PauseDownloadHandler.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Handler;
|
||||
|
||||
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;
|
||||
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,
|
||||
) {}
|
||||
|
||||
public function handle(CommandInterface $command): ResultInterface
|
||||
{
|
||||
/** @var Download $download */
|
||||
$download = $this->downloadRepository->find($command->downloadId);
|
||||
|
||||
$this->cache->get('download.pause.' . $download->getId(), function () {
|
||||
return true;
|
||||
});
|
||||
|
||||
$download->setFilename($download->getFilename() . self::PAUSED_EXTENSION);
|
||||
|
||||
return new PauseDownloadResult(200, 'Success', $download);
|
||||
}
|
||||
}
|
||||
24
src/Download/Action/Input/PauseDownloadInput.php
Normal file
24
src/Download/Action/Input/PauseDownloadInput.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Input;
|
||||
|
||||
use App\Download\Action\Command\PauseDownloadCommand;
|
||||
use OneToMany\RichBundle\Attribute\SourceRoute;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\InputInterface;
|
||||
|
||||
/** @implements InputInterface<PauseDownloadInput, PauseDownloadCommand> */
|
||||
class PauseDownloadInput implements InputInterface
|
||||
{
|
||||
public function __construct(
|
||||
#[SourceRoute('downloadId')]
|
||||
public int $downloadId,
|
||||
) {}
|
||||
|
||||
public function toCommand(): CommandInterface
|
||||
{
|
||||
return new PauseDownloadCommand(
|
||||
$this->downloadId,
|
||||
);
|
||||
}
|
||||
}
|
||||
16
src/Download/Action/Result/PauseDownloadResult.php
Normal file
16
src/Download/Action/Result/PauseDownloadResult.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Result;
|
||||
|
||||
use App\Download\Framework\Entity\Download;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
|
||||
/** @implements ResultInterface<PauseDownloadResult> */
|
||||
class PauseDownloadResult implements ResultInterface
|
||||
{
|
||||
public function __construct(
|
||||
public int $status,
|
||||
public string $message,
|
||||
public Download $download,
|
||||
) {}
|
||||
}
|
||||
Reference in New Issue
Block a user