From 0d689ca2ddacd8fbf0f52280c480dd7fdafdf81e Mon Sep 17 00:00:00 2001 From: huangjx Date: Sat, 26 Feb 2022 21:47:18 +0800 Subject: [PATCH] improved search module --- lib/Controller/SearchController.php | 4 +-- lib/Search/Sites/TPB.php | 12 ++++++--- lib/Search/Sites/bitSearch.php | 17 +++++++++---- lib/Search/Sites/searchBase.php | 37 +++++++++++++++++++++++++--- lib/Search/Sites/searchInterface.php | 10 ++++++++ lib/Search/torrentSearch.php | 11 --------- 6 files changed, 66 insertions(+), 25 deletions(-) create mode 100644 lib/Search/Sites/searchInterface.php diff --git a/lib/Controller/SearchController.php b/lib/Controller/SearchController.php index 0306550..a92b1e9 100644 --- a/lib/Controller/SearchController.php +++ b/lib/Controller/SearchController.php @@ -32,9 +32,7 @@ class SearchController extends Controller $site = Helper::sanitize($this->request->getParam('select-value-search')); $this->search->setSite($site); $data = $this->search->go($keyword); - $resp['title'] = ['title', 'seeders', 'info', 'actions']; - $resp['row'] = $data; - return new JSONResponse($resp); + return new JSONResponse($data); } } diff --git a/lib/Search/Sites/TPB.php b/lib/Search/Sites/TPB.php index 3836404..5bf3bb2 100644 --- a/lib/Search/Sites/TPB.php +++ b/lib/Search/Sites/TPB.php @@ -3,7 +3,7 @@ namespace OCA\NCDownloader\Search\Sites; //The Piratebay -class TPB implements searchBase +class TPB extends searchBase implements searchInterface { //html content private $content = null; @@ -14,11 +14,12 @@ class TPB implements searchBase $this->client = $client; $this->crawler = $crawler; } - public function search($keyword) + public function search(string $keyword): array { $this->searchUrl = $this->baseUrl . trim($keyword); $this->crawler->add($this->getContent()); - return $this->parse(); + $this->getItems()->addActionLinks(null); + return ['title' => $this->getTableTitles(), 'row' => $this->getRows()]; } public function setContent($content) { @@ -53,4 +54,9 @@ class TPB implements searchBase }); return $data; } + public function getItems() + { + $this->rows = $this->parse(); + return $this; + } } diff --git a/lib/Search/Sites/bitSearch.php b/lib/Search/Sites/bitSearch.php index 8e573c9..1cc9199 100644 --- a/lib/Search/Sites/bitSearch.php +++ b/lib/Search/Sites/bitSearch.php @@ -3,25 +3,26 @@ namespace OCA\NCDownloader\Search\Sites; //bitsearch.to -class bitSearch implements searchBase +class bitSearch extends searchBase implements searchInterface { //html content private $content = null; public $baseUrl = "https://bitsearch.to/search"; - private $query = null; + protected $query = null; + protected $tableTitles = []; public function __construct($crawler, $client) { $this->client = $client; $this->crawler = $crawler; } - public function search($keyword) + public function search(string $keyword): array { $this->query = ['q' => trim($keyword), 'sort' => 'seeders']; $this->searchUrl = $this->baseUrl; - //$this->setContent(file_get_contents(__DIR__ . "/BitSearch.html")); $this->crawler->add($this->getContent()); - return $this->parse(); + $this->getItems()->addActionLinks(null); + return ['title' =>$this->getTableTitles(), 'row' => $this->getRows()]; } public function setContent($content) { @@ -35,6 +36,7 @@ class bitSearch implements searchBase $response = $this->client->request('GET', $this->searchUrl, ['query' => $this->query]); return $response->getContent(); } + public function parse() { @@ -62,4 +64,9 @@ class bitSearch implements searchBase }); return $data; } + public function getItems() + { + $this->rows = $this->parse(); + return $this; + } } diff --git a/lib/Search/Sites/searchBase.php b/lib/Search/Sites/searchBase.php index ad4a009..862a0ee 100644 --- a/lib/Search/Sites/searchBase.php +++ b/lib/Search/Sites/searchBase.php @@ -2,9 +2,40 @@ namespace OCA\NCDownloader\Search\Sites; -interface searchBase +abstract class searchBase { - public function search($keyword); - public function parse(); + protected $query = null; + protected $tableTitles = []; + protected $rows = []; + protected $actionLinks = [["name" => 'download', 'path' => '/index.php/apps/ncdownloader/new'], ['name' => 'clipboard']]; + + public function getTableTitles(): array + { + if (empty($this->tableTitles)) { + return ['title', 'seeders', 'info', 'actions']; + } + return $this->tableTitles; + } + + public function setTableTitles(array $titles) + { + $this->tableTitles = $titles; + return $this; + } + + protected function addActionLinks(?array $links) + { + $links = $links ?? $this->actionLinks; + foreach ($this->rows as $key => &$value) { + if (!$value) { + continue; + } + $value['actions'] = $links; + } + } + public function getRows(): array + { + return $this->rows; + } } diff --git a/lib/Search/Sites/searchInterface.php b/lib/Search/Sites/searchInterface.php new file mode 100644 index 0000000..6258628 --- /dev/null +++ b/lib/Search/Sites/searchInterface.php @@ -0,0 +1,10 @@ +getMessage()]; } $data = $siteInst->search($keyword); - $this->addAction($data); return $data; } @@ -40,14 +39,4 @@ class torrentSearch } } - private function addAction(&$data) - { - foreach ($data as $key => &$value) { - if (!$value) { - continue; - } - $value['actions'] = [["name" => 'download', 'path' => '/index.php/apps/ncdownloader/new'], ['name' => 'clipboard']]; - } - } - }