From 440f882322562af6040c0c4634903574f572f146 Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Tue, 6 Jun 2023 23:12:40 +0200 Subject: [PATCH] feat: add width, height, crop and mode to BeforePreviewFetchedEvent user_usage_report keeps a counter for files read. The app uses - OC_Filesystem::read hook - Event listener (the legacy one) for IPreview::EVENT Request for previews do not trigger the hook, hence the additional event listener. The thumbnails for a list or grid view should not count, so we need the width and height. Signed-off-by: Daniel Kesselberg --- lib/private/Preview/Generator.php | 8 +++- .../Preview/BeforePreviewFetchedEvent.php | 45 +++++++++++++++++-- tests/lib/Preview/GeneratorTest.php | 12 ++--- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php index 3ce44913498..c9949c82a97 100644 --- a/lib/private/Preview/Generator.php +++ b/lib/private/Preview/Generator.php @@ -91,7 +91,7 @@ class Generator { * @param int $height * @param bool $crop * @param string $mode - * @param string $mimeType + * @param string|null $mimeType * @return ISimpleFile * @throws NotFoundException * @throws \InvalidArgumentException if the preview would be invalid (in case the original image is invalid) @@ -109,7 +109,11 @@ class Generator { new GenericEvent($file, $specification) ); $this->eventDispatcher->dispatchTyped(new BeforePreviewFetchedEvent( - $file + $file, + $width, + $height, + $crop, + $mode, )); // since we only ask for one preview, and the generate method return the last one it created, it returns the one we want diff --git a/lib/public/Preview/BeforePreviewFetchedEvent.php b/lib/public/Preview/BeforePreviewFetchedEvent.php index 37da63b95a1..19048e08620 100644 --- a/lib/public/Preview/BeforePreviewFetchedEvent.php +++ b/lib/public/Preview/BeforePreviewFetchedEvent.php @@ -27,19 +27,27 @@ declare(strict_types=1); namespace OCP\Preview; use OCP\Files\Node; +use OCP\IPreview; /** * @since 25.0.1 */ class BeforePreviewFetchedEvent extends \OCP\EventDispatcher\Event { - private Node $node; - /** * @since 25.0.1 */ - public function __construct(Node $node) { + public function __construct( + private Node $node, + /** @deprecated 28.0.0 null deprecated **/ + private ?int $width = null, + /** @deprecated 28.0.0 null deprecated **/ + private ?int $height = null, + /** @deprecated 28.0.0 null deprecated **/ + private ?bool $crop = null, + /** @deprecated 28.0.0 null deprecated **/ + private ?string $mode = null, + ) { parent::__construct(); - $this->node = $node; } /** @@ -48,4 +56,33 @@ class BeforePreviewFetchedEvent extends \OCP\EventDispatcher\Event { public function getNode(): Node { return $this->node; } + + /** + * @since 28.0.0 + */ + public function getWidth(): ?int { + return $this->width; + } + + /** + * @since 28.0.0 + */ + public function getHeight(): ?int { + return $this->height; + } + + /** + * @since 28.0.0 + */ + public function isCrop(): ?bool { + return $this->crop; + } + + /** + * @since 28.0.0 + * @return null|IPreview::MODE_FILL|IPreview::MODE_COVER + */ + public function getMode(): ?string { + return $this->mode; + } } diff --git a/tests/lib/Preview/GeneratorTest.php b/tests/lib/Preview/GeneratorTest.php index 37fc3935139..2216674a34c 100644 --- a/tests/lib/Preview/GeneratorTest.php +++ b/tests/lib/Preview/GeneratorTest.php @@ -125,7 +125,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, 100, 100, false, IPreview::MODE_FILL)); $result = $this->generator->getPreview($file, 100, 100); $this->assertSame($previewFile, $result); @@ -264,7 +264,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, 100, 100, false, IPreview::MODE_FILL)); $result = $this->generator->getPreview($file, 100, 100); $this->assertSame($previewFile, $result); @@ -316,7 +316,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, 1024, 512, true, IPreview::MODE_COVER)); $this->generator->getPreview($file, 1024, 512, true, IPreview::MODE_COVER, 'invalidType'); } @@ -366,7 +366,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, 1024, 512, true, IPreview::MODE_COVER)); $result = $this->generator->getPreview($file, 1024, 512, true, IPreview::MODE_COVER, 'invalidType'); $this->assertSame($preview, $result); @@ -405,7 +405,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, 100, 100, false, IPreview::MODE_FILL)); $this->expectException(NotFoundException::class); $this->generator->getPreview($file, 100, 100); @@ -543,7 +543,7 @@ class GeneratorTest extends \Test\TestCase { $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new BeforePreviewFetchedEvent($file)); + ->with(new BeforePreviewFetchedEvent($file, $reqX, $reqY, $crop, $mode)); $result = $this->generator->getPreview($file, $reqX, $reqY, $crop, $mode); if ($expectedX === $maxX && $expectedY === $maxY) { -- 2.39.5