|
33 | 33 | use OCP\Files\Search\ISearchComparison;
|
34 | 34 | use OCP\Files\Search\ISearchOperator;
|
35 | 35 | use OCP\Files\Search\ISearchOrder;
|
| 36 | +use OCP\FilesMetadata\IFilesMetadataManager; |
36 | 37 | use OCP\FilesMetadata\IMetadataQuery;
|
37 | 38 |
|
38 | 39 | /**
|
@@ -101,13 +102,10 @@ class SearchBuilder {
|
101 | 102 |
|
102 | 103 | public const TAG_FAVORITE = '_$!<Favorite>!$_';
|
103 | 104 |
|
104 |
| - /** @var IMimeTypeLoader */ |
105 |
| - private $mimetypeLoader; |
106 |
| - |
107 | 105 | public function __construct(
|
108 |
| - IMimeTypeLoader $mimetypeLoader |
| 106 | + private IMimeTypeLoader $mimetypeLoader, |
| 107 | + private IFilesMetadataManager $filesMetadataManager, |
109 | 108 | ) {
|
110 |
| - $this->mimetypeLoader = $mimetypeLoader; |
111 | 109 | }
|
112 | 110 |
|
113 | 111 | /**
|
@@ -306,11 +304,18 @@ private function validateComparison(ISearchComparison $operator) {
|
306 | 304 |
|
307 | 305 |
|
308 | 306 | private function getExtraOperatorField(ISearchComparison $operator, IMetadataQuery $metadataQuery): array {
|
309 |
| - $paramType = self::$fieldTypes[$operator->getField()]; |
310 | 307 | $field = $operator->getField();
|
311 | 308 | $value = $operator->getValue();
|
312 | 309 | $type = $operator->getType();
|
313 | 310 |
|
| 311 | + $knownMetadata = $this->filesMetadataManager->getKnownMetadata(); |
| 312 | + $isIndex = $knownMetadata->isIndex($field); |
| 313 | + $paramType = $knownMetadata->getType($field) === 'int' ? 'integer' : 'string'; |
| 314 | + |
| 315 | + if (!$isIndex) { |
| 316 | + throw new \InvalidArgumentException('Cannot search non indexed metadata key'); |
| 317 | + } |
| 318 | + |
314 | 319 | switch($operator->getExtra()) {
|
315 | 320 | case IMetadataQuery::EXTRA:
|
316 | 321 | $metadataQuery->joinIndex($field); // join index table if not joined yet
|
|
0 commit comments