From d0cca49d75fac532ad11f14ce44e7eb38d0a8eb2 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 15 Feb 2015 21:39:44 +0100 Subject: [PATCH] Transmission commands --- src/Transmission/Client/GuzzleClient.php | 15 ++++ .../Command/TransmissionConfigureCommand.php | 43 +++++++++ .../Command/TransmissionDownloadCommand.php | 88 +++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 src/Transmission/Client/GuzzleClient.php create mode 100644 src/Transmission/Command/TransmissionConfigureCommand.php create mode 100644 src/Transmission/Command/TransmissionDownloadCommand.php diff --git a/src/Transmission/Client/GuzzleClient.php b/src/Transmission/Client/GuzzleClient.php new file mode 100644 index 0000000..633b18c --- /dev/null +++ b/src/Transmission/Client/GuzzleClient.php @@ -0,0 +1,15 @@ +client->setDefaultOption('verify', false); + } +} diff --git a/src/Transmission/Command/TransmissionConfigureCommand.php b/src/Transmission/Command/TransmissionConfigureCommand.php new file mode 100644 index 0000000..9492bda --- /dev/null +++ b/src/Transmission/Command/TransmissionConfigureCommand.php @@ -0,0 +1,43 @@ +setName('transmission:configure') + ->setDescription('') + // ->addArgument('foo', InputArgument::OPTIONAL, '') + // ->addOption('bar', null, InputOption::VALUE_NONE, '') + ->setHelp("The %command.name% "); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $configLoader = new ConfigLoader(); + $dialog = $this->getHelperSet()->get('dialog'); + + $host = $dialog->ask($output, 'Host (eg: https://seedox.example.com/): ', null); + $endPoint = $dialog->ask($output, 'End point [/transmission/rpc]: ', null); + $username = $dialog->ask($output, 'Username: ', null); + $password = $dialog->askHiddenResponse($output, 'Password (hidden): ', null); + + $configLoader->save(array( + 'transmission' => array( + 'host' => $host, + 'endpoint' => $endPoint ? $endPoint : '/transmission/rpc', + 'username' => $username, + 'password' => $password, + ) + )); + } +} diff --git a/src/Transmission/Command/TransmissionDownloadCommand.php b/src/Transmission/Command/TransmissionDownloadCommand.php new file mode 100644 index 0000000..5d05a3c --- /dev/null +++ b/src/Transmission/Command/TransmissionDownloadCommand.php @@ -0,0 +1,88 @@ +setName('transmission:download') + ->setDescription('Download a torrent') + ->addArgument('id', InputArgument::REQUIRED, 'Torrent ID') + ->setHelp("%command.name% + +Download a torrent. + +Usage: transmission:download TORRENT_ID"); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $configLoader = new ConfigLoader(); + + if (!isset($configLoader->getConfig()['transmission'])) { + $output->writeln('No configuration found.'); + + return; + } + + $config = $configLoader->getConfig()['transmission']; + + $outputFile = sprintf('.%d', time()); + + $inputData = array( + 'command' => 'torrents:download', + 'id' => $input->getArgument('id'), + 'output_file' => $outputFile, + '-q' => true, + ); + + $options = []; + + if (!empty($config['username']) and !empty($config['password'])) { + $options = array( + 'request.options' => array( + 'auth' => array($config['username'], $config['password']) + ) + ); + } + + try { + $client = new GuzzleClient($config['host'], $options); + + $transmission = new Transmission($configLoader->getConfig()['transmission'], $client); + + $this->getApplication()->doRun(new ArrayInput($inputData), $output); + + $content = base64_encode(file_get_contents($outputFile)); + + $torrent = $transmission->add($content, true); + } catch (\Exception $e) { + unlink($outputFile); + + $output->writeln(sprintf( + 'An error occured. %s', + $e->getMessage() + )); + + $output->writeln(sprintf('Torrent %s removed', $outputFile)); + + return; + } + + unlink($outputFile); + + $output->writeln(sprintf('Download started.', $outputFile)); + $output->writeln(sprintf('Torrent %s removed', $outputFile)); + } +}