summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Molenaar <SMillerDev@users.noreply.github.com>2021-03-29 09:25:06 +0200
committerGitHub <noreply@github.com>2021-03-29 09:25:06 +0200
commitda61c93afe9e4716711d111668a2f00084e25631 (patch)
treeee5b519393bbf210919277258f92ba8e87067f7c
parent2baa7a2b9136d4d4dc1e56dfc043cc71da3ee1df (diff)
Search: Add folder search (#1215)
* Search: Add folder search Signed-off-by: Sean Molenaar <sean@seanmolenaar.eu>
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/AppInfo/Application.php3
-rw-r--r--lib/Search/FolderSearchProvider.php77
3 files changed, 81 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a215b3012..775697a4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ The format is almost based on [Keep a Changelog](https://keepachangelog.com/en/1
- Update FeedFetcher to import categories from feeds (#1248)
- Update serialization of item to include categories (#1248)
- Make PHPStan stricter
+- Restore search in news
### Fixed
- Do not show deleted feeds in item list
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index 079b32fe8..ea7beeae5 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -22,6 +22,7 @@ use Favicon\Favicon;
use OCA\News\Config\LegacyConfig;
use OCA\News\Config\FetcherConfig;
use OCA\News\Hooks\UserDeleteHook;
+use OCA\News\Search\FolderSearchProvider;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\AppFramework\Bootstrap\IBootstrap;
@@ -81,6 +82,8 @@ class Application extends App implements IBootstrap
return $fetcher;
});
+ $context->registerSearchProvider(FolderSearchProvider::class);
+
$context->registerEventListener(BeforeUserDeletedEvent::class, UserDeleteHook::class);
// parameters
diff --git a/lib/Search/FolderSearchProvider.php b/lib/Search/FolderSearchProvider.php
new file mode 100644
index 000000000..1d961a699
--- /dev/null
+++ b/lib/Search/FolderSearchProvider.php
@@ -0,0 +1,77 @@
+<?php
+declare(strict_types=1);
+
+namespace OCA\News\Search;
+
+use OCA\News\AppInfo\Application;
+use OCA\News\Db\Folder;
+use OCA\News\Service\FolderServiceV2;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\Search\IProvider;
+use OCP\Search\ISearchQuery;
+use OCP\Search\SearchResult;
+use OCP\Search\SearchResultEntry;
+
+/**
+ * Class FolderSearchProvider
+ *
+ * @package OCA\News\Search
+ */
+class FolderSearchProvider implements IProvider
+{
+ /** @var IL10N */
+ private $l10n;
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /** @var FolderServiceV2 */
+ private $service;
+
+ public function __construct(IL10N $l10n, IURLGenerator $urlGenerator, FolderServiceV2 $folderService)
+ {
+ $this->l10n = $l10n;
+ $this->urlGenerator = $urlGenerator;
+ $this->service = $folderService;
+ }
+
+ public function getId(): string
+ {
+ return 'news_folder';
+ }
+
+ public function getName(): string
+ {
+ return $this->l10n->t('News folders');
+ }
+
+ public function getOrder(string $route, array $routeParameters): int
+ {
+ if (strpos($route, Application::NAME . '.') === 0) {
+ // Active app, prefer my results
+ return -1;
+ }
+
+ return 55;
+ }
+
+ public function search(IUser $user, ISearchQuery $query): SearchResult
+ {
+ $term = $query->getTerm();
+ $list = array_map(function (Folder $folder) use ($term): ?SearchResultEntry {
+ if (strpos($folder->getName(), $term) === false) {
+ return null;
+ }
+
+ return new SearchResultEntry(
+ $this->urlGenerator->imagePath('core', 'filetypes/folder.svg'),
+ $folder->getName(),
+ '',
+ $this->urlGenerator->linkToRoute('news.view.index') . '#/items/folders/' . $folder->getId()
+ );
+ }, $this->service->findAllForUser($user->getUID()));
+ return SearchResult::complete($this->l10n->t('News'), $list);
+ }
+}