Merge pull request #14185 from nextcloud/fix/init_shared_storage_for_recents
Fix recent files
This commit is contained in:
commit
58de24b5a4
1 changed files with 32 additions and 3 deletions
|
@ -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;
|
||||
|
@ -376,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.*')
|
||||
|
@ -388,12 +411,15 @@ 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);
|
||||
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'];
|
||||
|
@ -416,6 +442,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;
|
||||
|
|
Loading…
Reference in a new issue