From 1db5d7cf47a61a74483884f01eefff106ea56190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 21 Sep 2022 13:46:45 +0200 Subject: [PATCH] Cache user membership for circles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Service/CirclesService.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Service/CirclesService.php b/lib/Service/CirclesService.php index 6a471b41d..919a3cbb3 100644 --- a/lib/Service/CirclesService.php +++ b/lib/Service/CirclesService.php @@ -40,6 +40,8 @@ use Throwable; class CirclesService { private $circlesEnabled; + private $userCircleCache = []; + public function __construct(IAppManager $appManager) { $this->circlesEnabled = $appManager->isEnabledForUser('circles'); } @@ -70,6 +72,10 @@ class CirclesService { return false; } + if (isset($this->userCircleCache[$circleId][$userId])) { + return $this->userCircleCache[$circleId][$userId]; + } + try { /** @var CirclesManager $circlesManager */ $circlesManager = \OC::$server->get(CirclesManager::class); @@ -77,7 +83,14 @@ class CirclesService { $circlesManager->startSession($federatedUser); $circle = $circlesManager->getCircle($circleId); $member = $circle->getInitiator(); - return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; + $isUserInCircle = $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; + + if (!isset($this->userCircleCache[$circleId])) { + $this->userCircleCache[$circleId] = []; + } + $this->userCircleCache[$circleId][$userId] = $isUserInCircle; + + return $isUserInCircle; } catch (Throwable $e) { } return false;