Skip to content

Commit e04f3e6

Browse files
committed
fixup! Support getting and patching version-label
1 parent 30b062a commit e04f3e6

File tree

4 files changed

+51
-44
lines changed

4 files changed

+51
-44
lines changed

apps/files_versions/lib/Sabre/VersionFile.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public function setName($name) {
8383
}
8484

8585
public function getLabel(): string {
86-
return (string)$this->version->getLabel();
86+
return $this->version->getLabel();
8787
}
8888

8989
public function setLabel($label): void {

apps/files_versions/lib/Versions/IVersion.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ public function getSourceFileName(): string;
8181
/**
8282
* Get the user created label
8383
*
84-
* @return ?string
84+
* @return string
8585
* @since 26.0.0
8686
*/
87-
public function getLabel(): ?string;
87+
public function getLabel(): string;
8888

8989
/**
9090
* Get the mimetype of this version

apps/files_versions/lib/Versions/LegacyVersionsBackend.php

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727
namespace OCA\Files_Versions\Versions;
2828

29+
use OC\Files\Node\File as NodeFile;
2930
use OC\Files\View;
3031
use OCA\Files_Sharing\SharedStorage;
3132
use OCA\Files_Versions\Db\VersionEntity;
@@ -72,30 +73,48 @@ public function getVersionsForFile(IUser $user, FileInfo $file): array {
7273
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
7374
$nodes = $userFolder->getById($file->getId());
7475
$file2 = array_pop($nodes);
75-
$versions = Storage::getVersions($user->getUID(), $userFolder->getRelativePath($file2->getPath()));
76-
$versionsLabels = array_reduce(
77-
$this->versionsMapper->findAllVersionsForFileId($file->getId()),
78-
function ($carry, VersionEntity $item) {
79-
$carry[$item->getTimestamp()] = $item->getLabel();
80-
return $carry;
81-
},
82-
[]
83-
);
8476

85-
return array_map(function (array $data) use ($file, $user, $versionsLabels) {
86-
return new Version(
87-
(int)$data['version'],
88-
(int)$data['version'],
89-
$data['name'],
90-
$versionsLabels[(int)$data['version']] ?? '',
91-
(int)$data['size'],
92-
$data['mimetype'],
93-
$data['path'],
77+
$versions = $this->getVersionsForFileFromDB($file2, $user);
78+
79+
if (count($versions) > 0) {
80+
return $versions;
81+
}
82+
83+
$versionsOnFS = Storage::getVersions($user->getUID(), $userFolder->getRelativePath($file2->getPath()));
84+
foreach ($versionsOnFS as $version) {
85+
// Insert the entry in the DB.
86+
$versionEntity = new VersionEntity();
87+
$versionEntity->setFileId($file2->getId());
88+
$versionEntity->setTimestamp((int)$version['version']);
89+
$versionEntity->setSize((int)$version['size']);
90+
$versionEntity->setMimetype($version['mimetype']);
91+
$this->versionsMapper->insert($versionEntity);
92+
}
93+
94+
return $this->getVersionsForFileFromDB($file2, $user);
95+
}
96+
97+
/**
98+
* @return IVersion[]
99+
*/
100+
private function getVersionsForFileFromDB(NodeFile $file, IUser $user): array {
101+
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
102+
103+
return array_map(
104+
fn ($version) => new Version(
105+
$version->getTimestamp(),
106+
$version->getTimestamp(),
107+
$file->getName(),
108+
$version->getLabel() ?? '',
109+
$version->getSize(),
110+
$version->getMimetype(),
111+
$userFolder->getRelativePath($file->getPath()),
94112
$file,
95113
$this,
96114
$user
97-
);
98-
}, $versions);
115+
),
116+
$this->versionsMapper->findAllVersionsForFileId($file->getId())
117+
);
99118
}
100119

101120
public function createVersion(IUser $user, FileInfo $file) {
@@ -150,23 +169,11 @@ public function getVersionFile(IUser $user, FileInfo $sourceFile, $revision): Fi
150169
* @since 26.0.0
151170
*/
152171
public function setVersionLabel(IVersion $version, string $label): void {
153-
try {
154-
$versionEntity = $this->versionsMapper->findVersionForFileId(
155-
$version->getSourceFile()->getId(),
156-
$version->getSourceFile()->getMtime()
157-
);
158-
$versionEntity->setLabel($label);
159-
$this->versionsMapper->update($versionEntity);
160-
} catch(DoesNotExistException $ex) {
161-
// Fallback if the DB does not contains the version entry.
162-
$versionEntity = new VersionEntity();
163-
$versionEntity->setFileId($version->getSourceFile()->getId());
164-
// TODO: check that the mtime is the version's one.
165-
$versionEntity->setTimestamp($version->getTimestamp());
166-
$versionEntity->setLabel($label);
167-
// TODO: remove or keep
168-
// $versionEntity->setLabel($versionEntity->setAuthor($currentUserId));
169-
$this->versionsMapper->insert($versionEntity);
170-
}
172+
$versionEntity = $this->versionsMapper->findVersionForFileId(
173+
$version->getSourceFile()->getId(),
174+
$version->getSourceFile()->getMtime()
175+
);
176+
$versionEntity->setLabel($label);
177+
$this->versionsMapper->update($versionEntity);
171178
}
172179
}

apps/files_versions/lib/Versions/Version.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Version implements IVersion {
3838
/** @var string */
3939
private $name;
4040

41-
private ?string $label;
41+
private string $label;
4242

4343
/** @var int */
4444
private $size;
@@ -62,7 +62,7 @@ public function __construct(
6262
int $timestamp,
6363
$revisionId,
6464
string $name,
65-
?string $label,
65+
string $label,
6666
int $size,
6767
string $mimetype,
6868
string $path,
@@ -106,7 +106,7 @@ public function getSourceFileName(): string {
106106
return $this->name;
107107
}
108108

109-
public function getLabel(): ?string {
109+
public function getLabel(): string {
110110
return $this->label;
111111
}
112112

0 commit comments

Comments
 (0)