diff --git a/lib/Service/FilesService.php b/lib/Service/FilesService.php index 48521a5..588a3c6 100644 --- a/lib/Service/FilesService.php +++ b/lib/Service/FilesService.php @@ -55,6 +55,9 @@ use OCP\Files\StorageNotAvailableException; use OCP\IUserManager; use OCP\Share\IManager; +use OCA\Metadata\Services\MetadataService; +use OC\Files\Filesystem; +use OCP\AppFramework\QueryException; class FilesService { @@ -181,6 +184,7 @@ private function initFileSystems($userId) { $this->externalFilesService->initExternalFilesForUser($userId); $this->groupFoldersService->initGroupSharesForUser($userId); + \OC_Util::setupFS($userId); } @@ -506,10 +510,34 @@ private function updateFilesDocumentFromFile(FilesDocument $document, Node $file $this->updateDocumentAccess($document, $file); $this->updateContentFromFile($document, $file); + $this->updateTagsFromFile($document, $file); $document->addTag($document->getSource()); } + private function updateTagsFromFile(FilesDocument $document, Node $file) { + try { + $metadataService = $this->container->query(MetadataService::class); + $metadata = $metadataService->getMetadata($file)->metadataArray; + $allTags = array(); + if (array_key_exists('Tags', $metadata)) { + $allTags = array_merge($allTags, $metadata['Tags']); + } + if (array_key_exists('Keywords', $metadata)) { + $allTags = array_merge($allTags, $metadata['Keywords']); + } + foreach($allTags as $tag) { + $lastPos = 0; + while (($lastPos = strpos($tag, '/', $lastPos))!== false) { + $document->addTag("usertag_" . strtolower(substr($tag, 0, $lastPos))); + $lastPos = $lastPos + 1; + } + $document->addTag("usertag_" . strtolower($tag)); + } + } catch (QueryException $qex) { + } catch (\OCA\Metadata\Exceptions\UnsupportedFiletypeException $ex) { + } + } /** * @param FilesDocument $document diff --git a/lib/Service/SearchService.php b/lib/Service/SearchService.php index 224f0aa..156f4d1 100644 --- a/lib/Service/SearchService.php +++ b/lib/Service/SearchService.php @@ -78,6 +78,7 @@ public function improveSearchRequest(SearchRequest $request) { $this->searchQueryInOptions($request); $this->searchQueryFiltersExtension($request); $this->searchQueryFiltersSource($request); + $this->searchQueryFiltersTags($request); } @@ -152,6 +153,12 @@ private function searchQueryFiltersSource(SearchRequest $request) { $this->addTagToSearchRequest($request, 'files_group_folders', $groupFolders); } + private function searchQueryFiltersTags(Searchrequest $request) { + $tags = $request->getOption('tag'); + foreach ($tags as $tag) { + $this->addTagToSearchRequest($request, 'usertag_' . strtolower($tag), 1); + } + } /** * @param SearchRequest $request