diff --git a/src/DeferredMediaData.php b/src/DeferredMediaData.php index ea54952..ddedd9d 100644 --- a/src/DeferredMediaData.php +++ b/src/DeferredMediaData.php @@ -2,6 +2,7 @@ namespace Zoomyboy\MedialibraryHelper; +use Illuminate\Filesystem\FilesystemAdapter; use Illuminate\Support\Facades\Storage; use Spatie\LaravelData\Attributes\MapInputName; use Spatie\LaravelData\Attributes\MapOutputName; @@ -10,40 +11,21 @@ use Spatie\LaravelData\Mappers\SnakeCaseMapper; use Illuminate\Support\Collection; use Spatie\MediaLibrary\MediaCollections\MediaCollection; use Spatie\LaravelData\DataCollection; +use Spatie\LaravelData\Lazy; #[MapInputName(SnakeCaseMapper::class)] #[MapOutputName(SnakeCaseMapper::class)] class DeferredMediaData extends Data { - public ?int $id; - - public string $originalUrl; - - public int $size; - - public string $name; - public string $collectionName; - public string $fileName; - - public string $mimeType; - - public bool $fallback = false; - - public bool $isDeferred = true; + public Lazy|string $path; public static function fromPath(string $path, MediaCollection $collection): self { - $file = new MediaFile(Storage::disk(config('media-library.temp_disk'))->path($path)); return static::withoutMagicalCreationFrom([ + 'path' => Lazy::create(fn () => $path), 'collection_name' => $collection->name, - 'original_url' => Storage::disk(config('media-library.temp_disk'))->url($path), - 'size' => $file->getSize(), - 'name' => $file->getBasename(), - 'file_name' => $file->getFilename(), - 'mime_type' => Storage::disk(config('media-library.temp_disk'))->mimeType($path), - 'path' => $path, ]); } @@ -51,4 +33,23 @@ class DeferredMediaData extends Data { return static::collection($paths->map(fn ($path) => static::fromPath($path, $collection))); } + + public function with(): array + { + $file = new MediaFile(Storage::disk(config('media-library.temp_disk'))->path($this->path->resolve())); + + return [ + 'is_deferred' => true, + 'original_url' => $this->storage()->url($this->path->resolve()), + 'name' => $file->getBasename(), + 'size' => $file->getSize(), + 'file_name' => $file->getFilename(), + 'mime_type' => $file->getMimeType(), + ]; + } + + protected function storage(): FilesystemAdapter + { + return Storage::disk(config('media-library.temp_disk')); + } }