From 171492301babded5ae413854fb9f54acf40ed693 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 31 Jan 2023 04:59:46 -0700 Subject: [PATCH] Update MentionPipeline, store non-local mentions --- app/Jobs/MentionPipeline/MentionPipeline.php | 28 +++++++++++-------- .../StatusPipeline/StatusTagsPipeline.php | 28 ++++++++++++------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/app/Jobs/MentionPipeline/MentionPipeline.php b/app/Jobs/MentionPipeline/MentionPipeline.php index ea833345d..2186af9d5 100644 --- a/app/Jobs/MentionPipeline/MentionPipeline.php +++ b/app/Jobs/MentionPipeline/MentionPipeline.php @@ -10,6 +10,7 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use App\Services\StatusService; class MentionPipeline implements ShouldQueue { @@ -59,17 +60,20 @@ class MentionPipeline implements ShouldQueue 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); } } diff --git a/app/Jobs/StatusPipeline/StatusTagsPipeline.php b/app/Jobs/StatusPipeline/StatusTagsPipeline.php index 31d702c4c..1f7969555 100644 --- a/app/Jobs/StatusPipeline/StatusTagsPipeline.php +++ b/app/Jobs/StatusPipeline/StatusTagsPipeline.php @@ -8,14 +8,15 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use App\Services\AccountService; use App\Services\CustomEmojiService; use App\Services\StatusService; use App\Jobs\MentionPipeline\MentionPipeline; use App\Mention; -use App\Services\AccountService; use App\Hashtag; use App\StatusHashtag; use App\Services\TrendingHashtagService; +use App\Util\ActivityPub\Helpers; class StatusTagsPipeline implements ShouldQueue { @@ -89,17 +90,24 @@ class StatusTagsPipeline implements ShouldQueue return $tag && $tag['type'] == 'Mention' && 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) { - $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->status_id = $status->id;