Signed-off-by: Joas Schilling <coding@schilljs.com>tags/v14.0.0beta1
@@ -50,27 +50,40 @@ class Provider extends \OCP\Search\Provider { | |||
return []; | |||
} | |||
/** @var IComment[] $comments */ | |||
$comments = $cm->search($query, 'files', '', 'comment'); | |||
$result = []; | |||
foreach ($comments as $comment) { | |||
if ($comment->getActorType() !== 'users') { | |||
continue; | |||
$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; | |||
} | |||
} | |||
$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; |
@@ -500,9 +500,11 @@ class Manager implements ICommentsManager { | |||
* @param string $objectType Limit the search by object type | |||
* @param string $objectId Limit the search by object id | |||
* @param string $verb Limit the verb of the comment | |||
* @param int $offset | |||
* @param int $limit | |||
* @return IComment[] | |||
*/ | |||
public function search(string $search, string $objectType, string $objectId, string $verb): array { | |||
public function search(string $search, string $objectType, string $objectId, string $verb, int $offset, int $limit = 50): array { | |||
$query = $this->dbConn->getQueryBuilder(); | |||
$query->select('*') | |||
@@ -511,7 +513,8 @@ class Manager implements ICommentsManager { | |||
'%' . $this->dbConn->escapeLikeParameter($search). '%' | |||
))) | |||
->orderBy('creation_timestamp', 'DESC') | |||
->addOrderBy('id', 'DESC'); | |||
->addOrderBy('id', 'DESC') | |||
->setMaxResults($limit); | |||
if ($objectType !== '') { | |||
$query->andWhere($query->expr()->eq('object_type', $query->createNamedParameter($objectType))); | |||
@@ -522,6 +525,9 @@ class Manager implements ICommentsManager { | |||
if ($verb !== '') { | |||
$query->andWhere($query->expr()->eq('verb', $query->createNamedParameter($verb))); | |||
} | |||
if ($offset !== 0) { | |||
$query->setFirstResult($offset); | |||
} | |||
$comments = []; | |||
$result = $query->execute(); |
@@ -145,10 +145,12 @@ interface ICommentsManager { | |||
* @param string $objectType Limit the search by object type | |||
* @param string $objectId Limit the search by object id | |||
* @param string $verb Limit the verb of the comment | |||
* @param int $offset | |||
* @param int $limit | |||
* @return IComment[] | |||
* @since 14.0.0 | |||
*/ | |||
public function search(string $search, string $objectType, string $objectId, string $verb): array; | |||
public function search(string $search, string $objectType, string $objectId, string $verb, int $offset, int $limit = 50): array; | |||
/** | |||
* @param $objectType string the object type, e.g. 'files' |
@@ -32,7 +32,7 @@ class FakeManager implements ICommentsManager { | |||
public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $notOlderThan = null) {} | |||
public function search(string $search, string $objectType, string $objectId, string $verb): array { | |||
public function search(string $search, string $objectType, string $objectId, string $verb, int $offset, int $limit = 50): array { | |||
return []; | |||
} | |||