Browse Source

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

fix(TagSearchProvider): Short circuit if no tag matches the query
Arthur Schiwon 1 year ago
parent
commit
fc7944fc73
1 changed files with 6 additions and 4 deletions
  1. 6 4
      apps/systemtags/lib/Search/TagSearchProvider.php

+ 6 - 4
apps/systemtags/lib/Search/TagSearchProvider.php

@@ -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(