From b164af46c73387d05f5c67126de51e4d0fc2750f Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Mon, 19 Jun 2023 17:51:53 +0200 Subject: [PATCH 1/4] Provide hasPreview in files_versions DAV API This allow to no request non existing previews I also set some properties to the img element to reduce preview loading to what the browser think is necessary Signed-off-by: Louis Chemineau --- apps/files_versions/lib/Sabre/Plugin.php | 26 +++++++++++++++++-- apps/files_versions/lib/Sabre/VersionFile.php | 5 ++++ .../files_versions/src/components/Version.vue | 5 +++- apps/files_versions/src/utils/davRequest.js | 1 + apps/files_versions/src/utils/versions.js | 2 ++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/lib/Sabre/Plugin.php b/apps/files_versions/lib/Sabre/Plugin.php index 4fd17194ba6a3..b53f21039be16 100644 --- a/apps/files_versions/lib/Sabre/Plugin.php +++ b/apps/files_versions/lib/Sabre/Plugin.php @@ -27,7 +27,11 @@ namespace OCA\Files_Versions\Sabre; use OC\AppFramework\Http\Request; +use OCA\DAV\Connector\Sabre\FilesPlugin; +use OCA\Files_Versions\Versions\IVersionManager; +use OCP\Files\NotFoundException; use OCP\IRequest; +use OCP\IUserSession; use Sabre\DAV\Exception\NotFound; use Sabre\DAV\INode; use Sabre\DAV\PropFind; @@ -39,12 +43,13 @@ class Plugin extends ServerPlugin { private Server $server; - private IRequest $request; public const VERSION_LABEL = '{http://nextcloud.org/ns}version-label'; public function __construct( - IRequest $request + private IRequest $request, + private IVersionManager $versionManager, + private IUserSession $userSession, ) { $this->request = $request; } @@ -89,8 +94,25 @@ public function afterGet(RequestInterface $request, ResponseInterface $response) } public function propFind(PropFind $propFind, INode $node): void { + $user = $this->userSession->getUser(); + if ($node instanceof VersionFile) { $propFind->handle(self::VERSION_LABEL, fn() => $node->getLabel()); + + if ($user !== null) { + $propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, function () use ($node, $user) { + try { + $this->versionManager->getVersionFile( + $user, + $node->getSourceFile(), + $node->getVersion()->getRevisionId() + ); + return true; + } catch (NotFoundException $ex) { + return false; + } + }); + } } } diff --git a/apps/files_versions/lib/Sabre/VersionFile.php b/apps/files_versions/lib/Sabre/VersionFile.php index 8fd97b0636f75..bb05d66460a55 100644 --- a/apps/files_versions/lib/Sabre/VersionFile.php +++ b/apps/files_versions/lib/Sabre/VersionFile.php @@ -31,6 +31,7 @@ use OCA\Files_Versions\Versions\INameableVersionBackend; use OCA\Files_Versions\Versions\IVersion; use OCA\Files_Versions\Versions\IVersionManager; +use OCP\Files\FileInfo; use OCP\Files\NotFoundException; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotFound; @@ -60,6 +61,10 @@ public function get() { } } + public function getSourceFile(): FileInfo { + return $this->version->getSourceFile(); + } + public function getContentType(): string { return $this->version->getMimeType(); } diff --git a/apps/files_versions/src/components/Version.vue b/apps/files_versions/src/components/Version.vue index b617ecc90dc6d..8bf9c0ae8cb42 100644 --- a/apps/files_versions/src/components/Version.vue +++ b/apps/files_versions/src/components/Version.vue @@ -23,9 +23,12 @@ :force-display-actions="true" data-files-versions-version>