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));
+ }
+}