From 89a31c139b9a7b464bd174b54a337772bf6151d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borja=20Dom=C3=ADnguez=20V=C3=A1zquez?= Date: Wed, 28 May 2025 11:42:06 +0200 Subject: [PATCH] feat(file-versions): #53151 add VersionCreatedEvent event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Borja Domínguez Vázquez --- .../composer/composer/autoload_classmap.php | 1 + .../composer/composer/autoload_static.php | 1 + .../lib/Events/VersionCreatedEvent.php | 38 +++++++++++++++++++ .../lib/Versions/INeedSyncVersionBackend.php | 5 ++- .../lib/Versions/LegacyVersionsBackend.php | 6 ++- .../lib/Versions/VersionManager.php | 7 +++- 6 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 apps/files_versions/lib/Events/VersionCreatedEvent.php diff --git a/apps/files_versions/composer/composer/autoload_classmap.php b/apps/files_versions/composer/composer/autoload_classmap.php index 9c83924ab7c8b..27e68decdcc52 100644 --- a/apps/files_versions/composer/composer/autoload_classmap.php +++ b/apps/files_versions/composer/composer/autoload_classmap.php @@ -17,6 +17,7 @@ 'OCA\\Files_Versions\\Db\\VersionEntity' => $baseDir . '/../lib/Db/VersionEntity.php', 'OCA\\Files_Versions\\Db\\VersionsMapper' => $baseDir . '/../lib/Db/VersionsMapper.php', 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => $baseDir . '/../lib/Events/CreateVersionEvent.php', + 'OCA\\Files_Versions\\Events\\VersionCreatedEvent' => $baseDir . '/../lib/Events/VersionCreatedEvent.php', 'OCA\\Files_Versions\\Events\\VersionRestoredEvent' => $baseDir . '/../lib/Events/VersionRestoredEvent.php', 'OCA\\Files_Versions\\Expiration' => $baseDir . '/../lib/Expiration.php', 'OCA\\Files_Versions\\Listener\\FileEventsListener' => $baseDir . '/../lib/Listener/FileEventsListener.php', diff --git a/apps/files_versions/composer/composer/autoload_static.php b/apps/files_versions/composer/composer/autoload_static.php index 1d95663ac5545..8ecc1cb013704 100644 --- a/apps/files_versions/composer/composer/autoload_static.php +++ b/apps/files_versions/composer/composer/autoload_static.php @@ -32,6 +32,7 @@ class ComposerStaticInitFiles_Versions 'OCA\\Files_Versions\\Db\\VersionEntity' => __DIR__ . '/..' . '/../lib/Db/VersionEntity.php', 'OCA\\Files_Versions\\Db\\VersionsMapper' => __DIR__ . '/..' . '/../lib/Db/VersionsMapper.php', 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => __DIR__ . '/..' . '/../lib/Events/CreateVersionEvent.php', + 'OCA\\Files_Versions\\Events\\VersionCreatedEvent' => __DIR__ . '/..' . '/../lib/Events/VersionCreatedEvent.php', 'OCA\\Files_Versions\\Events\\VersionRestoredEvent' => __DIR__ . '/..' . '/../lib/Events/VersionRestoredEvent.php', 'OCA\\Files_Versions\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php', 'OCA\\Files_Versions\\Listener\\FileEventsListener' => __DIR__ . '/..' . '/../lib/Listener/FileEventsListener.php', diff --git a/apps/files_versions/lib/Events/VersionCreatedEvent.php b/apps/files_versions/lib/Events/VersionCreatedEvent.php new file mode 100644 index 0000000000000..29e654d320b59 --- /dev/null +++ b/apps/files_versions/lib/Events/VersionCreatedEvent.php @@ -0,0 +1,38 @@ +node; + } + + /** + * Revision of the file that has been versioned + */ + public function getRevision(): int { + return $this->revision; + } +} diff --git a/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php b/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php index 4faeaa48513df..3efb4b81f035e 100644 --- a/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php +++ b/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php @@ -14,7 +14,10 @@ * @since 28.0.0 */ interface INeedSyncVersionBackend { - public function createVersionEntity(File $file): void; + /** + * @return void|null|int + */ + public function createVersionEntity(File $file); public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void; public function deleteVersionsEntity(File $file): void; } diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php index 59a10a0775de4..15cb45e759555 100644 --- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php +++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php @@ -225,7 +225,7 @@ public function deleteVersion(IVersion $version): void { $this->versionsMapper->delete($versionEntity); } - public function createVersionEntity(File $file): void { + public function createVersionEntity(File $file): ?int { $versionEntity = new VersionEntity(); $versionEntity->setFileId($file->getId()); $versionEntity->setTimestamp($file->getMTime()); @@ -238,7 +238,7 @@ public function createVersionEntity(File $file): void { try { $this->versionsMapper->insert($versionEntity); /* No errors, get out of the method */ - return; + return $versionEntity->getTimestamp(); } catch (\OCP\DB\Exception $e) { if (!in_array($e->getReason(), [ \OCP\DB\Exception::REASON_CONSTRAINT_VIOLATION, @@ -253,6 +253,8 @@ public function createVersionEntity(File $file): void { $this->logger->warning('Constraint violation while inserting version, retrying with increased timestamp', ['exception' => $e]); } } + + return null; } public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void { diff --git a/apps/files_versions/lib/Versions/VersionManager.php b/apps/files_versions/lib/Versions/VersionManager.php index eb53f04d38827..57f971dae826c 100644 --- a/apps/files_versions/lib/Versions/VersionManager.php +++ b/apps/files_versions/lib/Versions/VersionManager.php @@ -8,6 +8,7 @@ */ namespace OCA\Files_Versions\Versions; +use OCA\Files_Versions\Events\VersionCreatedEvent; use OCA\Files_Versions\Events\VersionRestoredEvent; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; @@ -124,7 +125,11 @@ public function deleteVersion(IVersion $version): void { public function createVersionEntity(File $file): void { $backend = $this->getBackendForStorage($file->getStorage()); if ($backend instanceof INeedSyncVersionBackend) { - $backend->createVersionEntity($file); + $revision = $backend->createVersionEntity($file); + + if (is_int($revision)) { + $this->dispatcher->dispatchTyped(new VersionCreatedEvent($file, $revision)); + } } }