Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/rentpix.corals.io/Corals/modules/RentPix/Jobs/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/rentpix.corals.io/Corals/modules/RentPix/Jobs/InspectionImagesUploadedJob.php
<?php

namespace Corals\Modules\RentPix\Jobs;

use Corals\Modules\RentPix\Models\Inspection;
use FFMpeg\FFProbe;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Storage;
use Pawlox\VideoThumbnail\VideoThumbnail;
use Spatie\MediaLibrary\Conversions\FileManipulator;
use Spatie\MediaLibrary\MediaCollections\Models\Media;

class InspectionImagesUploadedJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public int $timeout = 3600;

    /**
     * @param  Inspection  $inspection
     */
    public function __construct(public Inspection $inspection)
    {
    }

    public function handle()
    {
        logger(__METHOD__.": STARTED [inspection: {$this->inspection->id}]");
        /** @var \Spatie\MediaLibrary\Conversions\FileManipulator $fileManipulator */
        $fileManipulator = app(FileManipulator::class);

        try {
            $this->inspection->media()
                ->where('mime_type', 'like', '%image%')
                ->each(fn ($media) => $fileManipulator->createDerivedFiles($media));

            $this->inspection->media()
                ->where('mime_type', 'like', '%video%')
                ->each(fn ($media) => $this->generateVideoThumb($media));
        } catch (\Exception $exception) {
            report($exception);
            logger(__METHOD__.": EXCEPTION [inspection: {$this->inspection->id}] | ".$exception->getMessage());
        }

        logger(__METHOD__.": ENDED [inspection: {$this->inspection->id}]");
    }

    public function generateVideoThumb(Media $media)
    {
        $url = getMediaPublicURL($media);
        $mediaPathInfo = pathinfo($media->getPath());

        $ffprobe = FFProbe::create();
        $duration = $ffprobe->format($url)
            ->get('duration');

        (new VideoThumbnail())->createThumbnail(
            $url,
            Storage::disk('tmp')->getConfig()['root'],
            $mediaPathInfo['filename'].'.jpg',
            floor($duration / 2),
            300,
            300,
        );

        $content = Storage::disk('tmp')->get($mediaPathInfo['filename'].'.jpg');
        $path = $mediaPathInfo['dirname'].'/conversions/'.$mediaPathInfo['filename'].'-thumb.jpg';
        Storage::disk($media->disk)->put($path, $content);
        Storage::disk('tmp')->delete($mediaPathInfo['filename'].'.jpg');
        $media->markAsConversionGenerated('thumb');
    }
}

Spamworldpro Mini