From f9e891876bc3b6920d4026acac55659b683ccc19 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Thu, 12 Jan 2023 15:34:39 -0100 Subject: [PATCH] search on uri Signed-off-by: Maxence Lange --- lib/Search/UnifiedSearchProvider.php | 26 ++++++++++++++-------- lib/Service/CacheActorService.php | 2 +- lib/Service/SearchService.php | 32 ++++++++++++++++++++++++---- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/lib/Search/UnifiedSearchProvider.php b/lib/Search/UnifiedSearchProvider.php index c8efaea5..5565f0c8 100644 --- a/lib/Search/UnifiedSearchProvider.php +++ b/lib/Search/UnifiedSearchProvider.php @@ -30,7 +30,6 @@ declare(strict_types=1); namespace OCA\Social\Search; -use OCA\Social\Tools\Traits\TArrayTools; use Exception; use OCA\Social\Exceptions\AccountDoesNotExistException; use OCA\Social\Model\ActivityPub\Actor\Person; @@ -38,15 +37,16 @@ use OCA\Social\Service\AccountService; use OCA\Social\Service\CacheActorService; use OCA\Social\Service\ConfigService; use OCA\Social\Service\FollowService; -use OCA\Social\Service\MiscService; use OCA\Social\Service\SearchService; use OCA\Social\Service\StreamService; +use OCA\Social\Tools\Traits\TArrayTools; use OCP\IL10N; use OCP\IURLGenerator; use OCP\IUser; use OCP\Search\IProvider; use OCP\Search\ISearchQuery; use OCP\Search\SearchResult; +use Psr\Log\LoggerInterface; /** * Class UnifiedSearchProvider @@ -67,7 +67,8 @@ class UnifiedSearchProvider implements IProvider { private AccountService $accountService; private SearchService $searchService; private ConfigService $configService; - private MiscService $miscService; + private LoggerInterface $logger; + private ?Person $viewer = null; @@ -82,12 +83,18 @@ class UnifiedSearchProvider implements IProvider { * @param AccountService $accountService * @param SearchService $searchService * @param ConfigService $configService - * @param MiscService $miscService + * @param LoggerInterface $logger */ public function __construct( - IL10N $l10n, IURLGenerator $urlGenerator, StreamService $streamService, FollowService $followService, - CacheActorService $cacheActorService, AccountService $accountService, SearchService $searchService, - ConfigService $configService, MiscService $miscService + IL10N $l10n, + IURLGenerator $urlGenerator, + StreamService $streamService, + FollowService $followService, + CacheActorService $cacheActorService, + AccountService $accountService, + SearchService $searchService, + ConfigService $configService, + LoggerInterface $logger ) { $this->l10n = $l10n; $this->urlGenerator = $urlGenerator; @@ -97,7 +104,7 @@ class UnifiedSearchProvider implements IProvider { $this->accountService = $accountService; $this->searchService = $searchService; $this->configService = $configService; - $this->miscService = $miscService; + $this->logger = $logger; } @@ -140,11 +147,12 @@ class UnifiedSearchProvider implements IProvider { $search = trim($query->getTerm()); $result = array_merge( + $this->convertAccounts($this->searchService->searchUri($search)), $this->convertAccounts($this->searchService->searchAccounts($search)), $this->convertHashtags($this->searchService->searchHashtags($search)) ); -// $this->searchService->searchStreamContent($search) +// $this->searchService->searchStreamContent($search) return SearchResult::paginated( $this->l10n->t('Social'), $result, ($query->getCursor() ?? 0) + $query->getLimit() diff --git a/lib/Service/CacheActorService.php b/lib/Service/CacheActorService.php index 41807685..2773f6d1 100644 --- a/lib/Service/CacheActorService.php +++ b/lib/Service/CacheActorService.php @@ -152,7 +152,7 @@ class CacheActorService { throw new InvalidResourceException(); } - if ($id !== $actor->getId()) { + if (parse_url($id, PHP_URL_HOST) !== parse_url($actor->getId(), PHP_URL_HOST)) { throw new InvalidOriginException( 'CacheActorService::getFromId - id: ' . $id . ' - actorId: ' . $actor->getId() ); diff --git a/lib/Service/SearchService.php b/lib/Service/SearchService.php index 16e41c19..7d64fa4f 100644 --- a/lib/Service/SearchService.php +++ b/lib/Service/SearchService.php @@ -45,10 +45,11 @@ class SearchService { use TArrayTools; - public const SEARCH_ACCOUNTS = 1; - public const SEARCH_HASHTAGS = 2; - public const SEARCH_CONTENT = 4; - public const SEARCH_ALL = 7; + public const SEARCH_URI = 1; + public const SEARCH_ACCOUNTS = 2; + public const SEARCH_HASHTAGS = 4; + public const SEARCH_CONTENT = 8; + public const SEARCH_ALL = 15; private CacheActorService $cacheActorService; private HashtagService $hashtagService; @@ -77,6 +78,25 @@ class SearchService { } + /** + * @param string $search + * + * @return Person[] + */ + public function searchUri(string $search): array { + $type = $this->getTypeFromSearch($search); + + if ($search !== '' && $type & self::SEARCH_URI) { + try { + return [$this->cacheActorService->getFromId($search)]; + } catch (Exception $e) { + } + } + + return []; + } + + /** * @param string $search * @@ -154,6 +174,10 @@ class SearchService { return self::SEARCH_HASHTAGS; default: + if (substr($search, 0, 4) === 'http') { + return self::SEARCH_URI; + } + return self::SEARCH_ALL; } }