From d270561ef83338672f16c4142871ba11a16f56aa Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Thu, 13 Jun 2024 16:02:30 +0200 Subject: [PATCH] fix(preview): don't create folder structure when previews are disabled Signed-off-by: Daniel Kesselberg --- lib/private/PreviewManager.php | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php index 21dd8f8a8abd9..4daf5b2dc1efd 100644 --- a/lib/private/PreviewManager.php +++ b/lib/private/PreviewManager.php @@ -50,6 +50,7 @@ class PreviewManager implements IPreview { private IServerContainer $container; private IBinaryFinder $binaryFinder; private IMagickSupport $imagickSupport; + private bool $enablePreviews; public function __construct( IConfig $config, @@ -73,6 +74,7 @@ public function __construct( $this->container = $container; $this->binaryFinder = $binaryFinder; $this->imagickSupport = $imagickSupport; + $this->enablePreviews = $config->getSystemValueBool('enable_previews', true); } /** @@ -86,7 +88,7 @@ public function __construct( * @return void */ public function registerProvider($mimeTypeRegex, \Closure $callable): void { - if (!$this->config->getSystemValueBool('enable_previews', true)) { + if (!$this->enablePreviews) { return; } @@ -101,7 +103,7 @@ public function registerProvider($mimeTypeRegex, \Closure $callable): void { * Get all providers */ public function getProviders(): array { - if (!$this->config->getSystemValueBool('enable_previews', true)) { + if (!$this->enablePreviews) { return []; } @@ -158,6 +160,7 @@ private function getGenerator(): Generator { * @since 11.0.0 - \InvalidArgumentException was added in 12.0.0 */ public function getPreview(File $file, $width = -1, $height = -1, $crop = false, $mode = IPreview::MODE_FILL, $mimeType = null) { + $this->throwIfPreviewsDisabled(); $previewConcurrency = $this->getGenerator()->getNumConcurrentPreviews('preview_concurrency_all'); $sem = Generator::guardWithSemaphore(Generator::SEMAPHORE_ID_ALL, $previewConcurrency); try { @@ -181,6 +184,7 @@ public function getPreview(File $file, $width = -1, $height = -1, $crop = false, * @since 19.0.0 */ public function generatePreviews(File $file, array $specifications, $mimeType = null) { + $this->throwIfPreviewsDisabled(); return $this->getGenerator()->generatePreviews($file, $specifications, $mimeType); } @@ -191,7 +195,7 @@ public function generatePreviews(File $file, array $specifications, $mimeType = * @return boolean */ public function isMimeSupported($mimeType = '*') { - if (!$this->config->getSystemValueBool('enable_previews', true)) { + if (!$this->enablePreviews) { return false; } @@ -216,7 +220,7 @@ public function isMimeSupported($mimeType = '*') { * Check if a preview can be generated for a file */ public function isAvailable(\OCP\Files\FileInfo $file): bool { - if (!$this->config->getSystemValueBool('enable_previews', true)) { + if (!$this->enablePreviews) { return false; } @@ -452,4 +456,13 @@ private function registerBootstrapProviders(): void { }); } } + + /** + * @throws NotFoundException if preview generation is disabled + */ + private function throwIfPreviewsDisabled(): void { + if (!$this->enablePreviews) { + throw new NotFoundException('Previews disabled'); + } + } }