You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.2 KiB
95 lines
2.2 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Talk\Search;
|
|
|
|
use OCA\Talk\Exceptions\ParticipantNotFoundException;
|
|
use OCA\Talk\Exceptions\RoomNotFoundException;
|
|
use OCP\IUser;
|
|
use OCP\Search\ISearchQuery;
|
|
use OCP\Search\SearchResult;
|
|
|
|
class CurrentMessageSearch extends MessageSearch {
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\Override]
|
|
public function getId(): string {
|
|
return 'talk-message-current';
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\Override]
|
|
public function getName(): string {
|
|
return $this->l->t('Messages in current conversation');
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\Override]
|
|
public function getOrder(string $route, array $routeParameters): ?int {
|
|
$currentUser = $this->userSession->getUser();
|
|
if ($currentUser && $this->talkConfig->isDisabledForUser($currentUser)) {
|
|
return null;
|
|
}
|
|
|
|
if ($route === 'spreed.Page.showCall') {
|
|
// In conversation, prefer this search results
|
|
return -3;
|
|
}
|
|
|
|
// We are not returning something anyway.
|
|
return null;
|
|
}
|
|
|
|
#[\Override]
|
|
protected function getSublineTemplate(): string {
|
|
return $this->l->t('{user}');
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\Override]
|
|
public function search(IUser $user, ISearchQuery $query): SearchResult {
|
|
$title = $this->l->t('Messages');
|
|
$currentToken = $this->getCurrentConversationToken($query);
|
|
if ($currentToken === '') {
|
|
return SearchResult::complete($title, []);
|
|
}
|
|
|
|
$filter = $query->getFilter(self::CONVERSATION_FILTER);
|
|
if ($filter && $filter->get() !== $currentToken) {
|
|
return SearchResult::complete($title, []);
|
|
}
|
|
|
|
try {
|
|
$room = $this->roomManager->getRoomForUserByToken(
|
|
$currentToken,
|
|
$user->getUID()
|
|
);
|
|
} catch (RoomNotFoundException) {
|
|
return SearchResult::complete($title, []);
|
|
}
|
|
|
|
try {
|
|
$this->participantService->getParticipant($room, $user->getUID(), false);
|
|
} catch (ParticipantNotFoundException) {
|
|
return SearchResult::complete($title, []);
|
|
}
|
|
|
|
if ($room->isFederatedConversation()) {
|
|
return SearchResult::complete($title, []);
|
|
}
|
|
|
|
return $this->performSearch($user, $query, $this->l->t('Messages'), [$room], true);
|
|
}
|
|
}
|