Skip to content

Commit

Permalink
Merge pull request #38522 from nextcloud/artonge/backport/stable27/38469
Browse files Browse the repository at this point in the history
  • Loading branch information
skjnldsv authored Jun 1, 2023
2 parents 962dc93 + e54bfc0 commit ca1d9a1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
4 changes: 4 additions & 0 deletions apps/files_versions/lib/Storage.php
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,10 @@ public static function expireOlderThanMaxForUser($uid) {

// Check that the version does not have a label.
$path = $versionsRoot->getRelativePath($info->getPath());
if ($path === null) {
throw new DoesNotExistException('Could not find relative path of (' . $info->getPath() . ')');
}

$node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
try {
$versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
Expand Down
31 changes: 27 additions & 4 deletions apps/files_versions/lib/Versions/LegacyVersionsBackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,35 @@ public function useBackendForStorage(IStorage $storage): bool {

public function getVersionsForFile(IUser $user, FileInfo $file): array {
$storage = $file->getStorage();

if ($storage->instanceOfStorage(SharedStorage::class)) {
$owner = $storage->getOwner('');
$user = $this->userManager->get($owner);

$fileId = $file->getId();
if ($fileId === null) {
throw new NotFoundException("File not found ($fileId)");
}

if ($user === null) {
throw new NotFoundException("User $owner not found for $fileId");
}

$userFolder = $this->rootFolder->getUserFolder($user->getUID());
$nodes = $userFolder->getById($file->getId());

$nodes = $userFolder->getById($fileId);
$file = array_pop($nodes);

if (!$file) {
throw new NotFoundException("version file not found for share owner");
}
} else {
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
}

$fileId = $file->getId();
if ($fileId === null) {
throw new NotFoundException("File not found ($fileId)");
}

$versions = $this->getVersionsForFileFromDB($file, $user);
Expand All @@ -87,18 +105,23 @@ public function getVersionsForFile(IUser $user, FileInfo $file): array {

// Insert the entry in the DB for the current version.
$versionEntity = new VersionEntity();
$versionEntity->setFileId($file->getId());
$versionEntity->setFileId($fileId);
$versionEntity->setTimestamp($file->getMTime());
$versionEntity->setSize($file->getSize());
$versionEntity->setMimetype($this->mimeTypeLoader->getId($file->getMimetype()));
$versionEntity->setMetadata([]);
$this->versionsMapper->insert($versionEntity);

// Insert entries in the DB for existing versions.
$versionsOnFS = Storage::getVersions($user->getUID(), $userFolder->getRelativePath($file->getPath()));
$relativePath = $userFolder->getRelativePath($file->getPath());
if ($relativePath === null) {
throw new NotFoundException("Relative path not found for file $fileId (" . $file->getPath() . ')');
}

$versionsOnFS = Storage::getVersions($user->getUID(), $relativePath);
foreach ($versionsOnFS as $version) {
$versionEntity = new VersionEntity();
$versionEntity->setFileId($file->getId());
$versionEntity->setFileId($fileId);
$versionEntity->setTimestamp((int)$version['version']);
$versionEntity->setSize((int)$version['size']);
$versionEntity->setMimetype($this->mimeTypeLoader->getId($version['mimetype']));
Expand Down

0 comments on commit ca1d9a1

Please sign in to comment.