Explorar el Código

Update MentionPipeline, store non-local mentions

Daniel Supernault hace 2 años
padre
commit
171492301b

+ 16 - 12
app/Jobs/MentionPipeline/MentionPipeline.php

@@ -10,6 +10,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\SerializesModels;
+use App\Services\StatusService;
 
 
 class MentionPipeline implements ShouldQueue
 class MentionPipeline implements ShouldQueue
 {
 {
@@ -59,17 +60,20 @@ class MentionPipeline implements ShouldQueue
             return true;
             return true;
         }
         }
 
 
-        try {
-            $notification = new Notification();
-            $notification->profile_id = $target;
-            $notification->actor_id = $actor->id;
-            $notification->action = 'mention';
-            $notification->message = $mention->toText();
-            $notification->rendered = $mention->toHtml();
-            $notification->item_id = $status->id;
-            $notification->item_type = "App\Status";
-            $notification->save();
-        } catch (Exception $e) {
-        }
+        Notification::firstOrCreate(
+            [
+                'profile_id' => $target,
+                'actor_id' => $actor->id,
+                'action' => 'mention',
+                'item_type' => 'App\Status',
+                'item_id' => $status->id,
+            ],
+            [
+                'message' => $mention->toText(),
+                'rendered' => $mention->toHtml()
+            ]
+        );
+
+        StatusService::del($status->id);
     }
     }
 }
 }

+ 18 - 10
app/Jobs/StatusPipeline/StatusTagsPipeline.php

@@ -8,14 +8,15 @@ use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\SerializesModels;
+use App\Services\AccountService;
 use App\Services\CustomEmojiService;
 use App\Services\CustomEmojiService;
 use App\Services\StatusService;
 use App\Services\StatusService;
 use App\Jobs\MentionPipeline\MentionPipeline;
 use App\Jobs\MentionPipeline\MentionPipeline;
 use App\Mention;
 use App\Mention;
-use App\Services\AccountService;
 use App\Hashtag;
 use App\Hashtag;
 use App\StatusHashtag;
 use App\StatusHashtag;
 use App\Services\TrendingHashtagService;
 use App\Services\TrendingHashtagService;
+use App\Util\ActivityPub\Helpers;
 
 
 class StatusTagsPipeline implements ShouldQueue
 class StatusTagsPipeline implements ShouldQueue
 {
 {
@@ -89,17 +90,24 @@ class StatusTagsPipeline implements ShouldQueue
 			return $tag &&
 			return $tag &&
 				$tag['type'] == 'Mention' &&
 				$tag['type'] == 'Mention' &&
 				isset($tag['href']) &&
 				isset($tag['href']) &&
-				substr($tag['href'], 0, 8) === 'https://' &&
-				parse_url($tag['href'], PHP_URL_HOST) == config('pixelfed.domain.app');
+				substr($tag['href'], 0, 8) === 'https://';
 		})
 		})
 		->map(function($tag) use($status) {
 		->map(function($tag) use($status) {
-			$parts = explode('/', $status['href']);
-			if(!$parts) {
-				return;
-			}
-			$pid = AccountService::usernameToId(end($parts));
-			if(!$pid) {
-				return;
+			if(Helpers::validateLocalUrl($tag['href'])) {
+				$parts = explode('/', $tag['href']);
+				if(!$parts) {
+					return;
+				}
+				$pid = AccountService::usernameToId(end($parts));
+				if(!$pid) {
+					return;
+				}
+			} else {
+				$acct = Helpers::profileFetch($tag['href']);
+				if(!$acct) {
+					return;
+				}
+				$pid = $acct->id;
 			}
 			}
 			$mention = new Mention;
 			$mention = new Mention;
 			$mention->status_id = $status->id;
 			$mention->status_id = $status->id;