diff options
-rw-r--r-- | lib/private/Collaboration/Reference/RenderReferenceEventListener.php | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/private/Collaboration/Reference/RenderReferenceEventListener.php b/lib/private/Collaboration/Reference/RenderReferenceEventListener.php index 9e6192314cb..52ca3c66f2a 100644 --- a/lib/private/Collaboration/Reference/RenderReferenceEventListener.php +++ b/lib/private/Collaboration/Reference/RenderReferenceEventListener.php @@ -15,12 +15,13 @@ use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventListener; use OCP\IInitialStateService; - +use OCP\ICacheFactory; /** @template-implements IEventListener<Event|RenderReferenceEvent> */ class RenderReferenceEventListener implements IEventListener { public function __construct( private IReferenceManager $manager, private IInitialStateService $initialStateService, + private ICacheFactory $cacheFactory, ) { } @@ -36,13 +37,23 @@ class RenderReferenceEventListener implements IEventListener { return; } - $providers = $this->manager->getDiscoverableProviders(); - $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) { - return $provider->jsonSerialize(); - }, $providers); - $this->initialStateService->provideInitialState('core', 'reference-provider-list', $jsonProviders); + $cache = $this->cacheFactory->createLocal('reference-provider-list'); + + $jsonProviders = $cache->get('providers'); + $timestamps = $cache->get('timestamps'); + + if ($jsonProviders === null || $timestamps === null) { + $providers = $this->manager->getDiscoverableProviders(); + $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) { + return $provider->jsonSerialize(); + }, $providers); + $cache->set('providers', $jsonProviders, 24 * 3600); - $timestamps = $this->manager->getUserProviderTimestamps(); + $timestamps = $this->manager->getUserProviderTimestamps(); + $cache->set('timestamps', $timestamps, 24 * 3600); + } + + $this->initialStateService->provideInitialState('core', 'reference-provider-list', $jsonProviders); $this->initialStateService->provideInitialState('core', 'reference-provider-timestamps', $timestamps); } } |