From 37fd03428aa306298c2cb85dc3f99a1ac94f1922 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 10 Jul 2023 23:41:17 -0600 Subject: [PATCH] Update ApiV1Controller, add include_reblogs attribute to home timeline --- app/Http/Controllers/Api/ApiV1Controller.php | 18 +++++++++++++----- .../Api/StatusStatelessTransformer.php | 3 ++- app/Transformer/Api/StatusTransformer.php | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index f2338f91e..3e67632a7 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -2132,7 +2132,8 @@ class ApiV1Controller extends Controller 'page' => 'sometimes|integer|max:40', 'min_id' => 'sometimes|integer|min:0|max:' . PHP_INT_MAX, 'max_id' => 'sometimes|integer|min:0|max:' . PHP_INT_MAX, - 'limit' => 'sometimes|integer|min:1|max:100' + 'limit' => 'sometimes|integer|min:1|max:100', + 'include_reblogs' => 'sometimes', ]); $napi = $request->has(self::PF_API_ENTITY_KEY); @@ -2141,6 +2142,13 @@ class ApiV1Controller extends Controller $max = $request->input('max_id'); $limit = $request->input('limit') ?? 20; $pid = $request->user()->profile_id; + $includeReblogs = $request->filled('include_reblogs'); + $nullFields = $includeReblogs ? + ['in_reply_to_id'] : + ['in_reply_to_id', 'reblog_of_id']; + $inTypes = $includeReblogs ? + ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album', 'share'] : + ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']; $following = Cache::remember('profile:following:'.$pid, 1209600, function() use($pid) { $following = Follower::whereProfileId($pid)->pluck('following_id'); @@ -2159,9 +2167,9 @@ class ApiV1Controller extends Controller 'reblog_of_id' ) ->where('id', $dir, $id) - ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->whereNull($nullFields) ->whereIntegerInRaw('profile_id', $following) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereIn('type', $inTypes) ->whereIn('visibility',['public', 'unlisted', 'private']) ->orderByDesc('id') ->take(($limit * 2)) @@ -2202,9 +2210,9 @@ class ApiV1Controller extends Controller 'in_reply_to_id', 'reblog_of_id', ) - ->whereNull(['in_reply_to_id', 'reblog_of_id']) + ->whereNull($nullFields) ->whereIntegerInRaw('profile_id', $following) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereIn('type', $inTypes) ->whereIn('visibility',['public', 'unlisted', 'private']) ->orderByDesc('id') ->take(($limit * 2)) diff --git a/app/Transformer/Api/StatusStatelessTransformer.php b/app/Transformer/Api/StatusStatelessTransformer.php index acb522446..2ed381c1a 100644 --- a/app/Transformer/Api/StatusStatelessTransformer.php +++ b/app/Transformer/Api/StatusStatelessTransformer.php @@ -10,6 +10,7 @@ use App\Services\HashidService; use App\Services\LikeService; use App\Services\MediaService; use App\Services\MediaTagService; +use App\Services\StatusService; use App\Services\StatusHashtagService; use App\Services\StatusLabelService; use App\Services\StatusMentionService; @@ -32,7 +33,7 @@ class StatusStatelessTransformer extends Fractal\TransformerAbstract 'url' => $status->url(), 'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null, 'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null, - 'reblog' => null, + 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id) : null, 'content' => $status->rendered ?? $status->caption, 'content_text' => $status->caption, 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)), diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index f735a57be..d04b025f8 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -10,6 +10,7 @@ use App\Services\HashidService; use App\Services\LikeService; use App\Services\MediaService; use App\Services\MediaTagService; +use App\Services\StatusService; use App\Services\StatusHashtagService; use App\Services\StatusLabelService; use App\Services\StatusMentionService; @@ -35,7 +36,7 @@ class StatusTransformer extends Fractal\TransformerAbstract 'url' => $status->url(), 'in_reply_to_id' => (string) $status->in_reply_to_id, 'in_reply_to_account_id' => (string) $status->in_reply_to_profile_id, - 'reblog' => null, + 'reblog' => $status->reblog_of_id ? StatusService::get($status->reblog_of_id) : null, 'content' => $status->rendered ?? $status->caption, 'content_text' => $status->caption, 'created_at' => str_replace('+00:00', 'Z', $status->created_at->format(DATE_RFC3339_EXTENDED)),