소스 검색

Update Inbox handler, fix missing object_url and uri fields for direct statuses

Daniel Supernault 1 년 전
부모
커밋
a0157fce0c
2개의 변경된 파일44개의 추가작업 그리고 4개의 파일을 삭제
  1. 11 4
      app/Util/ActivityPub/Inbox.php
  2. 33 0
      database/migrations/2023_12_08_074345_add_direct_object_urls_to_statuses_table.php

+ 11 - 4
app/Util/ActivityPub/Inbox.php

@@ -282,8 +282,8 @@ class Inbox
 		}
 
 		if($actor->followers_count == 0) {
-            if(config('federation.activitypub.ingest.store_notes_without_followers')) {
-            } else if(FollowerService::followerCount($actor->id, true) == 0) {
+			if(config('federation.activitypub.ingest.store_notes_without_followers')) {
+			} else if(FollowerService::followerCount($actor->id, true) == 0) {
 				return;
 			}
 		}
@@ -401,6 +401,8 @@ class Inbox
 		$status->visibility = 'direct';
 		$status->scope = 'direct';
 		$status->url = $activity['id'];
+		$status->uri = $activity['id'];
+		$status->object_url = $activity['id'];
 		$status->in_reply_to_profile_id = $profile->id;
 		$status->save();
 
@@ -703,12 +705,17 @@ class Inbox
 							return;
 						}
 						$status = Status::whereProfileId($profile->id)
-							->whereObjectUrl($id)
+							->where(function($q) use($id) {
+								return $q->where('object_url', $id)
+									->orWhere('url', $id);
+							})
 							->first();
 						if(!$status) {
 							return;
 						}
-						FeedRemoveRemotePipeline::dispatch($status->id, $status->profile_id)->onQueue('feed');
+						if($status->scope && $status->scope != 'direct') {
+							FeedRemoveRemotePipeline::dispatch($status->id, $status->profile_id)->onQueue('feed');
+						}
 						RemoteStatusDelete::dispatch($status)->onQueue('high');
 						return;
 					break;

+ 33 - 0
database/migrations/2023_12_08_074345_add_direct_object_urls_to_statuses_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Status;
+use Illuminate\Database\UniqueConstraintViolationException;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        foreach(Status::whereScope('direct')->whereNotNull('url')->whereNull('object_url')->lazyById(50, 'id') as $status) {
+            try {
+                $status->object_url = $status->url;
+                $status->uri = $status->url;
+                $status->save();
+            } catch (Exception | UniqueConstraintViolationException $e) {
+                continue;
+            }
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+    }
+};