From 4c7424d38b42ef2e1359095fcf620b2ef5cc3b77 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 13 Feb 2019 21:01:17 +0100 Subject: We need to initialize the storage else the jailed path is always null Signed-off-by: Roeland Jago Douma --- lib/private/Files/Node/Folder.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib') diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index e35ca85a779..855515ad260 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -27,6 +27,7 @@ namespace OC\Files\Node; use OC\DB\QueryBuilder\Literal; +use OCA\Files_Sharing\SharedStorage; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Files\Config\ICachedMountInfo; use OCP\Files\FileInfo; @@ -416,6 +417,9 @@ class Folder extends Node implements \OCP\Files\Folder { private function getAbsolutePath(IMountPoint $mount, $path) { $storage = $mount->getStorage(); if ($storage->instanceOfStorage('\OC\Files\Storage\Wrapper\Jail')) { + if ($storage->instanceOfStorage(SharedStorage::class)) { + $storage->getSourceStorage(); + } /** @var \OC\Files\Storage\Wrapper\Jail $storage */ $jailRoot = $storage->getUnjailedPath(''); $rootLength = strlen($jailRoot) + 1; -- cgit v1.2.3 From cb67c6aa003c41339bf68683bd1cd2855baed44d Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 13 Feb 2019 21:22:16 +0100 Subject: Loop for the recent search Else it might happen that less entries than requested are returned Signed-off-by: Roeland Jago Douma --- lib/private/Files/Node/Folder.php | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 855515ad260..9051862eadd 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -377,8 +377,30 @@ class Folder extends Node implements \OCP\Files\Folder { $mountMap = array_combine($storageIds, $mounts); $folderMimetype = $mimetypeLoader->getId(FileInfo::MIMETYPE_FOLDER); - //todo look into options of filtering path based on storage id (only search in files/ for home storage, filter by share root for shared, etc) + // Search in batches of 500 entries + $searchLimit = 500; + $results = []; + do { + $searchResult = $this->recentSearch($searchLimit, $offset, $storageIds, $folderMimetype); + + // Exit condition if there are no more results + if (count($searchResult) === 0) { + break; + } + + $parseResult = $this->recentParse($searchResult, $mountMap, $mimetypeLoader); + + foreach ($parseResult as $result) { + $results[] = $result; + } + + $offset += $searchLimit; + } while (count($results) < $limit); + return array_slice($results, 0, $limit); + } + + private function recentSearch($limit, $offset, $storageIds, $folderMimetype) { $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); $query = $builder ->select('f.*') @@ -392,9 +414,10 @@ class Folder extends Node implements \OCP\Files\Folder { ->orderBy('f.mtime', 'DESC') ->setMaxResults($limit) ->setFirstResult($offset); + return $query->execute()->fetchAll(); + } - $result = $query->execute()->fetchAll(); - + private function recentParse($result, $mountMap, $mimetypeLoader) { $files = array_filter(array_map(function (array $entry) use ($mountMap, $mimetypeLoader) { $mount = $mountMap[$entry['storage']]; $entry['internalPath'] = $entry['path']; -- cgit v1.2.3 From 62ddb124a1821e5657e1414525dbbb6ae19a0700 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 13 Feb 2019 21:27:25 +0100 Subject: Filter out versions and trashbin Signed-off-by: Roeland Jago Douma --- lib/private/Files/Node/Folder.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib') diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 9051862eadd..a9b443ce52e 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -411,6 +411,8 @@ class Folder extends Node implements \OCP\Files\Folder { $builder->expr()->neq('f.mimetype', $builder->createNamedParameter($folderMimetype, IQueryBuilder::PARAM_INT)), $builder->expr()->eq('f.size', new Literal(0)) )) + ->andWhere($builder->expr()->notLike('f.path', $builder->createNamedParameter('files_versions/%'))) + ->andWhere($builder->expr()->notLike('f.path', $builder->createNamedParameter('files_trashbin/%'))) ->orderBy('f.mtime', 'DESC') ->setMaxResults($limit) ->setFirstResult($offset); -- cgit v1.2.3