From d13e0c5229230a0f088abe0408e7ef74a81b6f2c 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 101f67754..5ebbce095 100644 --- a/lib/Versions/GroupVersionsMapper.php +++ b/lib/Versions/GroupVersionsMapper.php @@ -45,6 +45,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 0000e9401..d598095dc 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\Constants; use OCP\Files\File; use OCP\Files\FileInfo; @@ -332,13 +333,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 {