summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/Connector/Sabre/Node.php26
-rw-r--r--apps/files_sharing/lib/MountProvider.php7
2 files changed, 18 insertions, 15 deletions
diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php
index 5fb811ad1ab..1e32e74c325 100644
--- a/apps/dav/lib/Connector/Sabre/Node.php
+++ b/apps/dav/lib/Connector/Sabre/Node.php
@@ -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) {
+ return $note;
+ }
return '';
}
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index 954c9cf70e6..a9705e94906 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -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