]> source.dussan.org Git - nextcloud-server.git/commitdiff
Have the CommentsPropertiesPlugin use the new fancy method 23792/head
authorRoeland Jago Douma <roeland@famdouma.nl>
Mon, 2 Nov 2020 20:11:47 +0000 (21:11 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Wed, 4 Nov 2020 15:37:42 +0000 (16:37 +0100)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php

index d5eb7062dd1beff4848f1a291e5d64904ada0a2d..add69367fc8a3bf26e847bb45fdfa59676051176 100644 (file)
@@ -47,8 +47,6 @@ class CommentPropertiesPlugin extends ServerPlugin {
 
        private $cachedUnreadCount = [];
 
-       private $cachedFolders = [];
-
        public function __construct(ICommentsManager $commentsManager, IUserSession $userSession) {
                $this->commentsManager = $commentsManager;
                $this->userSession = $userSession;
@@ -70,6 +68,31 @@ class CommentPropertiesPlugin extends ServerPlugin {
                $this->server->on('propFind', [$this, 'handleGetProperties']);
        }
 
+       private function cacheDirectory(Directory $directory) {
+               $children = $directory->getChildren();
+
+               $ids = [];
+               foreach ($children as $child) {
+                       if (!($child instanceof File || $child instanceof Directory)) {
+                               continue;
+                       }
+
+                       $id = $child->getId();
+                       if ($id === null) {
+                               continue;
+                       }
+
+                       $ids[] = (string)$id;
+               }
+
+               $ids[] = (string) $directory->getId();
+               $unread = $this->commentsManager->getNumberOfUnreadCommentsForObjects('files', $ids, $this->userSession->getUser());
+
+               foreach ($unread as $id => $count) {
+                       $this->cachedUnreadCount[(int)$id] = $count;
+               }
+       }
+
        /**
         * Adds tags and favorites properties to the response,
         * if requested.
@@ -91,11 +114,7 @@ class CommentPropertiesPlugin extends ServerPlugin {
                        && $propFind->getDepth() !== 0
                        && !is_null($propFind->getStatus(self::PROPERTY_NAME_UNREAD))
                ) {
-                       $unreadCounts = $this->commentsManager->getNumberOfUnreadCommentsForFolder($node->getId(), $this->userSession->getUser());
-                       $this->cachedFolders[] = $node->getPath();
-                       foreach ($unreadCounts as $id => $count) {
-                               $this->cachedUnreadCount[$id] = $count;
-                       }
+                       $this->cacheDirectory($node);
                }
 
                $propFind->handle(self::PROPERTY_NAME_COUNT, function () use ($node) {
@@ -109,18 +128,8 @@ class CommentPropertiesPlugin extends ServerPlugin {
                $propFind->handle(self::PROPERTY_NAME_UNREAD, function () use ($node) {
                        if (isset($this->cachedUnreadCount[$node->getId()])) {
                                return $this->cachedUnreadCount[$node->getId()];
-                       } else {
-                               list($parentPath,) = \Sabre\Uri\split($node->getPath());
-                               if ($parentPath === '') {
-                                       $parentPath = '/';
-                               }
-                               // if we already cached the folder this file is in we know there are no comments for this file
-                               if (array_search($parentPath, $this->cachedFolders) === false) {
-                                       return 0;
-                               } else {
-                                       return $this->getUnreadCount($node);
-                               }
                        }
+                       return $this->getUnreadCount($node);
                });
        }