importPost->id; } /** * Get the middleware the job should pass through. * * @return array */ public function middleware(): array { return [(new WithoutOverlapping("import-media-to-cloud-pipeline:ip-id:{$this->importPost->id}"))->shared()->dontRelease()]; } /** * Delete the job if its models no longer exist. * * @var bool */ public $deleteWhenMissingModels = true; /** * Create a new job instance. */ public function __construct(ImportPost $importPost) { $this->importPost = $importPost; } /** * Execute the job. */ public function handle(): void { $ip = $this->importPost; if( $ip->status_id === null || $ip->uploaded_to_s3 === true || (bool) config_cache('pixelfed.cloud_storage') === false) { return; } $media = Media::whereStatusId($ip->status_id)->get(); if(!$media || !$media->count()) { $importPost = ImportPost::find($ip->id); $importPost->uploaded_to_s3 = true; $importPost->save(); return; } foreach($media as $mediaPart) { $this->handleMedia($mediaPart); } } protected function handleMedia($media) { $ip = $this->importPost; $importPost = ImportPost::find($ip->id); if(!$importPost) { return; } $res = MediaStorageService::move($media); $importPost->uploaded_to_s3 = true; $importPost->save(); if(!$res) { return; } if($res === 'invalid file') { return; } if($res === 'success') { Storage::disk('local')->delete($media->media_path); } } }