summaryrefslogtreecommitdiffstats
path: root/apps/comments/lib/Search/Provider.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/comments/lib/Search/Provider.php')
-rw-r--r--apps/comments/lib/Search/Provider.php125
1 files changed, 49 insertions, 76 deletions
diff --git a/apps/comments/lib/Search/Provider.php b/apps/comments/lib/Search/Provider.php
index ad3b63d46b5..0c0561c988c 100644
--- a/apps/comments/lib/Search/Provider.php
+++ b/apps/comments/lib/Search/Provider.php
@@ -1,8 +1,11 @@
<?php
+
+declare(strict_types=1);
+
/**
- * @copyright Copyright (c) 2018 Joas Schilling <coding@schilljs.com>
+ * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
*
- * @author Joas Schilling <coding@schilljs.com>
+ * @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
@@ -17,92 +20,62 @@
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace OCA\Comments\Search;
-use OCP\Comments\IComment;
-use OCP\Files\Folder;
-use OCP\Files\Node;
-use OCP\Files\NotFoundException;
+use OCP\IL10N;
+use OCP\IURLGenerator;
use OCP\IUser;
+use OCP\Search\IProvider;
+use OCP\Search\ISearchQuery;
+use OCP\Search\SearchResult;
+use function array_map;
+use function pathinfo;
-class Provider extends \OCP\Search\Provider {
-
- /**
- * Search for $query
- *
- * @param string $query
- * @return array An array of OCP\Search\Result's
- * @since 7.0.0
- */
- public function search($query): array {
- $cm = \OC::$server->getCommentsManager();
- $us = \OC::$server->getUserSession();
-
- $user = $us->getUser();
- if (!$user instanceof IUser) {
- return [];
- }
- $uf = \OC::$server->getUserFolder($user->getUID());
-
- if ($uf === null) {
- return [];
- }
+class Provider implements IProvider {
- $result = [];
- $numComments = 50;
- $offset = 0;
+ /** @var IL10N */
+ private $l10n;
- while (\count($result) < $numComments) {
- /** @var IComment[] $comments */
- $comments = $cm->search($query, 'files', '', 'comment', $offset, $numComments);
+ /** @var IURLGenerator */
+ private $urlGenerator;
- foreach ($comments as $comment) {
- if ($comment->getActorType() !== 'users') {
- continue;
- }
+ /** @var LegacyProvider */
+ private $legacyProvider;
- $displayName = $cm->resolveDisplayName('user', $comment->getActorId());
-
- try {
- $file = $this->getFileForComment($uf, $comment);
- $result[] = new Result($query,
- $comment,
- $displayName,
- $file->getPath()
- );
- } catch (NotFoundException $e) {
- continue;
- }
- }
-
- if (\count($comments) < $numComments) {
- // Didn't find more comments when we tried to get, so there are no more comments.
- return $result;
- }
-
- $offset += $numComments;
- $numComments = 50 - \count($result);
- }
-
- return $result;
+ public function __construct(IL10N $l10n,
+ IURLGenerator $urlGenerator,
+ LegacyProvider $legacyProvider) {
+ $this->l10n = $l10n;
+ $this->urlGenerator = $urlGenerator;
+ $this->legacyProvider = $legacyProvider;
}
- /**
- * @param Folder $userFolder
- * @param IComment $comment
- * @return Node
- * @throws NotFoundException
- */
- protected function getFileForComment(Folder $userFolder, IComment $comment): Node {
- $nodes = $userFolder->getById((int) $comment->getObjectId());
- if (empty($nodes)) {
- throw new NotFoundException('File not found');
- }
+ public function getId(): string {
+ return 'comments';
+ }
- return array_shift($nodes);
+ public function search(IUser $user, ISearchQuery $query): SearchResult {
+ return SearchResult::complete(
+ $this->l10n->t('Comments'),
+ array_map(function (Result $result) {
+ $path = $result->path;
+ $pathInfo = pathinfo($path);
+ return new CommentsSearchResultEntry(
+ $this->urlGenerator->linkToRoute('core.Preview.getPreviewByFileId', ['x' => 32, 'y' => 32, 'fileId' => $result->id]),
+ $result->name,
+ $path,
+ $this->urlGenerator->linkToRoute(
+ 'files.view.index',
+ [
+ 'dir' => $pathInfo['dirname'],
+ 'scrollto' => $pathInfo['basename'],
+ ]
+ )
+ );
+ }, $this->legacyProvider->search($query->getTerm()))
+ );
}
}