From e1abbf1987fc759d72a687f2b4efdb2cf7214b01 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Fri, 19 Jul 2019 09:59:15 -0100 Subject: adding liked stream Signed-off-by: Maxence Lange --- appinfo/routes.php | 1 + lib/Controller/LocalController.php | 22 ++++++++++++++++++++++ lib/Db/CoreRequestBuilder.php | 2 +- lib/Db/StreamRequest.php | 37 ++++++++++++++++++++++++++++++++++--- lib/Service/NoteService.php | 15 ++++++++++++++- 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 93f73171..8d293d13 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -66,6 +66,7 @@ return [ ['name' => 'Local#streamTag', 'url' => '/api/v1/stream/tag/{hashtag}/', 'verb' => 'GET'], ['name' => 'Local#streamFederated', 'url' => '/api/v1/stream/federated', 'verb' => 'GET'], ['name' => 'Local#streamDirect', 'url' => '/api/v1/stream/direct', 'verb' => 'GET'], + ['name' => 'Local#streamLiked', 'url' => '/api/v1/stream/liked', 'verb' => 'GET'], ['name' => 'Local#streamAccount', 'url' => '/api/v1/account/{username}/stream', 'verb' => 'GET'], ['name' => 'Local#postCreate', 'url' => '/api/v1/post', 'verb' => 'POST'], diff --git a/lib/Controller/LocalController.php b/lib/Controller/LocalController.php index 69294bf8..b731be2e 100644 --- a/lib/Controller/LocalController.php +++ b/lib/Controller/LocalController.php @@ -467,6 +467,28 @@ class LocalController extends Controller { } + /** + * Get liked post + * + * @NoAdminRequired + * + * @param int $since + * @param int $limit + * + * @return DataResponse + */ + public function streamLiked(int $since = 0, int $limit = 5): DataResponse { + try { + $this->initViewer(true); + $posts = $this->noteService->getStreamLiked($since, $limit); + + return $this->success($posts); + } catch (Exception $e) { + return $this->fail($e); + } + } + + /** * @NoAdminRequired * diff --git a/lib/Db/CoreRequestBuilder.php b/lib/Db/CoreRequestBuilder.php index 214a3b4c..5647a4a4 100644 --- a/lib/Db/CoreRequestBuilder.php +++ b/lib/Db/CoreRequestBuilder.php @@ -1100,6 +1100,6 @@ class CoreRequestBuilder { $qb->where($this->exprLimitToDBField($qb, 'class', 'OCA\Social\Cron\Queue', true, true)); $qb->execute(); } - + } diff --git a/lib/Db/StreamRequest.php b/lib/Db/StreamRequest.php index 737dfd3d..e2d40af8 100644 --- a/lib/Db/StreamRequest.php +++ b/lib/Db/StreamRequest.php @@ -483,10 +483,7 @@ class StreamRequest extends StreamRequestBuilder { $qb = $this->getStreamSelectSql(); $this->limitPaginate($qb, $since, $limit); -// if ($localOnly) { $this->limitToLocal($qb, $localOnly); -// } - $this->limitToType($qb, Note::TYPE); $this->leftJoinCacheActors($qb, 'attributed_to'); @@ -509,6 +506,40 @@ class StreamRequest extends StreamRequestBuilder { } + /** + * Should returns: + * * All liked posts + * + * @param int $since + * @param int $limit + * @param bool $localOnly + * + * @return array + * @throws Exception + */ + public function getLiked(int $since = 0, int $limit = 5, bool $localOnly = true): array { + $qb = $this->getStreamSelectSql(); + $this->limitPaginate($qb, $since, $limit); + + $this->limitToType($qb, Note::TYPE); + + $this->leftJoinCacheActors($qb, 'attributed_to'); + $this->leftJoinStreamAction($qb); + + $streams = []; + $cursor = $qb->execute(); + while ($data = $cursor->fetch()) { + try { +// $streams[] = $this->parseStreamSelectSql($data); + } catch (Exception $e) { + } + } + $cursor->closeCursor(); + + return $streams; + } + + /** * Should returns: * - All public post related to a tag (not yet) diff --git a/lib/Service/NoteService.php b/lib/Service/NoteService.php index 27327709..b9043175 100644 --- a/lib/Service/NoteService.php +++ b/lib/Service/NoteService.php @@ -442,7 +442,7 @@ class NoteService { } - /**m + /** * * @param int $since * @param int $limit @@ -455,6 +455,19 @@ class NoteService { } + /** + * + * @param int $since + * @param int $limit + * + * @return Note[] + * @throws Exception + */ + public function getStreamLiked(int $since = 0, int $limit = 5): array { + return $this->streamRequest->getLiked($since, $limit); + } + + /** * @param $noteId * -- cgit v1.2.3 From d985dc87e2870430a84b7ed4573d1dde7bfc17bb Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Fri, 19 Jul 2019 10:53:38 -0100 Subject: limit to liked post Signed-off-by: Maxence Lange --- lib/Db/CoreRequestBuilder.php | 53 +++++++++++++++++++++++++++++++++++++++++++ lib/Db/StreamRequest.php | 6 +++-- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/lib/Db/CoreRequestBuilder.php b/lib/Db/CoreRequestBuilder.php index 5647a4a4..cab86988 100644 --- a/lib/Db/CoreRequestBuilder.php +++ b/lib/Db/CoreRequestBuilder.php @@ -858,6 +858,59 @@ class CoreRequestBuilder { } + /** + * @param IQueryBuilder $qb + * @param string $type + */ + protected function leftJoinActions(IQueryBuilder &$qb, string $type) { + if ($qb->getType() !== QueryBuilder::SELECT || $this->viewer === null) { + return; + } + + $expr = $qb->expr(); + $func = $qb->func(); + + $pf = $this->defaultSelectAlias; + + $qb->selectAlias('a.id', 'action_id') + ->selectAlias('a.actor_id', 'action_actor_id') + ->selectAlias('a.object_id', 'action_object_id') + ->selectAlias('a.type', 'action_type'); + + $andX = $expr->andX(); + $andX->add($expr->eq($func->lower($pf . '.id'), $func->lower('a.object_id'))); + $andX->add($expr->eq('a.type', $qb->createNamedParameter($type))); + $andX->add( + $expr->eq( + $func->lower('a.actor_id'), + $qb->createNamedParameter(strtolower($this->viewer->getId())) + ) + ); + + $qb->leftJoin( + $this->defaultSelectAlias, CoreRequestBuilder::TABLE_ACTIONS, 'a', $andX + ); + } + + + /** + * @param array $data + */ + protected function parseActionsLeftJoin(array $data) { + $new = []; + foreach ($data as $k => $v) { + if (substr($k, 0, 7) === 'action_') { + $new[substr($k, 7)] = $v; + } + } + +// $action = new Action(); +// $action->importFromDatabase($new); + +// return $action; + } + + /** * @param IQueryBuilder $qb * @param string $fieldDocumentId diff --git a/lib/Db/StreamRequest.php b/lib/Db/StreamRequest.php index e2d40af8..365d83f5 100644 --- a/lib/Db/StreamRequest.php +++ b/lib/Db/StreamRequest.php @@ -44,6 +44,7 @@ use OCA\Social\Model\ActivityPub\ACore; use OCA\Social\Model\ActivityPub\Actor\Person; use OCA\Social\Model\ActivityPub\Internal\SocialAppNotification; use OCA\Social\Model\ActivityPub\Object\Document; +use OCA\Social\Model\ActivityPub\Object\Like; use OCA\Social\Model\ActivityPub\Object\Note; use OCA\Social\Model\ActivityPub\Stream; use OCA\Social\Service\ConfigService; @@ -524,13 +525,14 @@ class StreamRequest extends StreamRequestBuilder { $this->limitToType($qb, Note::TYPE); $this->leftJoinCacheActors($qb, 'attributed_to'); - $this->leftJoinStreamAction($qb); + $this->leftJoinActions($qb, Like::TYPE); + $this->filterDBField($qb, 'id', '', false, 'a'); $streams = []; $cursor = $qb->execute(); while ($data = $cursor->fetch()) { try { -// $streams[] = $this->parseStreamSelectSql($data); + $streams[] = $this->parseStreamSelectSql($data); } catch (Exception $e) { } } -- cgit v1.2.3