fix: allows local or queued downloads

This commit is contained in:
2025-07-15 10:29:32 -05:00
parent 70f551cea9
commit a126871af8

View File

@@ -5,7 +5,6 @@ namespace App\Search\Framework\Command;
use Aimeos\Map;
use App\Download\Action\Command\DownloadMediaCommand;
use App\Download\Action\Handler\DownloadMediaHandler;
use App\Download\Framework\Entity\Download;
use App\Download\Framework\Repository\DownloadRepository;
use App\Search\Action\Handler\SearchHandler;
use App\Search\Action\Command\SearchCommand as CommandInput;
@@ -22,10 +21,12 @@ use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ChoiceQuestion;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Messenger\MessageBusInterface;
#[AsCommand('search')]
class SearchCommand extends Command
@@ -36,12 +37,14 @@ class SearchCommand extends Command
private UserRepository $userRepository;
private DownloadRepository $downloadRepository;
private DownloadMediaHandler $downloadMediaHandler;
private MessageBusInterface $bus;
public function __construct(SearchHandler $searchHandler, GetTvShowOptionsHandler $getTvShowOptionsHandler,
GetMovieOptionsHandler $getMovieOptionsHandler,
UserRepository $userRepository,
DownloadRepository $downloadRepository,
DownloadMediaHandler $downloadMediaHandler,
MessageBusInterface $bus,
?string $name = null
) {
parent::__construct($name);
@@ -51,33 +54,44 @@ class SearchCommand extends Command
$this->userRepository = $userRepository;
$this->downloadRepository = $downloadRepository;
$this->downloadMediaHandler = $downloadMediaHandler;
$this->bus = $bus;
}
protected function configure()
{
$this->addArgument('term', InputArgument::REQUIRED);
$this->addOption('local', 'l', InputOption::VALUE_NONE, 'Perform the download locally instead of submitting it to the queue.');
}
public function run(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$command = new CommandInput($input->getArgument('term'));
// Perform search
$mediaOptions = $this->searchHandler->handle($command);
// Render results and ask the User to pick one
$mediaChoice = $this->askToChooseMediaOption($io, $output, $mediaOptions);
// Find download options based on the User's choice
$downloadOptions = $this->fetchDownloadOptions($mediaChoice);
// Render results and ask the User to pick one
$downloadChoice = $this->askToChooseDownloadOption($io, $output, $downloadOptions);
// Have user confirm download action
$confirmation = $this->askToConfirmDownload($io, $output, $downloadChoice);
// Begin download or submit to the queue
if (true === $confirmation) {
$this->submitDownload($io, $mediaChoice, $downloadChoice);
$downloadLocally = $input->getOption('local');
$this->submitDownload($io, $mediaChoice, $downloadChoice, $downloadLocally);
} else {
$io->success('No results found.');
}
$io->success('Success!');
return Command::SUCCESS;
}
@@ -162,7 +176,7 @@ class SearchCommand extends Command
return $choice === 'yes';
}
private function submitDownload(SymfonyStyle $io, TmdbResult $mediaChoice, TorrentioResult $downloadOption): void
private function submitDownload(SymfonyStyle $io, TmdbResult $mediaChoice, TorrentioResult $downloadOption, bool $downloadLocally = false): void
{
$io->writeln('> Adding download record');
$user = $this->userRepository->find(1);
@@ -186,8 +200,13 @@ class SearchCommand extends Command
$download->getId()
);
$io->writeln('> Submitting download to queue');
$this->downloadMediaHandler->handle($downloadCommand);
if (true === $downloadLocally) {
$io->writeln('> Beginning local download');
$this->downloadMediaHandler->handle($downloadCommand);
} else {
$io->writeln('> Submitting download to queue');
$this->bus->dispatch($downloadCommand);
}
$io->writeln('> Download added to queue');
}