From df77c7d37c9387942442b7fa572e7f782476b462 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 10 Mar 2021 18:46:18 +0100 Subject: [PATCH] limit constructing of result objects in file search even thought we currently have no proper way of limiting the search itself, we can at least limit the construction of the result objects. this saves about 40% of the time spend in the search request in my local testing Signed-off-by: Robin Appelman --- lib/private/Search/Provider/File.php | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/private/Search/Provider/File.php b/lib/private/Search/Provider/File.php index 02521460d8..253a4013ec 100644 --- a/lib/private/Search/Provider/File.php +++ b/lib/private/Search/Provider/File.php @@ -29,20 +29,31 @@ namespace OC\Search\Provider; use OC\Files\Filesystem; +use OCP\Search\PagedProvider; /** * Provide search results from the 'files' app */ -class File extends \OCP\Search\Provider { +class File extends PagedProvider { /** * Search for files and folders matching the given query + * * @param string $query - * @return \OCP\Search\Result + * @param int|null $limit + * @param int|null $offset + * @return \OCP\Search\Result[] */ - 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 @@ -75,4 +86,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); + } + } }