aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2021-03-12 12:58:49 +0100
committerGitHub <noreply@github.com>2021-03-12 12:58:49 +0100
commitbf39adb49b5f102ef898feed6520df672612d15e (patch)
treeb0bf0a3363fa5dbd841ddf33ea985652d2189e1e
parent7ac6eee129d7d43d1786559012f8e5e1acf845e3 (diff)
parentb62ee577d7032273540c5332d9aa151646ce241c (diff)
downloadnextcloud-server-bf39adb49b5f102ef898feed6520df672612d15e.tar.gz
nextcloud-server-bf39adb49b5f102ef898feed6520df672612d15e.zip
Merge pull request #26049 from nextcloud/search-file-limit-results
limit constructing of result objects in file search
-rw-r--r--apps/files/lib/Search/FilesSearchProvider.php5
-rw-r--r--lib/private/Search/Provider/File.php22
2 files changed, 23 insertions, 4 deletions
diff --git a/apps/files/lib/Search/FilesSearchProvider.php b/apps/files/lib/Search/FilesSearchProvider.php
index 93600119357..1c4bc75ade7 100644
--- a/apps/files/lib/Search/FilesSearchProvider.php
+++ b/apps/files/lib/Search/FilesSearchProvider.php
@@ -103,7 +103,7 @@ class FilesSearchProvider implements IProvider {
// Make sure we setup the users filesystem
$this->rootFolder->getUserFolder($user->getUID());
- return SearchResult::complete(
+ return SearchResult::paginated(
$this->l10n->t('Files'),
array_map(function (FileResult $result) {
// Generate thumbnail url
@@ -121,7 +121,8 @@ class FilesSearchProvider implements IProvider {
$searchResultEntry->addAttribute('fileId', (string)$result->id);
$searchResultEntry->addAttribute('path', $result->path);
return $searchResultEntry;
- }, $this->fileSearch->search($query->getTerm()))
+ }, $this->fileSearch->search($query->getTerm(), $query->getLimit(), (int)$query->getCursor())),
+ $query->getCursor() + $query->getLimit()
);
}
diff --git a/lib/private/Search/Provider/File.php b/lib/private/Search/Provider/File.php
index b4e35d374ca..4125b1f7d70 100644
--- a/lib/private/Search/Provider/File.php
+++ b/lib/private/Search/Provider/File.php
@@ -30,23 +30,33 @@
namespace OC\Search\Provider;
use OC\Files\Filesystem;
+use OCP\Search\PagedProvider;
/**
* Provide search results from the 'files' app
* @deprecated 20.0.0
*/
-class File extends \OCP\Search\Provider {
+class File extends PagedProvider {
/**
* Search for files and folders matching the given query
+ *
* @param string $query
+ * @param int|null $limit
+ * @param int|null $offset
* @return \OCP\Search\Result[]
* @deprecated 20.0.0
*/
- public function search($query) {
+ public function search($query, int $limit = null, int $offset = null) {
+ if ($offset === null) {
+ $offset = 0;
+ }
\OC_Util::setupFS();
$files = Filesystem::search($query);
$results = [];
+ if ($limit !== null) {
+ $files = array_slice($files, $offset, $offset + $limit);
+ }
// edit results
foreach ($files as $fileData) {
// skip versions
@@ -79,4 +89,12 @@ class File extends \OCP\Search\Provider {
// return
return $results;
}
+
+ public function searchPaged($query, $page, $size) {
+ if ($size === 0) {
+ return $this->search($query);
+ } else {
+ return $this->search($query, $size, ($page - 1) * $size);
+ }
+ }
}