diff options
author | Lukas Reschke <lukas@statuscode.ch> | 2017-03-20 11:45:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-20 11:45:51 +0100 |
commit | a3739906f62fa9905156ea1922d9a154d9cc0b4a (patch) | |
tree | d610af6e1ec4d7a2e5ffaa428ee4269102ec296d /lib | |
parent | ac1aff7d9249523cc66a7cd890f95f0760f1016a (diff) | |
parent | a1f46db793241d910a5ba456473419d96809a275 (diff) | |
download | nextcloud-server-a3739906f62fa9905156ea1922d9a154d9cc0b4a.tar.gz nextcloud-server-a3739906f62fa9905156ea1922d9a154d9cc0b4a.zip |
Merge pull request #3924 from nextcloud/preview_fixes
Do not generate the max preview twice
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Preview/Generator.php | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php index 32a732d8580..fd75e51b638 100644 --- a/lib/private/Preview/Generator.php +++ b/lib/private/Preview/Generator.php @@ -26,6 +26,7 @@ namespace OC\Preview; use OCP\Files\File; use OCP\Files\IAppData; use OCP\Files\NotFoundException; +use OCP\Files\NotPermittedException; use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFolder; use OCP\IConfig; @@ -111,6 +112,11 @@ class Generator { // Calculate the preview size list($width, $height) = $this->calculateSize($width, $height, $crop, $mode, $maxWidth, $maxHeight); + // No need to generate a preview that is just the max preview + if ($width === $maxWidth && $height === $maxHeight) { + return $maxPreview; + } + // Try to get a cached preview. Else generate (and store) one try { $file = $this->getCachedPreview($previewFolder, $width, $height, $crop); @@ -158,9 +164,13 @@ class Generator { continue; } - $path = strval($preview->width()) . '-' . strval($preview->height()) . '-max.png'; - $file = $previewFolder->newFile($path); - $file->putContent($preview->data()); + $path = (string)$preview->width() . '-' . (string)$preview->height() . '-max.png'; + try { + $file = $previewFolder->newFile($path); + $file->putContent($preview->data()); + } catch (NotPermittedException $e) { + throw new NotFoundException(); + } return $file; } @@ -185,7 +195,7 @@ class Generator { * @return string */ private function generatePath($width, $height, $crop) { - $path = strval($width) . '-' . strval($height); + $path = (string)$width . '-' . (string)$height; if ($crop) { $path .= '-crop'; } @@ -246,18 +256,18 @@ class Generator { /* * Scale to the nearest power of two */ - $pow2height = pow(2, ceil(log($height) / log(2))); - $pow2width = pow(2, ceil(log($width) / log(2))); + $pow2height = 2 ** ceil(log($height) / log(2)); + $pow2width = 2 ** ceil(log($width) / log(2)); $ratioH = $height / $pow2height; $ratioW = $width / $pow2width; if ($ratioH < $ratioW) { $width = $pow2width; - $height = $height / $ratioW; + $height /= $ratioW; } else { $height = $pow2height; - $width = $width / $ratioH; + $width /= $ratioH; } } @@ -268,12 +278,12 @@ class Generator { if ($height > $maxHeight) { $ratio = $height / $maxHeight; $height = $maxHeight; - $width = $width / $ratio; + $width /= $ratio; } if ($width > $maxWidth) { $ratio = $width / $maxWidth; $width = $maxWidth; - $height = $height / $ratio; + $height /= $ratio; } return [(int)round($width), (int)round($height)]; @@ -316,8 +326,12 @@ class Generator { } $path = $this->generatePath($width, $height, $crop); - $file = $previewFolder->newFile($path); - $file->putContent($preview->data()); + try { + $file = $previewFolder->newFile($path); + $file->putContent($preview->data()); + } catch (NotPermittedException $e) { + throw new NotFoundException(); + } return $file; } |