diff options
author | Stephan Orbaugh <62374139+sorbaugh@users.noreply.github.com> | 2025-07-07 17:29:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-07 17:29:52 +0200 |
commit | a4879f23a9ff83ea40ec731c15bcf72ea711d8d7 (patch) | |
tree | 480374ddbc01d3a5c04f73996ca6b378136ea4ad | |
parent | 58a37108da99fcc0a8187fcb53b9ba133d240c34 (diff) | |
parent | cdeed5bcbe2816b452fc29390038efa0b699498f (diff) | |
download | nextcloud-server-a4879f23a9ff83ea40ec731c15bcf72ea711d8d7.tar.gz nextcloud-server-a4879f23a9ff83ea40ec731c15bcf72ea711d8d7.zip |
Merge pull request #53833 from bdovaz/get-revision
feat(files_versions): get revision for a node
5 files changed, 25 insertions, 3 deletions
diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php index 0c13cda9933..969ca4ded45 100644 --- a/apps/files_versions/lib/Listener/FileEventsListener.php +++ b/apps/files_versions/lib/Listener/FileEventsListener.php @@ -152,8 +152,10 @@ class FileEventsListener implements IEventListener { try { if ($node instanceof File && $this->versionManager instanceof INeedSyncVersionBackend) { + $revision = $this->versionManager->getRevision($previousNode); + // We update the timestamp of the version entity associated with the previousNode. - $this->versionManager->updateVersionEntity($node, $previousNode->getMTime(), ['timestamp' => $node->getMTime()]); + $this->versionManager->updateVersionEntity($node, $revision, ['timestamp' => $node->getMTime()]); } } catch (DbalException $ex) { // Ignore UniqueConstraintViolationException, as we are probably in the middle of a rollback @@ -252,9 +254,11 @@ class FileEventsListener implements IEventListener { // If no new version was stored in the FS, no new version should be added in the DB. // So we simply update the associated version. if ($node instanceof File && $this->versionManager instanceof INeedSyncVersionBackend) { + $revision = $this->versionManager->getRevision($writeHookInfo['previousNode']); + $this->versionManager->updateVersionEntity( $node, - $writeHookInfo['previousNode']->getMtime(), + $revision, [ 'timestamp' => $node->getMTime(), 'size' => $node->getSize(), diff --git a/apps/files_versions/lib/Listener/VersionAuthorListener.php b/apps/files_versions/lib/Listener/VersionAuthorListener.php index b76fc7110f7..9b93b1f888b 100644 --- a/apps/files_versions/lib/Listener/VersionAuthorListener.php +++ b/apps/files_versions/lib/Listener/VersionAuthorListener.php @@ -48,8 +48,9 @@ class VersionAuthorListener implements IEventListener { } // check if our version manager supports setting the metadata if ($this->versionManager instanceof IMetadataVersionBackend) { + $revision = $this->versionManager->getRevision($node); $author = $user->getUID(); - $this->versionManager->setMetadataValue($node, $node->getMTime(), Plugin::AUTHOR, $author); + $this->versionManager->setMetadataValue($node, $revision, Plugin::AUTHOR, $author); } } } diff --git a/apps/files_versions/lib/Versions/IVersionBackend.php b/apps/files_versions/lib/Versions/IVersionBackend.php index 28e3f4dffcf..18f8c17f0ac 100644 --- a/apps/files_versions/lib/Versions/IVersionBackend.php +++ b/apps/files_versions/lib/Versions/IVersionBackend.php @@ -8,6 +8,7 @@ declare(strict_types=1); */ namespace OCA\Files_Versions\Versions; +use OC\Files\Node\Node; use OCP\Files\File; use OCP\Files\FileInfo; use OCP\Files\NotFoundException; @@ -78,4 +79,11 @@ interface IVersionBackend { * @since 15.0.0 */ public function getVersionFile(IUser $user, FileInfo $sourceFile, $revision): File; + + /** + * Get the revision for a node + * + * @since 32.0.0 + */ + public function getRevision(Node $node): int; } diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php index 59a10a0775d..40180674b7c 100644 --- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php +++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php @@ -212,6 +212,10 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend return $file; } + public function getRevision(Node $node): int { + return $node->getMTime(); + } + public function deleteVersion(IVersion $version): void { if (!$this->currentUserHasPermissions($version->getSourceFile(), Constants::PERMISSION_DELETE)) { throw new Forbidden('You cannot delete this version because you do not have delete permissions on the source file.'); diff --git a/apps/files_versions/lib/Versions/VersionManager.php b/apps/files_versions/lib/Versions/VersionManager.php index 5f547939213..f72e451f368 100644 --- a/apps/files_versions/lib/Versions/VersionManager.php +++ b/apps/files_versions/lib/Versions/VersionManager.php @@ -110,6 +110,11 @@ class VersionManager implements IVersionManager, IDeletableVersionBackend, INeed return $backend->getVersionFile($user, $sourceFile, $revision); } + public function getRevision(Node $node): int { + $backend = $this->getBackendForStorage($node->getStorage()); + return $backend->getRevision($node); + } + public function useBackendForStorage(IStorage $storage): bool { return false; } |