Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/1575/head
Maxence Lange 2023-01-12 15:34:39 -01:00
rodzic f860167e81
commit f9e891876b
3 zmienionych plików z 46 dodań i 14 usunięć

Wyświetl plik

@ -30,7 +30,6 @@ declare(strict_types=1);
namespace OCA\Social\Search; namespace OCA\Social\Search;
use OCA\Social\Tools\Traits\TArrayTools;
use Exception; use Exception;
use OCA\Social\Exceptions\AccountDoesNotExistException; use OCA\Social\Exceptions\AccountDoesNotExistException;
use OCA\Social\Model\ActivityPub\Actor\Person; 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\CacheActorService;
use OCA\Social\Service\ConfigService; use OCA\Social\Service\ConfigService;
use OCA\Social\Service\FollowService; use OCA\Social\Service\FollowService;
use OCA\Social\Service\MiscService;
use OCA\Social\Service\SearchService; use OCA\Social\Service\SearchService;
use OCA\Social\Service\StreamService; use OCA\Social\Service\StreamService;
use OCA\Social\Tools\Traits\TArrayTools;
use OCP\IL10N; use OCP\IL10N;
use OCP\IURLGenerator; use OCP\IURLGenerator;
use OCP\IUser; use OCP\IUser;
use OCP\Search\IProvider; use OCP\Search\IProvider;
use OCP\Search\ISearchQuery; use OCP\Search\ISearchQuery;
use OCP\Search\SearchResult; use OCP\Search\SearchResult;
use Psr\Log\LoggerInterface;
/** /**
* Class UnifiedSearchProvider * Class UnifiedSearchProvider
@ -67,7 +67,8 @@ class UnifiedSearchProvider implements IProvider {
private AccountService $accountService; private AccountService $accountService;
private SearchService $searchService; private SearchService $searchService;
private ConfigService $configService; private ConfigService $configService;
private MiscService $miscService; private LoggerInterface $logger;
private ?Person $viewer = null; private ?Person $viewer = null;
@ -82,12 +83,18 @@ class UnifiedSearchProvider implements IProvider {
* @param AccountService $accountService * @param AccountService $accountService
* @param SearchService $searchService * @param SearchService $searchService
* @param ConfigService $configService * @param ConfigService $configService
* @param MiscService $miscService * @param LoggerInterface $logger
*/ */
public function __construct( public function __construct(
IL10N $l10n, IURLGenerator $urlGenerator, StreamService $streamService, FollowService $followService, IL10N $l10n,
CacheActorService $cacheActorService, AccountService $accountService, SearchService $searchService, IURLGenerator $urlGenerator,
ConfigService $configService, MiscService $miscService StreamService $streamService,
FollowService $followService,
CacheActorService $cacheActorService,
AccountService $accountService,
SearchService $searchService,
ConfigService $configService,
LoggerInterface $logger
) { ) {
$this->l10n = $l10n; $this->l10n = $l10n;
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
@ -97,7 +104,7 @@ class UnifiedSearchProvider implements IProvider {
$this->accountService = $accountService; $this->accountService = $accountService;
$this->searchService = $searchService; $this->searchService = $searchService;
$this->configService = $configService; $this->configService = $configService;
$this->miscService = $miscService; $this->logger = $logger;
} }
@ -140,11 +147,12 @@ class UnifiedSearchProvider implements IProvider {
$search = trim($query->getTerm()); $search = trim($query->getTerm());
$result = array_merge( $result = array_merge(
$this->convertAccounts($this->searchService->searchUri($search)),
$this->convertAccounts($this->searchService->searchAccounts($search)), $this->convertAccounts($this->searchService->searchAccounts($search)),
$this->convertHashtags($this->searchService->searchHashtags($search)) $this->convertHashtags($this->searchService->searchHashtags($search))
); );
// $this->searchService->searchStreamContent($search) // $this->searchService->searchStreamContent($search)
return SearchResult::paginated( return SearchResult::paginated(
$this->l10n->t('Social'), $result, ($query->getCursor() ?? 0) + $query->getLimit() $this->l10n->t('Social'), $result, ($query->getCursor() ?? 0) + $query->getLimit()

Wyświetl plik

@ -152,7 +152,7 @@ class CacheActorService {
throw new InvalidResourceException(); throw new InvalidResourceException();
} }
if ($id !== $actor->getId()) { if (parse_url($id, PHP_URL_HOST) !== parse_url($actor->getId(), PHP_URL_HOST)) {
throw new InvalidOriginException( throw new InvalidOriginException(
'CacheActorService::getFromId - id: ' . $id . ' - actorId: ' . $actor->getId() 'CacheActorService::getFromId - id: ' . $id . ' - actorId: ' . $actor->getId()
); );

Wyświetl plik

@ -45,10 +45,11 @@ class SearchService {
use TArrayTools; use TArrayTools;
public const SEARCH_ACCOUNTS = 1; public const SEARCH_URI = 1;
public const SEARCH_HASHTAGS = 2; public const SEARCH_ACCOUNTS = 2;
public const SEARCH_CONTENT = 4; public const SEARCH_HASHTAGS = 4;
public const SEARCH_ALL = 7; public const SEARCH_CONTENT = 8;
public const SEARCH_ALL = 15;
private CacheActorService $cacheActorService; private CacheActorService $cacheActorService;
private HashtagService $hashtagService; 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 * @param string $search
* *
@ -154,6 +174,10 @@ class SearchService {
return self::SEARCH_HASHTAGS; return self::SEARCH_HASHTAGS;
default: default:
if (substr($search, 0, 4) === 'http') {
return self::SEARCH_URI;
}
return self::SEARCH_ALL; return self::SEARCH_ALL;
} }
} }