aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/search.php
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2014-12-11 12:58:22 +0100
committerJörn Friedrich Dreyer <jfd@butonic.de>2015-01-02 10:28:41 +0100
commitc738359a111445aac90518db39b5d5883e44892d (patch)
tree7e12571398068d79f9df6c54ae651232d7cb7f87 /lib/private/search.php
parent088323aad5de7b2fadd3c26a10cf4bdf51b5ae73 (diff)
downloadnextcloud-server-c738359a111445aac90518db39b5d5883e44892d.tar.gz
nextcloud-server-c738359a111445aac90518db39b5d5883e44892d.zip
add paged provider
Diffstat (limited to 'lib/private/search.php')
-rw-r--r--lib/private/search.php27
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/private/search.php b/lib/private/search.php
index 8f04aa8360b..4629d52b40e 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,34 @@ class Search implements ISearch {
* @return array An array of OC\Search\Result's
*/
public function search($query, array $inApps = array()) {
+ return $this->searchPaged($query, $inApps, 0, 0);
+ }
+
+ /**
+ * Search all providers for $query
+ * @param string $query
+ * @param int $page
+ * @param int $size, 0 = all
+ * @return array An array of OC\Search\Result's
+ */
+ public function searchPaged($query, $page = 0, $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 * $size, $size);
+ }
+ $results = array_merge($results, $slicedResults);
+ } else {
+ \OC::$server->getLogger()->warning('Ignoring Unknown search provider', array('provider' => $provider));
}
}
return $results;