Have the CommentsPropertiesPlugin use the new fancy method
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
ede7510854
commit
8bd39fccf4
|
@ -47,8 +47,6 @@ class CommentPropertiesPlugin extends ServerPlugin {
|
||||||
|
|
||||||
private $cachedUnreadCount = [];
|
private $cachedUnreadCount = [];
|
||||||
|
|
||||||
private $cachedFolders = [];
|
|
||||||
|
|
||||||
public function __construct(ICommentsManager $commentsManager, IUserSession $userSession) {
|
public function __construct(ICommentsManager $commentsManager, IUserSession $userSession) {
|
||||||
$this->commentsManager = $commentsManager;
|
$this->commentsManager = $commentsManager;
|
||||||
$this->userSession = $userSession;
|
$this->userSession = $userSession;
|
||||||
|
@ -70,6 +68,31 @@ class CommentPropertiesPlugin extends ServerPlugin {
|
||||||
$this->server->on('propFind', [$this, 'handleGetProperties']);
|
$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,
|
* Adds tags and favorites properties to the response,
|
||||||
* if requested.
|
* if requested.
|
||||||
|
@ -91,11 +114,7 @@ class CommentPropertiesPlugin extends ServerPlugin {
|
||||||
&& $propFind->getDepth() !== 0
|
&& $propFind->getDepth() !== 0
|
||||||
&& !is_null($propFind->getStatus(self::PROPERTY_NAME_UNREAD))
|
&& !is_null($propFind->getStatus(self::PROPERTY_NAME_UNREAD))
|
||||||
) {
|
) {
|
||||||
$unreadCounts = $this->commentsManager->getNumberOfUnreadCommentsForFolder($node->getId(), $this->userSession->getUser());
|
$this->cacheDirectory($node);
|
||||||
$this->cachedFolders[] = $node->getPath();
|
|
||||||
foreach ($unreadCounts as $id => $count) {
|
|
||||||
$this->cachedUnreadCount[$id] = $count;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$propFind->handle(self::PROPERTY_NAME_COUNT, function () use ($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) {
|
$propFind->handle(self::PROPERTY_NAME_UNREAD, function () use ($node) {
|
||||||
if (isset($this->cachedUnreadCount[$node->getId()])) {
|
if (isset($this->cachedUnreadCount[$node->getId()])) {
|
||||||
return $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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue