activity = $activity; $this->status = $status; } /** * Execute the job. * * @return void */ public function handle() { $res = $this->activity; $status = $this->status; $tags = collect($res['tag']); // Emoji $tags->filter(function($tag) { return $tag && $tag['type'] == 'Emoji' && isset($tag['id'], $tag['icon'], $tag['name']); }) ->map(function($tag) { CustomEmojiService::import($tag['id'], $this->status->id); }); // Hashtags $tags->filter(function($tag) { return $tag && $tag['type'] == 'Hashtag' && isset($tag['href'], $tag['name']); }) ->map(function($tag) use($status) { $name = substr($tag['name'], 0, 1) == '#' ? substr($tag['name'], 1) : $tag['name']; $hashtag = Hashtag::firstOrCreate([ 'slug' => str_slug($name) ], [ 'name' => $name ]); StatusHashtag::firstOrCreate([ 'status_id' => $status->id, 'hashtag_id' => $hashtag->id, 'profile_id' => $status->profile_id, 'status_visibility' => $status->scope ]); }); // Mentions $tags->filter(function($tag) { 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'); }) ->map(function($tag) use($status) { $parts = explode('/', $status['href']); if(!$parts) { return; } $pid = AccountService::usernameToId(end($parts)); if(!$pid) { return; } $mention = new Mention; $mention->status_id = $status->id; $mention->profile_id = $pid; $mention->save(); MentionPipeline::dispatch($status, $mention); }); } }