From c199536eace905fed5a88a10bb7c7182a35ca868 Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Sun, 23 Jun 2024 17:15:42 +0200 Subject: [PATCH] Refactor InputHandler decoder resolving Makes it possible that decoders of InputHandler do not necessarily have to have a driver-specific version of "Inter". If the decoder class cannot be resolved by the driver and is therefore not available, it is simply ignored and the next decoder will be tried. --- .../Imagick/Decoders/NativeObjectDecoder.php | 3 ++- src/InputHandler.php | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Drivers/Imagick/Decoders/NativeObjectDecoder.php b/src/Drivers/Imagick/Decoders/NativeObjectDecoder.php index 9d65e09e..3f23902d 100644 --- a/src/Drivers/Imagick/Decoders/NativeObjectDecoder.php +++ b/src/Drivers/Imagick/Decoders/NativeObjectDecoder.php @@ -11,10 +11,11 @@ use Intervention\Image\Exceptions\DecoderException; use Intervention\Image\Image; use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\ImageInterface; +use Intervention\Image\Interfaces\SpecializedInterface; use Intervention\Image\Modifiers\AlignRotationModifier; use Intervention\Image\Modifiers\RemoveAnimationModifier; -class NativeObjectDecoder extends SpecializableDecoder +class NativeObjectDecoder extends SpecializableDecoder implements SpecializedInterface { public function decode(mixed $input): ImageInterface|ColorInterface { diff --git a/src/InputHandler.php b/src/InputHandler.php index e77638b8..2772ec45 100644 --- a/src/InputHandler.php +++ b/src/InputHandler.php @@ -95,17 +95,19 @@ class InputHandler implements InputHandlerInterface public function handle($input): ImageInterface|ColorInterface { foreach ($this->decoders as $decoder) { - // resolve driver specialized decoder - $decoder = $this->resolve($decoder); - try { - return $decoder->decode($input); - } catch (DecoderException $e) { + // decode with driver specialized decoder + return $this->resolve($decoder)->decode($input); + } catch (DecoderException | NotSupportedException $e) { // try next decoder } } - throw new DecoderException(isset($e) ? $e->getMessage() : ''); + if (isset($e)) { + throw new ($e::class)($e->getMessage()); + } + + throw new DecoderException('Unable to decode input.'); } /**