diff options
author | Louis Chemineau <louis@chmn.me> | 2023-11-08 12:35:01 +0100 |
---|---|---|
committer | Louis Chemineau <louis@chmn.me> | 2023-11-08 16:23:53 +0100 |
commit | d3a313f192c090d026bac1fd1a8aed718d54c634 (patch) | |
tree | a4860e713479eb045fcb66fb19161f52a44110d8 /lib/private/Files | |
parent | 9285fe04ff277088bc06eda264712d3a164539a9 (diff) | |
download | nextcloud-server-d3a313f192c090d026bac1fd1a8aed718d54c634.tar.gz nextcloud-server-d3a313f192c090d026bac1fd1a8aed718d54c634.zip |
Support getting and setting metadata in DAV requests
Signed-off-by: Louis Chemineau <louis@chmn.me>
Diffstat (limited to 'lib/private/Files')
-rw-r--r-- | lib/private/Files/Cache/Cache.php | 11 | ||||
-rw-r--r-- | lib/private/Files/Cache/CacheQueryBuilder.php | 15 | ||||
-rw-r--r-- | lib/private/Files/Cache/QuerySearchHelper.php | 20 |
3 files changed, 27 insertions, 19 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 67d01bb6999..240f02b3fba 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -59,6 +59,7 @@ use OCP\Files\Search\ISearchComparison; use OCP\Files\Search\ISearchOperator; use OCP\Files\Search\ISearchQuery; use OCP\Files\Storage\IStorage; +use OCP\FilesMetadata\IFilesMetadataManager; use OCP\IDBConnection; use OCP\Util; use Psr\Log\LoggerInterface; @@ -132,7 +133,8 @@ class Cache implements ICache { return new CacheQueryBuilder( $this->connection, \OC::$server->getSystemConfig(), - \OC::$server->get(LoggerInterface::class) + \OC::$server->get(LoggerInterface::class), + \OC::$server->get(IFilesMetadataManager::class), ); } @@ -154,6 +156,7 @@ class Cache implements ICache { public function get($file) { $query = $this->getQueryBuilder(); $query->selectFileCache(); + $metadataQuery = $query->selectMetadata(); if (is_string($file) || $file == '') { // normalize file @@ -175,6 +178,7 @@ class Cache implements ICache { } elseif (!$data) { return $data; } else { + $data['metadata'] = $metadataQuery->extractMetadata($data)->asArray(); return self::cacheEntryFromData($data, $this->mimetypeLoader); } } @@ -239,11 +243,14 @@ class Cache implements ICache { ->whereParent($fileId) ->orderBy('name', 'ASC'); + $metadataQuery = $query->selectMetadata(); + $result = $query->execute(); $files = $result->fetchAll(); $result->closeCursor(); - return array_map(function (array $data) { + return array_map(function (array $data) use ($metadataQuery) { + $data['metadata'] = $metadataQuery->extractMetadata($data)->asArray(); return self::cacheEntryFromData($data, $this->mimetypeLoader); }, $files); } diff --git a/lib/private/Files/Cache/CacheQueryBuilder.php b/lib/private/Files/Cache/CacheQueryBuilder.php index f799d6aa72e..27f66e63e7b 100644 --- a/lib/private/Files/Cache/CacheQueryBuilder.php +++ b/lib/private/Files/Cache/CacheQueryBuilder.php @@ -29,6 +29,8 @@ namespace OC\Files\Cache; use OC\DB\QueryBuilder\QueryBuilder; use OC\SystemConfig; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\FilesMetadata\IFilesMetadataManager; +use OCP\FilesMetadata\Model\IMetadataQuery; use OCP\IDBConnection; use Psr\Log\LoggerInterface; @@ -38,7 +40,12 @@ use Psr\Log\LoggerInterface; class CacheQueryBuilder extends QueryBuilder { private ?string $alias = null; - public function __construct(IDBConnection $connection, SystemConfig $systemConfig, LoggerInterface $logger) { + public function __construct( + IDBConnection $connection, + SystemConfig $systemConfig, + LoggerInterface $logger, + private IFilesMetadataManager $filesMetadataManager, + ) { parent::__construct($connection, $systemConfig, $logger); } @@ -127,4 +134,10 @@ class CacheQueryBuilder extends QueryBuilder { return $this; } + + public function selectMetadata(): IMetadataQuery { + $metadataQuery = $this->filesMetadataManager->getMetadataQuery($this, $this->alias, 'fileid'); + $metadataQuery->retrieveMetadata(); + return $metadataQuery; + } } diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index ca54133a243..f8e5d1608f7 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -62,7 +62,8 @@ class QuerySearchHelper { return new CacheQueryBuilder( $this->connection, $this->systemConfig, - $this->logger + $this->logger, + $this->filesMetadataManager, ); } @@ -133,20 +134,6 @@ class QuerySearchHelper { )); } - - /** - * left join metadata and its indexes to the filecache table - * - * @param CacheQueryBuilder $query - * - * @return IMetadataQuery - */ - protected function equipQueryForMetadata(CacheQueryBuilder $query): IMetadataQuery { - $metadataQuery = $this->filesMetadataManager->getMetadataQuery($query, 'file', 'fileid'); - $metadataQuery->retrieveMetadata(); - return $metadataQuery; - } - /** * Perform a file system search in multiple caches * @@ -186,7 +173,8 @@ class QuerySearchHelper { $this->equipQueryForDavTags($query, $this->requireUser($searchQuery)); } - $metadataQuery = $this->equipQueryForMetadata($query); + $metadataQuery = $query->selectMetadata(); + $this->applySearchConstraints($query, $searchQuery, $caches, $metadataQuery); $result = $query->execute(); |