From 16a5346d14b142a4859b7019ea3b1cb1a6df544e Mon Sep 17 00:00:00 2001 From: Git'Fellow <12234510+solracsf@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:10:46 +0200 Subject: [PATCH] fix(versions): Avoid new version entity if it exists on DB Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com> Signed-off-by: provokateurin --- lib/Versions/GroupVersionsMapper.php | 3 +++ lib/Versions/VersionsBackend.php | 21 ++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/Versions/GroupVersionsMapper.php b/lib/Versions/GroupVersionsMapper.php index 991b93667..28dd8095a 100644 --- a/lib/Versions/GroupVersionsMapper.php +++ b/lib/Versions/GroupVersionsMapper.php @@ -48,6 +48,9 @@ public function findCurrentVersionForFileId(int $fileId): GroupVersionEntity { return $this->findEntity($qb); } + /** + * @throws \OCP\AppFramework\Db\DoesNotExistException + */ public function findVersionForFileId(int $fileId, int $timestamp): GroupVersionEntity { $qb = $this->db->getQueryBuilder(); diff --git a/lib/Versions/VersionsBackend.php b/lib/Versions/VersionsBackend.php index d9e498e1c..3e6d16cf7 100644 --- a/lib/Versions/VersionsBackend.php +++ b/lib/Versions/VersionsBackend.php @@ -20,6 +20,7 @@ use OCA\GroupFolders\Mount\GroupFolderStorage; use OCA\GroupFolders\Mount\GroupMountPoint; use OCA\GroupFolders\Mount\MountProvider; +use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Utility\ITimeFactory; use OCP\Constants; use OCP\Files\File; @@ -330,13 +331,19 @@ public function deleteVersion(IVersion $version): void { } public function createVersionEntity(File $file): void { - $versionEntity = new GroupVersionEntity(); - $versionEntity->setFileId($file->getId()); - $versionEntity->setTimestamp($file->getMTime()); - $versionEntity->setSize($file->getSize()); - $versionEntity->setMimetype($this->mimeTypeLoader->getId($file->getMimetype())); - $versionEntity->setDecodedMetadata([]); - $this->groupVersionsMapper->insert($versionEntity); + $fileId = $file->getId(); + $timestamp = $file->getMTime(); + try { + $this->groupVersionsMapper->findVersionForFileId($fileId, $timestamp); + } catch (DoesNotExistException) { + $versionEntity = new GroupVersionEntity(); + $versionEntity->setFileId($fileId); + $versionEntity->setTimestamp($timestamp); + $versionEntity->setSize($file->getSize()); + $versionEntity->setMimetype($this->mimeTypeLoader->getId($file->getMimetype())); + $versionEntity->setDecodedMetadata([]); + $this->groupVersionsMapper->insert($versionEntity); + } } public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void {