From 85a8d2d98b3b713bb0b9121cdb39f09515ecf4b2 Mon Sep 17 00:00:00 2001 From: flynsarmy Date: Wed, 9 Mar 2022 21:48:37 +1000 Subject: [PATCH] Add function to check if optimizers are installed --- src/ImageOptimizer/ChainOptimizer.php | 6 +++--- src/ImageOptimizer/Command.php | 6 +++--- src/ImageOptimizer/CommandOptimizer.php | 4 ++-- src/ImageOptimizer/OptimizerFactory.php | 28 +++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/ImageOptimizer/ChainOptimizer.php b/src/ImageOptimizer/ChainOptimizer.php index 0850bf3..945ba94 100644 --- a/src/ImageOptimizer/ChainOptimizer.php +++ b/src/ImageOptimizer/ChainOptimizer.php @@ -11,9 +11,9 @@ class ChainOptimizer implements Optimizer /** * @var Optimizer[] */ - private $optimizers; - private $executeFirst; - private $logger; + public $optimizers; + public $executeFirst; + public $logger; public function __construct(array $optimizers, bool $executeFirst, LoggerInterface $logger) { diff --git a/src/ImageOptimizer/Command.php b/src/ImageOptimizer/Command.php index ff01648..fc2245b 100644 --- a/src/ImageOptimizer/Command.php +++ b/src/ImageOptimizer/Command.php @@ -11,9 +11,9 @@ final class Command { - private $cmd; - private $args; - private $timeout; + public $cmd; + public $args; + public $timeout; public function __construct(string $bin, array $args = [], ?float $timeout = null) { diff --git a/src/ImageOptimizer/CommandOptimizer.php b/src/ImageOptimizer/CommandOptimizer.php index 021b15a..6983e02 100644 --- a/src/ImageOptimizer/CommandOptimizer.php +++ b/src/ImageOptimizer/CommandOptimizer.php @@ -6,8 +6,8 @@ class CommandOptimizer implements Optimizer { - private $command; - private $extraArgs; + public $command; + public $extraArgs; public function __construct(Command $command, $extraArgs = null) { diff --git a/src/ImageOptimizer/OptimizerFactory.php b/src/ImageOptimizer/OptimizerFactory.php index ee98fda..3a72171 100644 --- a/src/ImageOptimizer/OptimizerFactory.php +++ b/src/ImageOptimizer/OptimizerFactory.php @@ -142,6 +142,34 @@ function ($filepath) { ])); } + public function checkOptimizers() + { + $apps = []; + + // Get a complete list of apps we currently support + foreach ($this->optimizers as $optimizer) { + $unwrapped = $optimizer->unwrap(); + + if ($unwrapped instanceof ChainOptimizer) { + foreach ($unwrapped->optimizers as $commandOptimizer) { + $apps[$commandOptimizer->command->cmd] = false; + } + } elseif ($unwrapped instanceof CommandOptimizer) { + $apps[$unwrapped->command->cmd] = false; + } + } + + // Loop through our apps calling 'which' on them to see if they're installed + foreach (array_keys($apps) as $app) { + $process = new \Symfony\Component\Process\Process(['which', $app]); + $process->run(); + + $apps[$app] = $process->isSuccessful(); + } + + return $apps; + } + private function commandOptimizer(string $command, array $args, $extraArgs = null): CommandOptimizer { return new CommandOptimizer(