Ver Fonte

Update AP Helpers, generate notification for remote replies

Daniel Supernault há 4 anos atrás
pai
commit
8edd829436

+ 89 - 0
app/Jobs/StatusPipeline/StatusReplyPipeline.php

@@ -0,0 +1,89 @@
+<?php
+
+namespace App\Jobs\StatusPipeline;
+
+use App\Notification;
+use App\Status;
+use Cache;
+use DB;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Support\Facades\Redis;
+use App\Services\NotificationService;
+
+class StatusReplyPipeline implements ShouldQueue
+{
+	use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+	protected $status;
+
+	/**
+	 * Delete the job if its models no longer exist.
+	 *
+	 * @var bool
+	 */
+	public $deleteWhenMissingModels = true;
+
+	public $timeout = 5;
+	public $tries = 1;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @return void
+	 */
+	public function __construct(Status $status)
+	{
+		$this->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;
+	}
+
+}

+ 3 - 0
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;
 			});