summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2015-01-06 16:44:58 +0100
committerMorris Jobke <hey@morrisjobke.de>2015-01-06 16:44:58 +0100
commitfe4592937a7139164eeb0b8131f6e8ba559eaa67 (patch)
tree664cbec226a0b3f563388c2c15c3260849eab002 /lib
parent622c4cf77903470bc7ddc1df5b74d5e17a0e70c7 (diff)
parent04e2f59f5d3bc8d3e2a5e0756f1f2f47735e1ec3 (diff)
downloadnextcloud-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.php2
-rw-r--r--lib/private/files/storage/common.php1
-rw-r--r--lib/private/search.php31
-rw-r--r--lib/private/search/result/file.php2
-rw-r--r--lib/public/isearch.php11
-rw-r--r--lib/public/search/pagedprovider.php58
-rw-r--r--lib/public/search/provider.php4
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