Read notes from share already loaded into memory

Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
This commit is contained in:
Dariusz Olszewski 2022-10-07 23:24:12 +02:00
parent 63474360a8
commit 255d1dd686
2 changed files with 18 additions and 15 deletions

View file

@ -355,23 +355,19 @@ abstract class Node implements \Sabre\DAV\INode {
return '';
}
$types = [
IShare::TYPE_USER,
IShare::TYPE_GROUP,
IShare::TYPE_CIRCLE,
IShare::TYPE_ROOM
];
foreach ($types as $shareType) {
$shares = $this->shareManager->getSharedWith($user, $shareType, $this, -1);
foreach ($shares as $share) {
$note = $share->getNote();
if ($share->getShareOwner() !== $user && !empty($note)) {
return $note;
}
}
// Retrieve note from the share object already loaded into
// memory, to avoid additional database queries.
$storage = $this->getNode()->getStorage();
if (!$storage->instanceOfStorage(\OCA\Files_Sharing\SharedStorage::class)) {
return '';
}
/** @var \OCA\Files_Sharing\SharedStorage $storage */
$share = $storage->getShare();
$note = $share->getNote();
if ($share->getShareOwner() !== $user && !empty($note)) {
return $note;
}
return '';
}

View file

@ -229,6 +229,13 @@ class MountProvider implements IMountProvider {
->setShareType($shares[0]->getShareType())
->setTarget($shares[0]->getTarget());
// Gather notes from all the shares.
// Since these are readly available here, storing them
// enables the DAV FilesPlugin to avoid executing many
// DB queries to retrieve the same information.
$allNotes = implode("\n", array_map(function ($sh) { return $sh->getNote(); }, $shares));
$superShare->setNote($allNotes);
// use most permissive permissions
// this covers the case where there are multiple shares for the same
// file e.g. from different groups and different permissions