Files
memefast/app/Jobs/SaveVideoElementsBatchJob.php
2025-05-28 12:59:01 +08:00

79 lines
2.2 KiB
PHP

<?php
namespace App\Jobs;
use App\Helpers\FirstParty\MediaEngine\MediaEngine;
use App\Models\Media;
use App\Models\Video;
use Illuminate\Bus\Batchable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SaveVideoElementsBatchJob implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $video_id;
public $timeout = 300;
/**
* Create a new job instance.
*/
public function __construct(int $video_id)
{
$this->onQueue('general_video');
$this->video_id = $video_id;
}
/**
* Execute the job.
*/
public function handle(): void
{
if ($this->batch()?->cancelled()) {
return;
}
$video = Video::with('video_elements')->find($this->video_id);
if (! $video) {
return;
}
foreach ($video->video_elements as $video_element) {
if (! is_empty($video_element->asset_uuid)) {
continue;
}
// dump($video_element);
// Media Details: Filename, extension and mimetype
$media_details = MediaEngine::getFileDetailsbyUrl($video_element->original_asset_url);
// Media Content: Blob
$media_content = file_get_contents($video_element->original_asset_url);
// Media Filename: generate a new filename
$media_filename = $video_element->type.'_'.epoch_now_timestamp().'.'.$media_details->extension;
$saved_media = MediaEngine::addMedia(
MediaEngine::getCollectionKeyByOwnerMediaType('user', $video_element->type),
$video_element->type,
MediaEngine::USER_UPLOADED,
MediaEngine::USER,
$media_filename,
$media_content,
);
$video_element->asset_uuid = $saved_media->uuid;
$video_element->asset_url = MediaEngine::getMediaCloudUrl($saved_media);
$video_element->save();
}
}
}