From 64587d67fb86f2dd3187c5fc679357a7283c123f Mon Sep 17 00:00:00 2001 From: umgfoin Date: Wed, 12 Mar 2025 12:22:49 +0100 Subject: [PATCH 1/4] fix(GenerateBlurhashMetadata): Suppress imagescale errors Suppress errors in imagescale during file-scans: Most of these errors are caused by out of range x/y-dims. Triggering un unhandled exception, metadata-generation aborts at this point (e.g. occ files:scan --generate-metadata), effectively preventing these images from being added to photos or maps. This problem might be the root cause for an issue described here: https://github.com/nextcloud/photos/issues/2768 Signed-off-by: umgfoin --- lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php b/lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php index 66976601f4e84..4e4232768f82d 100644 --- a/lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php +++ b/lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php @@ -115,7 +115,7 @@ private function resizedImageFromFile(File $file): GdImage|false { $newX = intval($currX * $newY / $currY); } - $newImage = imagescale($image, $newX, $newY); + $newImage = @imagescale($image, $newX, $newY); return ($newImage !== false) ? $newImage : $image; } From ad8cb9bcf0ef6be15efba5edc9dad0c67bfc4b45 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 27 Mar 2025 08:22:53 +0100 Subject: [PATCH 2/4] fix(files_versions): Cache previews Signed-off-by: provokateurin --- .../lib/Controller/PreviewController.php | 4 +++- .../tests/Controller/PreviewControllerTest.php | 15 +++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/files_versions/lib/Controller/PreviewController.php b/apps/files_versions/lib/Controller/PreviewController.php index 1365e7e50faf4..95f8f73a098b1 100644 --- a/apps/files_versions/lib/Controller/PreviewController.php +++ b/apps/files_versions/lib/Controller/PreviewController.php @@ -97,7 +97,9 @@ public function getPreview( $file = $userFolder->get($file); $versionFile = $this->versionManager->getVersionFile($user, $file, $version); $preview = $this->previewManager->getPreview($versionFile, $x, $y, true, IPreview::MODE_FILL, $versionFile->getMimetype()); - return new FileDisplayResponse($preview, Http::STATUS_OK, ['Content-Type' => $preview->getMimeType()]); + $response = new FileDisplayResponse($preview, Http::STATUS_OK, ['Content-Type' => $preview->getMimeType()]); + $response->cacheFor(3600 * 24, false, true); + return $response; } catch (NotFoundException $e) { return new DataResponse([], Http::STATUS_NOT_FOUND); } catch (\InvalidArgumentException $e) { diff --git a/apps/files_versions/tests/Controller/PreviewControllerTest.php b/apps/files_versions/tests/Controller/PreviewControllerTest.php index 0457d0d5f2491..56ad7e89b367d 100644 --- a/apps/files_versions/tests/Controller/PreviewControllerTest.php +++ b/apps/files_versions/tests/Controller/PreviewControllerTest.php @@ -22,13 +22,13 @@ * along with this program. If not, see . * */ + namespace OCA\Files_Versions\Tests\Controller; use OCA\Files_Versions\Controller\PreviewController; use OCA\Files_Versions\Versions\IVersionManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\Http\FileDisplayResponse; use OCP\Files\File; use OCP\Files\Folder; use OCP\Files\IMimeTypeDetector; @@ -39,6 +39,8 @@ use OCP\IRequest; use OCP\IUser; use OCP\IUserSession; +use OCP\Preview\IMimeIconProvider; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class PreviewControllerTest extends TestCase { @@ -64,6 +66,8 @@ class PreviewControllerTest extends TestCase { /** @var IVersionManager|\PHPUnit\Framework\MockObject\MockObject */ private $versionManager; + private IMimeIconProvider&MockObject $mimeIconProvider; + protected function setUp(): void { parent::setUp(); @@ -79,6 +83,7 @@ protected function setUp(): void { ->method('getUser') ->willReturn($user); $this->versionManager = $this->createMock(IVersionManager::class); + $this->mimeIconProvider = $this->createMock(IMimeIconProvider::class); $this->controller = new PreviewController( 'files_versions', @@ -86,7 +91,8 @@ protected function setUp(): void { $this->rootFolder, $this->userSession, $this->versionManager, - $this->previewManager + $this->previewManager, + $this->mimeIconProvider, ); } @@ -150,9 +156,10 @@ public function testValidPreview() { ->willReturn('previewMime'); $res = $this->controller->getPreview('file', 10, 10, '42'); - $expected = new FileDisplayResponse($preview, Http::STATUS_OK, ['Content-Type' => 'previewMime']); - $this->assertEquals($expected, $res); + $this->assertEquals('previewMime', $res->getHeaders()['Content-Type']); + $this->assertEquals(Http::STATUS_OK, $res->getStatus()); + $this->assertEquals($preview, $this->invokePrivate($res, 'file')); } public function testVersionNotFound() { From 4d88c408376ecd3057613eeeb866954ec43e38bc Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 27 Mar 2025 08:39:53 +0100 Subject: [PATCH 3/4] fix(files_versions): Rely on server mime fallback icons Signed-off-by: provokateurin --- apps/files_versions/src/components/Version.vue | 2 +- apps/files_versions/src/utils/versions.ts | 6 ++---- apps/files_versions/src/views/VersionTab.vue | 5 ++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/files_versions/src/components/Version.vue b/apps/files_versions/src/components/Version.vue index 0d83fc788a0fc..c9edbe9dc5a91 100644 --- a/apps/files_versions/src/components/Version.vue +++ b/apps/files_versions/src/components/Version.vue @@ -23,7 +23,7 @@