diff options
author | Robin Appelman <robin@icewind.nl> | 2022-03-17 18:32:50 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2022-03-24 17:03:52 +0100 |
commit | 89919b0e24563a0468e72395963e236fcedc0df6 (patch) | |
tree | f0f54345a7f4a144e1168eefc4257b3ca62574ac /lib | |
parent | fc6e4530c41758c7b8713153f45dbe38f5cdca08 (diff) | |
download | nextcloud-server-89919b0e24563a0468e72395963e236fcedc0df6.tar.gz nextcloud-server-89919b0e24563a0468e72395963e236fcedc0df6.zip |
invalidate mount cache on circles change
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/SetupManager.php | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php index 6da0bf21f8f..6746af1068e 100644 --- a/lib/private/Files/SetupManager.php +++ b/lib/private/Files/SetupManager.php @@ -103,22 +103,7 @@ class SetupManager { $this->cache = $cacheFactory->createDistributed('setupmanager::'); $this->listeningForProviders = false; - $this->eventDispatcher->addListener(UserAddedEvent::class, function(UserAddedEvent $event) { - $this->cache->remove($event->getUser()->getUID()); - }); - $this->eventDispatcher->addListener(UserRemovedEvent::class, function(UserRemovedEvent $event) { - $this->cache->remove($event->getUser()->getUID()); - }); - $eventDispatcher->addListener(ShareCreatedEvent::class, function(ShareCreatedEvent $event) { - $this->cache->remove($event->getShare()->getSharedWith()); - }); - $eventDispatcher->addListener(InvalidateMountCacheEvent::class, function(InvalidateMountCacheEvent $event) { - if ($user = $event->getUser()) { - $this->cache->remove($user->getUID()); - } else { - $this->cache->clear(); - } - }); + $this->setupListeners(); } private function isSetupStarted(IUser $user): bool { @@ -213,7 +198,9 @@ class SetupManager { } $this->setupForUserWith($user, function () use ($user) { - $this->mountProviderCollection->addMountForUser($user, $this->mountManager, function (IMountProvider $provider) use ($user) { + $this->mountProviderCollection->addMountForUser($user, $this->mountManager, function ( + IMountProvider $provider + ) use ($user) { return !in_array(get_class($provider), $this->setupUserMountProviders[$user->getUID()]); }); }); @@ -433,7 +420,9 @@ class SetupManager { private function listenForNewMountProviders() { if (!$this->listeningForProviders) { $this->listeningForProviders = true; - $this->mountProviderCollection->listen('\OC\Files\Config', 'registerMountProvider', function (IMountProvider $provider) { + $this->mountProviderCollection->listen('\OC\Files\Config', 'registerMountProvider', function ( + IMountProvider $provider + ) { foreach ($this->setupUsers as $userId) { $user = $this->userManager->get($userId); if ($user) { @@ -444,4 +433,40 @@ class SetupManager { }); } } + + private function setupListeners() { + // note that this event handling is intentionally pessimistic + // clearing the cache to often is better than not enough + + $this->eventDispatcher->addListener(UserAddedEvent::class, function (UserAddedEvent $event) { + $this->cache->remove($event->getUser()->getUID()); + }); + $this->eventDispatcher->addListener(UserRemovedEvent::class, function (UserRemovedEvent $event) { + $this->cache->remove($event->getUser()->getUID()); + }); + $this->eventDispatcher->addListener(ShareCreatedEvent::class, function (ShareCreatedEvent $event) { + $this->cache->remove($event->getShare()->getSharedWith()); + }); + $this->eventDispatcher->addListener(InvalidateMountCacheEvent::class, function (InvalidateMountCacheEvent $event + ) { + if ($user = $event->getUser()) { + $this->cache->remove($user->getUID()); + } else { + $this->cache->clear(); + } + }); + + $genericEvents = [ + '\OCA\Circles::onCircleCreation', + '\OCA\Circles::onCircleDestruction', + '\OCA\Circles::onMemberNew', + '\OCA\Circles::onMemberLeaving', + ]; + + foreach ($genericEvents as $genericEvent) { + $this->eventDispatcher->addListener($genericEvent, function($event) { + $this->cache->clear(); + }); + } + } } |