From 8edd829436cbc4996cd252eef0c2a17f426ded7b Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 18 Jun 2021 02:55:42 -0600 Subject: [PATCH] Update AP Helpers, generate notification for remote replies --- .../StatusPipeline/StatusReplyPipeline.php | 89 +++++++++++++++++++ app/Util/ActivityPub/Helpers.php | 3 + 2 files changed, 92 insertions(+) create mode 100644 app/Jobs/StatusPipeline/StatusReplyPipeline.php diff --git a/app/Jobs/StatusPipeline/StatusReplyPipeline.php b/app/Jobs/StatusPipeline/StatusReplyPipeline.php new file mode 100644 index 000000000..438d78eba --- /dev/null +++ b/app/Jobs/StatusPipeline/StatusReplyPipeline.php @@ -0,0 +1,89 @@ +status = $status; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $status = $this->status; + $actor = $status->profile; + $reply = Status::find($status->in_reply_to_id); + + if(!$actor || !$reply) { + return 1; + } + + $target = $reply->profile; + + $exists = Notification::whereProfileId($target->id) + ->whereActorId($actor->id) + ->whereIn('action', ['mention', 'comment']) + ->whereItemId($status->id) + ->whereItemType('App\Status') + ->count(); + + if ($actor->id === $target || $exists !== 0) { + return 1; + } + + DB::transaction(function() use($target, $actor, $status) { + $notification = new Notification(); + $notification->profile_id = $target->id; + $notification->actor_id = $actor->id; + $notification->action = 'comment'; + $notification->message = $status->replyToText(); + $notification->rendered = $status->replyToHtml(); + $notification->item_id = $status->id; + $notification->item_type = "App\Status"; + $notification->save(); + + NotificationService::setNotification($notification); + NotificationService::set($notification->profile_id, $notification->id); + }); + + return 1; + } + +} diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 34bb889c6..58876bc2c 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -22,6 +22,7 @@ use App\Jobs\AvatarPipeline\CreateAvatar; use App\Jobs\RemoteFollowPipeline\RemoteFollowImportRecent; use App\Jobs\ImageOptimizePipeline\{ImageOptimize,ImageThumbnail}; use App\Jobs\StatusPipeline\NewStatusPipeline; +use App\Jobs\StatusPipeline\StatusReplyPipeline; use App\Util\ActivityPub\HttpSignature; use Illuminate\Support\Str; use App\Services\ActivityPubFetchService; @@ -397,6 +398,8 @@ class Helpers { $status->save(); if($reply_to == null) { self::importNoteAttachment($res, $status); + } else { + StatusReplyPipeline::dispatch($status); } return $status; });