diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-01-06 16:44:58 +0100 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2015-01-06 16:44:58 +0100 |
commit | fe4592937a7139164eeb0b8131f6e8ba559eaa67 (patch) | |
tree | 664cbec226a0b3f563388c2c15c3260849eab002 /lib | |
parent | 622c4cf77903470bc7ddc1df5b74d5e17a0e70c7 (diff) | |
parent | 04e2f59f5d3bc8d3e2a5e0756f1f2f47735e1ec3 (diff) | |
download | nextcloud-server-fe4592937a7139164eeb0b8131f6e8ba559eaa67.tar.gz nextcloud-server-fe4592937a7139164eeb0b8131f6e8ba559eaa67.zip |
Merge pull request #12653 from owncloud/full_content_search_results
Full content width search results
Diffstat (limited to 'lib')
-rw-r--r-- | lib/base.php | 2 | ||||
-rw-r--r-- | lib/private/files/storage/common.php | 1 | ||||
-rw-r--r-- | lib/private/search.php | 31 | ||||
-rw-r--r-- | lib/private/search/result/file.php | 2 | ||||
-rw-r--r-- | lib/public/isearch.php | 11 | ||||
-rw-r--r-- | lib/public/search/pagedprovider.php | 58 | ||||
-rw-r--r-- | lib/public/search/provider.php | 4 |
7 files changed, 103 insertions, 6 deletions
diff --git a/lib/base.php b/lib/base.php index 009732ead7b..34fa178ebf7 100644 --- a/lib/base.php +++ b/lib/base.php @@ -362,7 +362,7 @@ class OC { OC_Util::addScript("eventsource"); OC_Util::addScript("config"); //OC_Util::addScript( "multiselect" ); - OC_Util::addScript('search', 'result'); + OC_Util::addScript('search', 'search'); OC_Util::addScript("oc-requesttoken"); OC_Util::addScript("apps"); OC_Util::addVendorScript('snapjs/dist/latest/snap'); diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index fe6aefbb42e..b2bf41f751c 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -278,6 +278,7 @@ abstract class Common implements \OC\Files\Storage\Storage { } } } + closedir($dh); return $files; } diff --git a/lib/private/search.php b/lib/private/search.php index 8f04aa8360b..a29a4762b68 100644 --- a/lib/private/search.php +++ b/lib/private/search.php @@ -21,6 +21,7 @@ */ namespace OC; +use OCP\Search\PagedProvider; use OCP\Search\Provider; use OCP\ISearch; @@ -39,12 +40,38 @@ class Search implements ISearch { * @return array An array of OC\Search\Result's */ public function search($query, array $inApps = array()) { + // old apps might assume they get all results, so we set size 0 + return $this->searchPaged($query, $inApps, 1, 0); + } + + /** + * Search all providers for $query + * @param string $query + * @param string[] $inApps optionally limit results to the given apps + * @param int $page pages start at page 1 + * @param int $size, 0 = all + * @return array An array of OC\Search\Result's + */ + public function searchPaged($query, array $inApps = array(), $page = 1, $size = 30) { $this->initProviders(); $results = array(); foreach($this->providers as $provider) { /** @var $provider Provider */ - if ($provider->providesResultsFor($inApps)) { - $results = array_merge($results, $provider->search($query)); + if ( ! $provider->providesResultsFor($inApps) ) { + continue; + } + if ($provider instanceof PagedProvider) { + $results = array_merge($results, $provider->searchPaged($query, $page, $size)); + } else if ($provider instanceof Provider) { + $providerResults = $provider->search($query); + if ($size > 0) { + $slicedResults = array_slice($providerResults, ($page - 1) * $size, $size); + $results = array_merge($results, $slicedResults); + } else { + $results = array_merge($results, $providerResults); + } + } else { + \OC::$server->getLogger()->warning('Ignoring Unknown search provider', array('provider' => $provider)); } } return $results; diff --git a/lib/private/search/result/file.php b/lib/private/search/result/file.php index 331fdaa383a..13f1a62fbc0 100644 --- a/lib/private/search/result/file.php +++ b/lib/private/search/result/file.php @@ -83,7 +83,7 @@ class File extends \OCP\Search\Result { $this->path = $path; $this->size = $data->getSize(); $this->modified = $data->getMtime(); - $this->mime_type = $data->getMimetype(); + $this->mime = $data->getMimetype(); } /** diff --git a/lib/public/isearch.php b/lib/public/isearch.php index 229376ed3ae..fe58f202d66 100644 --- a/lib/public/isearch.php +++ b/lib/public/isearch.php @@ -34,10 +34,21 @@ interface ISearch { * @param string $query * @param string[] $inApps optionally limit results to the given apps * @return array An array of OCP\Search\Result's + * @deprecated use searchPaged() with page and size */ public function search($query, array $inApps = array()); /** + * Search all providers for $query + * @param string $query + * @param string[] $inApps optionally limit results to the given apps + * @param int $page pages start at page 1 + * @param int $size + * @return array An array of OCP\Search\Result's + */ + public function searchPaged($query, array $inApps = array(), $page = 1, $size = 30); + + /** * Register a new search provider to search with * @param string $class class name of a OCP\Search\Provider * @param array $options optional diff --git a/lib/public/search/pagedprovider.php b/lib/public/search/pagedprovider.php new file mode 100644 index 00000000000..55771762e68 --- /dev/null +++ b/lib/public/search/pagedprovider.php @@ -0,0 +1,58 @@ +<?php +/** + * ownCloud + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Search; + +/** + * Provides a template for search functionality throughout ownCloud; + */ +abstract class PagedProvider extends Provider { + + /** + * show all results + */ + const SIZE_ALL = 0; + + /** + * Constructor + * @param array $options + */ + public function __construct($options) { + $this->options = $options; + } + + /** + * Search for $query + * @param string $query + * @return array An array of OCP\Search\Result's + */ + public function search($query) { + // old apps might assume they get all results, so we use SIZE_ALL + $this->searchPaged($query, 1, self::SIZE_ALL); + } + + /** + * Search for $query + * @param string $query + * @param int $page pages start at page 1 + * @param int $size, 0 = SIZE_ALL + * @return array An array of OCP\Search\Result's + */ + abstract public function searchPaged($query, $page, $size); +} diff --git a/lib/public/search/provider.php b/lib/public/search/provider.php index d6cd1fb025e..c9ef173d363 100644 --- a/lib/public/search/provider.php +++ b/lib/public/search/provider.php @@ -27,10 +27,10 @@ abstract class Provider { const OPTION_APPS = 'apps'; /** - * List of options (currently unused) + * List of options * @var array */ - private $options; + protected $options; /** * Constructor |