%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/evablog/vendor/spatie/laravel-medialibrary/src/
Upload File :
Create Path :
Current File : /var/www/html/evablog/vendor/spatie/laravel-medialibrary/src/MediaStream.php

<?php

namespace Spatie\MediaLibrary;

use ZipStream\ZipStream;
use Illuminate\Support\Collection;
use Spatie\MediaLibrary\Models\Media;
use Illuminate\Contracts\Support\Responsable;
use Symfony\Component\HttpFoundation\StreamedResponse;

class MediaStream implements Responsable
{
    /** string */
    protected $zipName;

    /** Illuminate\Support\Collection */
    protected $mediaItems;

    public static function create(string $zipName)
    {
        return new static($zipName);
    }

    public function __construct(string $zipName)
    {
        $this->zipName = $zipName;

        $this->mediaItems = collect();
    }

    public function addMedia(...$mediaItems)
    {
        collect($mediaItems)
            ->flatMap(function ($item) {
                if ($item instanceof Media) {
                    return [$item];
                }

                if ($item instanceof Collection) {
                    return $item->reduce(function (array $carry, Media $media) {
                        $carry[] = $media;

                        return $carry;
                    }, []);
                }

                return $item;
            })
            ->each(function (Media $media) {
                $this->mediaItems->push($media);
            });

        return $this;
    }

    public function getMediaItems(): Collection
    {
        return $this->mediaItems;
    }

    public function toResponse($request)
    {
        return new StreamedResponse(function () {
            $zip = new ZipStream($this->zipName);

            $this->mediaItems->each(function (Media $media) use ($zip) {
                $stream = $media->stream();

                $zip->addFileFromStream($media->file_name, $stream);

                fclose($stream);
            });

            $zip->finish();
        });
    }
}

Zerion Mini Shell 1.0