Merge pull request #39194 from nextcloud/fix/stable26/tag-search-short-circuit-master

[stable26] fix(TagSearchProvider): Short circuit if no tag matches the query
This commit is contained in:
Arthur Schiwon 2023-07-06 18:38:53 +02:00 committed by GitHub
commit ddfe6cc49c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -113,6 +113,11 @@ class TagSearchProvider implements IProvider {
* @inheritDoc
*/
public function search(IUser $user, ISearchQuery $query): SearchResult {
$matchingTags = $this->tagManager->getAllTags(true, $query->getTerm());
if (count($matchingTags) === 0) {
return SearchResult::complete($this->l10n->t('Tags'), []);
}
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
$fileQuery = new SearchQuery(
new SearchBinaryOperator(SearchBinaryOperator::OPERATOR_OR, [
@ -133,7 +138,6 @@ class TagSearchProvider implements IProvider {
return $node->getId();
}, $searchResults);
$matchedTags = $this->objectMapper->getTagIdsForObjects($resultIds, 'files');
$relevantTags = $this->tagManager->getTagsByIds(array_unique($this->flattenArray($matchedTags)));
// prepare direct tag results
$tagResults = array_map(function(ISystemTag $tag) {
@ -149,9 +153,7 @@ class TagSearchProvider implements IProvider {
'icon-tag'
);
return $searchResultEntry;
}, array_filter($relevantTags, function($tag) use ($query) {
return $tag->isUserVisible() && strpos($tag->getName(), $query->getTerm()) !== false;
}));
}, $matchingTags);
// prepare files results
return SearchResult::paginated(