浏览代码

Update LikePipeline

Daniel Supernault 6 年之前
父节点
当前提交
e5683f94d4
共有 1 个文件被更改,包括 28 次插入7 次删除
  1. 28 7
      app/Jobs/LikePipeline/LikePipeline.php

+ 28 - 7
app/Jobs/LikePipeline/LikePipeline.php

@@ -2,16 +2,17 @@
 
 namespace App\Jobs\LikePipeline;
 
-use App\Like;
-use App\Notification;
-use Cache;
+use Cache, Log, Redis;
+use App\{Like, Notification};
 use Illuminate\Bus\Queueable;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
-use Log;
-use Redis;
+use App\Util\ActivityPub\Helpers;
+use League\Fractal;
+use League\Fractal\Serializer\ArraySerializer;
+use App\Transformer\ActivityPub\Verb\Like as LikeTransformer;
 
 class LikePipeline implements ShouldQueue
 {
@@ -48,11 +49,15 @@ class LikePipeline implements ShouldQueue
         $status = $this->like->status;
         $actor = $this->like->actor;
 
-        if (!$status || $status->url !== null) {
-            // Ignore notifications to remote statuses, or deleted statuses
+        if (!$status) {
+            // Ignore notifications to deleted statuses
             return;
         }
 
+        if($status->url && $actor->domain == null) {
+            return $this->remoteLikeDeliver();
+        }
+
         $exists = Notification::whereProfileId($status->profile_id)
                   ->whereActorId($actor->id)
                   ->whereAction('like')
@@ -78,4 +83,20 @@ class LikePipeline implements ShouldQueue
         } catch (Exception $e) {
         }
     }
+
+    public function remoteLikeDeliver()
+    {
+        $like = $this->like;
+        $status = $this->like->status;
+        $actor = $this->like->actor;
+
+        $fractal = new Fractal\Manager();
+        $fractal->setSerializer(new ArraySerializer());
+        $resource = new Fractal\Resource\Item($like, new LikeTransformer());
+        $activity = $fractal->createData($resource)->toArray();
+
+        $url = $status->profile->sharedInbox ?? $status->profile->inbox_url;
+
+        Helpers::sendSignedObject($actor, $url, $activity);
+    }
 }