diff --git a/lib/private/preview.php b/lib/private/preview.php index d8a9a3e1b7..3a341500e6 100644 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -703,10 +703,7 @@ class Preview { // We still don't have a preview, so we send back the mime icon if (is_null($this->preview)) { - $this->preview = new \OC_Image(); - $mimeIconWebPath = \OC_Helper::mimetypeIcon($this->mimeType); - $mimeIconServerPath = str_replace(\OC::$WEBROOT, \OC::$SERVERROOT, $mimeIconWebPath); - $this->preview->loadFromFile($mimeIconServerPath); + $this->getMimeIcon(); } return $this->preview; @@ -1094,6 +1091,30 @@ class Preview { } } + /** + * Creates a mime icon preview of the asked dimensions + * + * This will paste the mime icon in the middle of an empty preview of the asked dimension + */ + private function getMimeIcon() { + $image = new \OC_Image(); + $mimeIconWebPath = \OC_Helper::mimetypeIcon($this->mimeType); + if (empty(\OC::$WEBROOT)) { + $mimeIconServerPath = \OC::$SERVERROOT . $mimeIconWebPath; + } else { + $mimeIconServerPath = str_replace(\OC::$WEBROOT, \OC::$SERVERROOT, $mimeIconWebPath); + } + $image->loadFromFile($mimeIconServerPath); + + $previewWidth = (int)$image->width(); + $previewHeight = (int)$image->height(); + $askedWidth = $this->getMaxX(); + $askedHeight = $this->getMaxY(); + $this->cropAndFill( + $image, $askedWidth, $askedHeight, $previewWidth, $previewHeight + ); + } + /** * Stores the max preview in the cache * diff --git a/tests/lib/preview.php b/tests/lib/preview.php index 27410187f4..70b7218474 100644 --- a/tests/lib/preview.php +++ b/tests/lib/preview.php @@ -209,6 +209,27 @@ class Preview extends TestCase { ); } + /** + * Tests if the media type icon fits into the asked dimensions + */ + public function testIsMimePreviewTheRightSize() { + $width = 400; + $height = 200; + + // Previews for odt files are not enabled + $imgData = file_get_contents(\OC::$SERVERROOT . '/tests/data/testimage.odt'); + $imgPath = '/' . self::TEST_PREVIEW_USER1 . '/files/testimage.odt'; + $this->rootView->file_put_contents($imgPath, $imgData); + + $preview = + new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.odt', $width, $height); + $preview->getPreview(); + $image = $preview->getPreview(); + + $this->assertSame($width, $image->width()); + $this->assertSame($height, $image->height()); + } + /** * We generate the data to use as it makes it easier to adjust in case we need to test * something different