diff --git a/README.md b/README.md
index 88f4f0e..23ddc8c 100644
--- a/README.md
+++ b/README.md
@@ -182,6 +182,8 @@ Help:
Search torrents.
Usage: torrents:search QUERY [OPTIONS]
+
+ Sort values \"seed\", \"leech\", \"size\", \"name\", \"id\"
--terms does not work (API bug)
```
@@ -274,7 +276,8 @@ Help:
Usage: torrents:search:top [OPTIONS]
- Period values: "100", "day", "week", "month"
+ Period values \"100\" (default), \"day\", \"week\", \"month\"
+ Sort values \"seed\", \"leech\", \"size\", \"name\", \"id\"
```
diff --git a/src/Console/Command/TorrentsSearchCommand.php b/src/Console/Command/TorrentsSearchCommand.php
index 9baafdb..dc47f92 100644
--- a/src/Console/Command/TorrentsSearchCommand.php
+++ b/src/Console/Command/TorrentsSearchCommand.php
@@ -12,6 +12,7 @@ use Api\ConfigLoader;
use Api\ClientResponse;
use Api\ClientException;
use Helper\Formater;
+use Helper\Render;
class TorrentsSearchCommand extends Command
{
@@ -26,12 +27,16 @@ class TorrentsSearchCommand extends Command
->addOption('sub-category', 's', InputOption::VALUE_REQUIRED, 'Filter by sub-category ID')
->addOption('category', 'c', InputOption::VALUE_REQUIRED, 'Filter by category ID')
->addOption('terms', 't', InputOption::VALUE_REQUIRED, 'Filter by terms IDs (separated by ",")')
+ ->addOption('sort', null, InputOption::VALUE_REQUIRED, 'Sort')
+ ->addOption('asc', null, InputOption::VALUE_NONE, 'Ascending sort')
->setHelp("%command.name%
Search torrents.
Usage: torrents:search QUERY [OPTIONS]
+Sort values \"seed\", \"leech\", \"size\", \"name\", \"id\"
+
--terms does not work (API bug)");
}
@@ -84,8 +89,28 @@ Usage: torrents:search QUERY [OPTIONS]
}
$response = $this->searchTorrents($client, $input, $termsTree);
+
+ if ($response->hasError()) {
+ $output->writeln(sprintf(
+ '%s (%d)',
+ $response->getErrorMessage(),
+ $response->getErrorCode()
+ ));
- $this->showResults($response, $output);
+ return;
+ }
+
+ $options = [];
+
+ if ($input->getOption('sort')) {
+ $options['sort'] = $input->getOption('sort');
+ }
+
+ if ($input->getOption('asc')) {
+ $options['asc'] = true;
+ }
+
+ Render::torrents($response->getData()['torrents'], $output, $options);
} catch (ClientException $e) {
$output->writeln(sprintf('An error occured. %s', $e->getMessage()));
}
diff --git a/src/Console/Command/TorrentsSearchMoviesCommand.php b/src/Console/Command/TorrentsSearchMoviesCommand.php
index 9e3c431..222b3e6 100644
--- a/src/Console/Command/TorrentsSearchMoviesCommand.php
+++ b/src/Console/Command/TorrentsSearchMoviesCommand.php
@@ -20,6 +20,8 @@ class TorrentsSearchMoviesCommand extends Command
->addOption('offset', 'o', InputOption::VALUE_REQUIRED, 'Page number')
->addOption('limit', 'l', InputOption::VALUE_REQUIRED, 'Number of results per page')
->addOption('terms', 't', InputOption::VALUE_REQUIRED, 'Filter by terms IDs (separated by ",")')
+ ->addOption('sort', null, InputOption::VALUE_REQUIRED, 'Sort')
+ ->addOption('asc', null, InputOption::VALUE_NONE, 'Ascending sort')
->setHelp("%command.name%
Search movies.
@@ -37,7 +39,7 @@ Usage: torrents:search:movies QUERY [OPTIONS]
'--sub-category' => 631,
);
- foreach (['offset', 'limit', 'terms'] as $p) {
+ foreach (['offset', 'limit', 'terms', 'sort', 'asc'] as $p) {
$value = $input->getOption($p);
if (null !== $value) {
diff --git a/src/Console/Command/TorrentsSearchSeriesCommand.php b/src/Console/Command/TorrentsSearchSeriesCommand.php
index ccb2dc3..e8def61 100644
--- a/src/Console/Command/TorrentsSearchSeriesCommand.php
+++ b/src/Console/Command/TorrentsSearchSeriesCommand.php
@@ -20,6 +20,8 @@ class TorrentsSearchSeriesCommand extends Command
->addOption('offset', 'o', InputOption::VALUE_REQUIRED, 'Page number')
->addOption('limit', 'l', InputOption::VALUE_REQUIRED, 'Number of results per page')
->addOption('terms', 't', InputOption::VALUE_REQUIRED, 'Filter by terms IDs (separated by ",")')
+ ->addOption('sort', null, InputOption::VALUE_REQUIRED, 'Sort')
+ ->addOption('asc', null, InputOption::VALUE_NONE, 'Ascending sort')
->setHelp("%command.name%
Search series.
@@ -37,7 +39,7 @@ Usage: torrents:search:series QUERY [OPTIONS]
'--sub-category' => 433,
);
- foreach (['offset', 'limit', 'terms'] as $p) {
+ foreach (['offset', 'limit', 'terms', 'sort', 'asc'] as $p) {
$value = $input->getOption($p);
if (null !== $value) {
diff --git a/src/Console/Command/TorrentsTopCommand.php b/src/Console/Command/TorrentsTopCommand.php
index 7123d82..8e1023c 100644
--- a/src/Console/Command/TorrentsTopCommand.php
+++ b/src/Console/Command/TorrentsTopCommand.php
@@ -10,6 +10,7 @@ use Api\Client;
use Api\ConfigLoader;
use Api\ClientResponse;
use Api\ClientException;
+use Helper\Render;
class TorrentsTopCommand extends Command
{
@@ -19,13 +20,17 @@ class TorrentsTopCommand extends Command
->setName('torrents:top')
->setDescription('Top torrents')
->addOption('period', 'p', InputOption::VALUE_REQUIRED, 'Period')
+ ->addOption('sort', null, InputOption::VALUE_REQUIRED, 'Sort')
+ ->addOption('asc', null, InputOption::VALUE_NONE, 'Ascending sort')
->setHelp("%command.name%
Show top torrents.
Usage: torrents:search:top [OPTIONS]
-Period values: \"100\" (default), \"day\", \"week\", \"month\"");
+Period values \"100\" (default), \"day\", \"week\", \"month\"
+Sort values \"seed\", \"leech\", \"size\", \"name\", \"id\"
+");
}
protected function execute(InputInterface $input, OutputInterface $output)
@@ -49,35 +54,30 @@ Usage: torrents:search:top [OPTIONS]
}
$response = $client->getTopTorrents($period);
+
+ if ($response->hasError()) {
+ $output->writeln(sprintf(
+ '%s (%d)',
+ $response->getErrorMessage(),
+ $response->getErrorCode()
+ ));
- return $this->showResults($response, $output);
+ return;
+ }
+
+ $options = [];
+
+ if ($input->getOption('sort')) {
+ $options['sort'] = $input->getOption('sort');
+ }
+
+ if ($input->getOption('asc')) {
+ $options['asc'] = true;
+ }
+
+ Render::torrents($response->getData(), $output, $options);
} catch (ClientException $e) {
$output->writeln(sprintf('An error occured. %s', $e->getMessage()));
}
}
-
- protected function showResults(ClientResponse $response, OutputInterface $output)
- {
- if ($response->hasError()) {
- $output->writeln(sprintf(
- '%s (%d)',
- $response->getErrorMessage(),
- $response->getErrorCode()
- ));
-
- return;
- }
-
- $output->writeln(' SEED LEECH ID NAME');
-
- foreach ($response->getData() as $torrent) {
- $output->writeln(sprintf(
- '[%4d%6d] %9d %s',
- $torrent['seeders'],
- $torrent['leechers'],
- $torrent['id'],
- $torrent['name']
- ));
- }
- }
}
diff --git a/src/Helper/Render.php b/src/Helper/Render.php
new file mode 100644
index 0000000..5fdb68c
--- /dev/null
+++ b/src/Helper/Render.php
@@ -0,0 +1,55 @@
+
+ */
+class Render
+{
+ public static function torrents(array $torrents, OutputInterface $output, array $options = [])
+ {
+ if (empty($torrents)) {
+ return;
+ }
+
+ if (isset($options['sort'])) {
+ $sort = $options['sort'];
+
+ if (!in_array($sort, ['seed', 'leech', 'size', 'id', 'name'])) {
+ throw new InvalidArgumentException('Invalid option "sort".');
+ }
+
+ $sort = str_replace(['seed', 'leech'], ['seeders', 'leechers'], $sort);
+ $sortDatas = [];
+
+ foreach ($torrents as $torrent) {
+ $sortDatas[] = $torrent[$sort];
+ }
+
+ array_multisort(
+ $sortDatas,
+ isset($options['asc']) ? SORT_ASC : SORT_DESC,
+ $sort === 'name' ? SORT_STRING : SORT_NUMERIC,
+ $torrents
+ );
+ }
+
+ $output->writeln(' SEED LEECH SIZE ID NAME');
+
+ foreach ($torrents as $torrent) {
+ $output->writeln(sprintf(
+ '[%4d%6d] [%8s] %7d %s',
+ $torrent['seeders'],
+ $torrent['leechers'],
+ Formater::humanSize((int) $torrent['size']),
+ $torrent['id'],
+ $torrent['name']
+ ));
+ }
+ }
+}