diff --git a/src/Models/Media.php b/src/Models/Media.php index 894e12c..1d7488d 100644 --- a/src/Models/Media.php +++ b/src/Models/Media.php @@ -532,16 +532,16 @@ public static function reorder(array $keys, ?Closure $sequence = null, string $u return $models; } - public function deleteGeneratedConversion(string $converion): ?GeneratedConversion + public function deleteGeneratedConversion(string $conversion): ?GeneratedConversion { - $generatedConversion = $this->getGeneratedConversion($converion); + $generatedConversion = $this->getGeneratedConversion($conversion); if (! $generatedConversion) { return null; } - $this->deleteGeneratedConversionFiles($converion); - $this->forgetGeneratedConversion($converion); + $this->deleteGeneratedConversionFiles($conversion); + $this->forgetGeneratedConversion($conversion); $this->save(); return $generatedConversion; @@ -564,7 +564,7 @@ public function deleteGeneratedConversions(): static /** * You can override this function to customize how files are deleted */ - protected function deleteGeneratedConversionFiles(string $conversion): static + public function deleteGeneratedConversionFiles(string $conversion): static { $generatedConversion = $this->getGeneratedConversion($conversion); diff --git a/src/Traits/HasMedia.php b/src/Traits/HasMedia.php index 3152492..9022e22 100644 --- a/src/Traits/HasMedia.php +++ b/src/Traits/HasMedia.php @@ -222,17 +222,27 @@ public function dispatchConversion(Media $media, string $conversionName): static /** * @param TMedia $media */ - public function dispatchConversions(Media $media): static - { - $conversions = $this->getMediaConversions($media); + public function dispatchConversions( + Media $media, + ?bool $force = false, + ?array $only = null, + ?array $except = null, + ): static { + $conversions = $this->getMediaConversions($media) + ->only($only) + ->except($except) + ->when(!$force, function (Collection $collection) use ($media) { + return $collection->filter(function (MediaConversion $conversion) use ($media) { + return !$media->hasGeneratedConversion($conversion->name); + }); + }); if ($conversions->isEmpty()) { return $this; } - $media->deleteGeneratedConversions(); - foreach ($conversions as $conversion) { + $media->deleteGeneratedConversionFiles($conversion->name); $media->putGeneratedConversion($conversion->name, new GeneratedConversion(state: 'pending')); }