summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/comments/composer/composer/autoload_classmap.php2
-rw-r--r--apps/comments/composer/composer/autoload_static.php2
-rw-r--r--apps/comments/lib/AppInfo/Application.php4
-rw-r--r--apps/comments/lib/Search/CommentsSearchResultEntry.php31
-rw-r--r--apps/comments/lib/Search/LegacyProvider.php113
-rw-r--r--apps/comments/lib/Search/Provider.php125
-rw-r--r--apps/comments/lib/Search/Result.php22
-rw-r--r--apps/files/composer/composer/autoload_classmap.php2
-rw-r--r--apps/files/composer/composer/autoload_static.php2
-rw-r--r--apps/files/lib/AppInfo/Application.php3
-rw-r--r--apps/files/lib/Search/FilesSearchProvider.php73
-rw-r--r--apps/files/lib/Search/FilesSearchResultEntry.php37
12 files changed, 339 insertions, 77 deletions
diff --git a/apps/comments/composer/composer/autoload_classmap.php b/apps/comments/composer/composer/autoload_classmap.php
index d5d51c7a12c..5682d66468d 100644
--- a/apps/comments/composer/composer/autoload_classmap.php
+++ b/apps/comments/composer/composer/autoload_classmap.php
@@ -21,6 +21,8 @@ return array(
'OCA\\Comments\\Listener\\LoadSidebarScripts' => $baseDir . '/../lib/Listener/LoadSidebarScripts.php',
'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ 'OCA\\Comments\\Search\\CommentsSearchResultEntry' => $baseDir . '/../lib/Search/CommentsSearchResultEntry.php',
+ 'OCA\\Comments\\Search\\LegacyProvider' => $baseDir . '/../lib/Search/LegacyProvider.php',
'OCA\\Comments\\Search\\Provider' => $baseDir . '/../lib/Search/Provider.php',
'OCA\\Comments\\Search\\Result' => $baseDir . '/../lib/Search/Result.php',
);
diff --git a/apps/comments/composer/composer/autoload_static.php b/apps/comments/composer/composer/autoload_static.php
index 1292415290b..87a2127c144 100644
--- a/apps/comments/composer/composer/autoload_static.php
+++ b/apps/comments/composer/composer/autoload_static.php
@@ -36,6 +36,8 @@ class ComposerStaticInitComments
'OCA\\Comments\\Listener\\LoadSidebarScripts' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarScripts.php',
'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ 'OCA\\Comments\\Search\\CommentsSearchResultEntry' => __DIR__ . '/..' . '/../lib/Search/CommentsSearchResultEntry.php',
+ 'OCA\\Comments\\Search\\LegacyProvider' => __DIR__ . '/..' . '/../lib/Search/LegacyProvider.php',
'OCA\\Comments\\Search\\Provider' => __DIR__ . '/..' . '/../lib/Search/Provider.php',
'OCA\\Comments\\Search\\Result' => __DIR__ . '/..' . '/../lib/Search/Result.php',
);
diff --git a/apps/comments/lib/AppInfo/Application.php b/apps/comments/lib/AppInfo/Application.php
index 8bcf17b2afe..fafac0c6040 100644
--- a/apps/comments/lib/AppInfo/Application.php
+++ b/apps/comments/lib/AppInfo/Application.php
@@ -35,6 +35,7 @@ use OCA\Comments\Listener\CommentsEntityEventListener;
use OCA\Comments\Listener\LoadAdditionalScripts;
use OCA\Comments\Listener\LoadSidebarScripts;
use OCA\Comments\Notification\Notifier;
+use OCA\Comments\Search\LegacyProvider;
use OCA\Comments\Search\Provider;
use OCA\Files\Event\LoadAdditionalScriptsEvent;
use OCA\Files\Event\LoadSidebar;
@@ -70,6 +71,7 @@ class Application extends App implements IBootstrap {
CommentsEntityEvent::EVENT_ENTITY,
CommentsEntityEventListener::class
);
+ $context->registerSearchProvider(Provider::class);
}
public function boot(IBootContext $context): void {
@@ -79,7 +81,7 @@ class Application extends App implements IBootstrap {
$jsSettingsHelper = new JSSettingsHelper($context->getServerContainer());
Util::connectHook('\OCP\Config', 'js', $jsSettingsHelper, 'extend');
- $context->getServerContainer()->getSearch()->registerProvider(Provider::class, ['apps' => ['files']]);
+ $context->getServerContainer()->getSearch()->registerProvider(LegacyProvider::class, ['apps' => ['files']]);
}
protected function registerNotifier(IServerContainer $container) {
diff --git a/apps/comments/lib/Search/CommentsSearchResultEntry.php b/apps/comments/lib/Search/CommentsSearchResultEntry.php
new file mode 100644
index 00000000000..de24cf9cc52
--- /dev/null
+++ b/apps/comments/lib/Search/CommentsSearchResultEntry.php
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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/>.
+ */
+
+namespace OCA\Comments\Search;
+
+use OCP\Search\ASearchResultEntry;
+
+class CommentsSearchResultEntry extends ASearchResultEntry {
+}
diff --git a/apps/comments/lib/Search/LegacyProvider.php b/apps/comments/lib/Search/LegacyProvider.php
new file mode 100644
index 00000000000..abcb8535f5c
--- /dev/null
+++ b/apps/comments/lib/Search/LegacyProvider.php
@@ -0,0 +1,113 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2018 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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/>.
+ *
+ */
+
+namespace OCA\Comments\Search;
+
+use OCP\Comments\IComment;
+use OCP\Files\Folder;
+use OCP\Files\Node;
+use OCP\Files\NotFoundException;
+use OCP\IUser;
+use OCP\Search\Provider;
+use function count;
+
+class LegacyProvider extends 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 [];
+ }
+
+ $result = [];
+ $numComments = 50;
+ $offset = 0;
+
+ while (count($result) < $numComments) {
+ /** @var IComment[] $comments */
+ $comments = $cm->search($query, 'files', '', 'comment', $offset, $numComments);
+
+ foreach ($comments as $comment) {
+ if ($comment->getActorType() !== 'users') {
+ continue;
+ }
+
+ $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;
+ }
+
+ /**
+ * @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');
+ }
+
+ return array_shift($nodes);
+ }
+}
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()))
+ );
}
}
diff --git a/apps/comments/lib/Search/Result.php b/apps/comments/lib/Search/Result.php
index 9f0e6936320..d0e9902c1fb 100644
--- a/apps/comments/lib/Search/Result.php
+++ b/apps/comments/lib/Search/Result.php
@@ -28,12 +28,33 @@ use OCP\Comments\IComment;
use OCP\Files\NotFoundException;
use OCP\Search\Result as BaseResult;
+/**
+ * @deprecated 20.0.0
+ */
class Result extends BaseResult {
+ /**
+ * @deprecated 20.0.0
+ */
public $type = 'comment';
+ /**
+ * @deprecated 20.0.0
+ */
public $comment;
+ /**
+ * @deprecated 20.0.0
+ */
public $authorId;
+ /**
+ * @deprecated 20.0.0
+ */
public $authorName;
+ /**
+ * @deprecated 20.0.0
+ */
public $path;
+ /**
+ * @deprecated 20.0.0
+ */
public $fileName;
/**
@@ -42,6 +63,7 @@ class Result extends BaseResult {
* @param string $authorName
* @param string $path
* @throws NotFoundException
+ * @deprecated 20.0.0
*/
public function __construct(string $search,
IComment $comment,
diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php
index a4a72d59c13..04c24ee52d9 100644
--- a/apps/files/composer/composer/autoload_classmap.php
+++ b/apps/files/composer/composer/autoload_classmap.php
@@ -47,6 +47,8 @@ return array(
'OCA\\Files\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files\\Migration\\Version11301Date20191205150729' => $baseDir . '/../lib/Migration/Version11301Date20191205150729.php',
'OCA\\Files\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
+ 'OCA\\Files\\Search\\FilesSearchProvider' => $baseDir . '/../lib/Search/FilesSearchProvider.php',
+ 'OCA\\Files\\Search\\FilesSearchResultEntry' => $baseDir . '/../lib/Search/FilesSearchResultEntry.php',
'OCA\\Files\\Service\\DirectEditingService' => $baseDir . '/../lib/Service/DirectEditingService.php',
'OCA\\Files\\Service\\OwnershipTransferService' => $baseDir . '/../lib/Service/OwnershipTransferService.php',
'OCA\\Files\\Service\\TagService' => $baseDir . '/../lib/Service/TagService.php',
diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php
index 91e29fac487..f9050eca862 100644
--- a/apps/files/composer/composer/autoload_static.php
+++ b/apps/files/composer/composer/autoload_static.php
@@ -62,6 +62,8 @@ class ComposerStaticInitFiles
'OCA\\Files\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files\\Migration\\Version11301Date20191205150729' => __DIR__ . '/..' . '/../lib/Migration/Version11301Date20191205150729.php',
'OCA\\Files\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
+ 'OCA\\Files\\Search\\FilesSearchProvider' => __DIR__ . '/..' . '/../lib/Search/FilesSearchProvider.php',
+ 'OCA\\Files\\Search\\FilesSearchResultEntry' => __DIR__ . '/..' . '/../lib/Search/FilesSearchResultEntry.php',
'OCA\\Files\\Service\\DirectEditingService' => __DIR__ . '/..' . '/../lib/Service/DirectEditingService.php',
'OCA\\Files\\Service\\OwnershipTransferService' => __DIR__ . '/..' . '/../lib/Service/OwnershipTransferService.php',
'OCA\\Files\\Service\\TagService' => __DIR__ . '/..' . '/../lib/Service/TagService.php',
diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php
index 82562ffe9f0..5e473c411ee 100644
--- a/apps/files/lib/AppInfo/Application.php
+++ b/apps/files/lib/AppInfo/Application.php
@@ -44,6 +44,7 @@ use OCA\Files\Event\LoadSidebar;
use OCA\Files\Listener\LegacyLoadAdditionalScriptsAdapter;
use OCA\Files\Listener\LoadSidebarListener;
use OCA\Files\Notification\Notifier;
+use OCA\Files\Search\FilesSearchProvider;
use OCA\Files\Service\TagService;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootContext;
@@ -106,6 +107,8 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(LoadAdditionalScriptsEvent::class, LegacyLoadAdditionalScriptsAdapter::class);
$context->registerEventListener(LoadSidebar::class, LoadSidebarListener::class);
+
+ $context->registerSearchProvider(FilesSearchProvider::class);
}
public function boot(IBootContext $context): void {
diff --git a/apps/files/lib/Search/FilesSearchProvider.php b/apps/files/lib/Search/FilesSearchProvider.php
new file mode 100644
index 00000000000..3f1c4de0aa1
--- /dev/null
+++ b/apps/files/lib/Search/FilesSearchProvider.php
@@ -0,0 +1,73 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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/>.
+ */
+
+namespace OCA\Files\Search;
+
+use OC\Search\Provider\File;
+use OC\Search\Result\File as FileResult;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\Search\IProvider;
+use OCP\Search\ISearchQuery;
+use OCP\Search\SearchResult;
+
+class FilesSearchProvider implements IProvider {
+
+ /** @var File */
+ private $fileSearch;
+
+ /** @var IL10N */
+ private $l10n;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ public function __construct(File $fileSearch,
+ IL10N $l10n,
+ IURLGenerator $urlGenerator) {
+ $this->l10n = $l10n;
+ $this->fileSearch = $fileSearch;
+ $this->urlGenerator = $urlGenerator;
+ }
+
+ public function getId(): string {
+ return 'files';
+ }
+
+ public function search(IUser $user, ISearchQuery $query): SearchResult {
+ return SearchResult::complete(
+ $this->l10n->t('Files'),
+ array_map(function (FileResult $result) {
+ return new FilesSearchResultEntry(
+ $this->urlGenerator->linkToRoute('core.Preview.getPreviewByFileId', ['x' => 32, 'y' => 32, 'fileId' => $result->id]),
+ $result->name,
+ $result->path,
+ $result->link
+ );
+ }, $this->fileSearch->search($query->getTerm()))
+ );
+ }
+}
diff --git a/apps/files/lib/Search/FilesSearchResultEntry.php b/apps/files/lib/Search/FilesSearchResultEntry.php
new file mode 100644
index 00000000000..c4f6e491d6f
--- /dev/null
+++ b/apps/files/lib/Search/FilesSearchResultEntry.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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/>.
+ */
+
+namespace OCA\Files\Search;
+
+use OCP\Search\ASearchResultEntry;
+
+class FilesSearchResultEntry extends ASearchResultEntry {
+ public function __construct(string $thumbnailUrl,
+ string $filename,
+ string $path,
+ string $url) {
+ parent::__construct($thumbnailUrl, $filename, $path, $url);
+ }
+}