Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-04-07 19:20:43 +0300
committerGitHub <noreply@github.com>2022-04-07 19:20:43 +0300
commit0f924e086aa5581ded9f29286e776f60e280ac78 (patch)
tree6ad52f65454b09d8fb1520c2375493d3df90a031 /apps/user_status
parentd7e094836bc172b98cbc5b047b542486344093f4 (diff)
parent1dbe7dafe26f4a11af610f3ce0dea59c31227d78 (diff)
Merge pull request #31850 from nextcloud/performance/heartbeat-fetch-status-once
Fetch status in heartbeat controller only once
Diffstat (limited to 'apps/user_status')
-rw-r--r--apps/user_status/lib/Connector/UserStatus.php13
-rw-r--r--apps/user_status/lib/Controller/HeartbeatController.php20
-rw-r--r--apps/user_status/lib/Listener/UserLiveStatusListener.php17
3 files changed, 23 insertions, 27 deletions
diff --git a/apps/user_status/lib/Connector/UserStatus.php b/apps/user_status/lib/Connector/UserStatus.php
index 26dc2be7e93..ff05ded9e2b 100644
--- a/apps/user_status/lib/Connector/UserStatus.php
+++ b/apps/user_status/lib/Connector/UserStatus.php
@@ -46,12 +46,11 @@ class UserStatus implements IUserStatus {
/** @var DateTimeImmutable|null */
private $clearAt;
- /**
- * UserStatus constructor.
- *
- * @param Db\UserStatus $status
- */
+ /** @var Db\UserStatus */
+ private $internalStatus;
+
public function __construct(Db\UserStatus $status) {
+ $this->internalStatus = $status;
$this->userId = $status->getUserId();
$this->status = $status->getStatus();
$this->message = $status->getCustomMessage();
@@ -99,4 +98,8 @@ class UserStatus implements IUserStatus {
public function getClearAt(): ?DateTimeImmutable {
return $this->clearAt;
}
+
+ public function getInternal(): Db\UserStatus {
+ return $this->internalStatus;
+ }
}
diff --git a/apps/user_status/lib/Controller/HeartbeatController.php b/apps/user_status/lib/Controller/HeartbeatController.php
index 223ff4a0f45..c11a63b4420 100644
--- a/apps/user_status/lib/Controller/HeartbeatController.php
+++ b/apps/user_status/lib/Controller/HeartbeatController.php
@@ -81,21 +81,21 @@ class HeartbeatController extends Controller {
return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR);
}
- $this->eventDispatcher->dispatchTyped(
- new UserLiveStatusEvent(
- $user,
- $status,
- $this->timeFactory->getTime()
- )
+ $event = new UserLiveStatusEvent(
+ $user,
+ $status,
+ $this->timeFactory->getTime()
);
- try {
- $userStatus = $this->service->findByUserId($user->getUID());
- } catch (DoesNotExistException $ex) {
+ $this->eventDispatcher->dispatchTyped($event);
+
+ $userStatus = $event->getUserStatus();
+ if (!$userStatus) {
return new JSONResponse([], Http::STATUS_NO_CONTENT);
}
- return new JSONResponse($this->formatStatus($userStatus));
+ /** @psalm-suppress UndefinedInterfaceMethod */
+ return new JSONResponse($this->formatStatus($userStatus->getInternal()));
}
private function formatStatus(UserStatus $status): array {
diff --git a/apps/user_status/lib/Listener/UserLiveStatusListener.php b/apps/user_status/lib/Listener/UserLiveStatusListener.php
index 60b5fb7f3a4..c015e684142 100644
--- a/apps/user_status/lib/Listener/UserLiveStatusListener.php
+++ b/apps/user_status/lib/Listener/UserLiveStatusListener.php
@@ -26,6 +26,7 @@ declare(strict_types=1);
namespace OCA\UserStatus\Listener;
use OCA\UserStatus\Db\UserStatus;
+use OCA\UserStatus\Connector\UserStatus as ConnectorUserStatus;
use OCA\UserStatus\Db\UserStatusMapper;
use OCA\UserStatus\Service\StatusService;
use OCP\AppFramework\Db\DoesNotExistException;
@@ -41,19 +42,9 @@ use OCP\UserStatus\IUserStatus;
* @package OCA\UserStatus\Listener
*/
class UserLiveStatusListener implements IEventListener {
+ private UserStatusMapper $mapper;
+ private ITimeFactory $timeFactory;
- /** @var UserStatusMapper */
- private $mapper;
-
- /** @var ITimeFactory */
- private $timeFactory;
-
- /**
- * UserLiveStatusListener constructor.
- *
- * @param UserStatusMapper $mapper
- * @param ITimeFactory $timeFactory
- */
public function __construct(UserStatusMapper $mapper,
ITimeFactory $timeFactory) {
$this->mapper = $mapper;
@@ -112,5 +103,7 @@ class UserLiveStatusListener implements IEventListener {
$this->mapper->update($userStatus);
}
}
+
+ $event->setUserStatus(new ConnectorUserStatus($userStatus));
}
}