From a126871af8bfd12f7bdbb51f7111d2967003f1ae Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Tue, 15 Jul 2025 10:29:32 -0500 Subject: [PATCH] fix: allows local or queued downloads --- .../Framework/Command/SearchCommand.php | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Search/Framework/Command/SearchCommand.php b/src/Search/Framework/Command/SearchCommand.php index 909da44..08ed276 100644 --- a/src/Search/Framework/Command/SearchCommand.php +++ b/src/Search/Framework/Command/SearchCommand.php @@ -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'); }