From ba54b352cd341bb892952afa5048967013905bb1 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Mon, 16 Mar 2026 15:18:21 +0100 Subject: [PATCH] Unified search: Files provider adds favorite state Signed-off-by: tobiasKaminsky --- apps/files/lib/Search/FilesSearchProvider.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/files/lib/Search/FilesSearchProvider.php b/apps/files/lib/Search/FilesSearchProvider.php index f71d58c6faebe..08f125bca64e8 100644 --- a/apps/files/lib/Search/FilesSearchProvider.php +++ b/apps/files/lib/Search/FilesSearchProvider.php @@ -24,6 +24,7 @@ use OCP\Files\Search\ISearchOrder; use OCP\IL10N; use OCP\IPreview; +use OCP\ITags; use OCP\IURLGenerator; use OCP\IUser; use OCP\Search\FilterDefinition; @@ -130,12 +131,28 @@ public function search(IUser $user, ISearchQuery $query): SearchResult { ); $searchResultEntry->addAttribute('fileId', (string)$result->getId()); $searchResultEntry->addAttribute('path', $path); + $searchResultEntry->addAttribute('favorite', $this->isFavorite((string)$result->getId()) ? "true" : "false"); return $searchResultEntry; }, $userFolder->search($fileQuery)), $query->getCursor() + $query->getLimit() ); } + private function isFavorite(string $fileId): bool { + $tagManager = \OCP\Server::get(\OCP\ITagManager::class); + $tagger = $tagManager->load('files'); + if ($tagger === null) { + return false; + } + $tags = $tagger->getTagsForObjects([$fileId]); + + if ($tags === false || empty($tags)) { + return false; + } + + return array_search(ITags::TAG_FAVORITE, current($tags)) !== false; + } + private function buildSearchQuery(ISearchQuery $query, IUser $user): SearchQuery { $comparisons = []; foreach ($query->getFilters() as $name => $filter) {