Completed
Push — master ( 27dee6...22d68a )
by Stanislav
05:48
created

src/Command/TorrentAdd.php (1 issue)

Check for implicit conversion of array to boolean.

Best Practice Bug Minor

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Popstas\Transmission\Console\Command;
4
5
use Popstas\Transmission\Console\TransmissionClient;
6
use Symfony\Component\Console\Input\ArrayInput;
7
use Symfony\Component\Console\Input\InputArgument;
8
use Symfony\Component\Console\Input\InputInterface;
9
use Symfony\Component\Console\Input\InputOption;
10
use Symfony\Component\Console\Output\OutputInterface;
11
12
class TorrentAdd extends Command
13
{
14
    protected function configure()
15
    {
16
        parent::configure();
17
        $this
18
            ->setName('torrent-add')
19
            ->setAliases(['ta'])
20
            ->setDescription('Add torrents to Transmission')
21
            ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Don\'t ask confirmation')
22
            ->addArgument('torrent-files', InputArgument::IS_ARRAY, 'List of torrent files to add')
23
            ->setHelp(<<<EOT
24
## Add torrents
25
26
By default, Transmission may to freeze if you add several torrents at same time.
27
Therefore, preferred way to add torrents - with `torrent-add`.
28
After each add file command sleeps for 10 seconds for give time to freeze Transmission.
29
After that command waits for Transmission answer and add next file, etc.
30
31
```
32
transmission-cli torrent-add file|url [file2] [fileX]
33
```
34
EOT
35
            );
36
    }
37
38
    protected function execute(InputInterface $input, OutputInterface $output)
39
    {
40
        $client = $this->getApplication()->getClient();
41
        $config = $this->getApplication()->getConfig();
42
43
        $torrentFiles = $input->getArgument('torrent-files');
44
        foreach ($torrentFiles as $torrentFile) {
45
            $this->addFile($input, $output, $client, $torrentFile);
46
        }
47
48
        $output->writeln('All torrents added.');
49
50
        if (!$config->get('allow-duplicates')) {
51
            $this->removeDuplicates($input, $output);
52
        }
53
    }
54
55
    private function addFile(InputInterface $input, OutputInterface $output, TransmissionClient $client, $torrentFile)
56
    {
57
        $this->dryRun($input, $output, function () use ($torrentFile, $client, $input, $output) {
58
            $torrentAdded = $client->addTorrent($torrentFile);
59
            if ($torrentAdded) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $torrentAdded of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
60
                if (isset($torrentAdded['duplicate'])) {
61
                    $output->writeln($torrentFile . ' was not added. Probably it was added before.');
62
                } else {
63
                    $output->writeln($torrentFile . ' added. Waiting for Transmission...');
64
                    $client->waitForTransmission(10);
65
                }
66
            }
67
        }, 'dry-run, don\'t really add torrents');
68
    }
69
70
    private function removeDuplicates(InputInterface $input, OutputInterface $output)
71
    {
72
        $config = $this->getApplication()->getConfig();
73
74
        $command = $this->getApplication()->find('torrent-remove-duplicates');
75
        $arguments = array(
76
            'command'             => 'torrent-remove-duplicates',
77
            '--transmission-host' => $config->get('transmission-host'),
78
            '--yes'               => $input->getOption('yes'),
79
            '--dry-run'           => $input->getOption('dry-run')
80
        );
81
        $commandInput = new ArrayInput($arguments);
82
        $command->run($commandInput, $output);
83
    }
84
}
85