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:
authorRobin Appelman <robin@icewind.nl>2022-03-17 20:32:50 +0300
committerRobin Appelman <robin@icewind.nl>2022-03-24 19:03:52 +0300
commit89919b0e24563a0468e72395963e236fcedc0df6 (patch)
treef0f54345a7f4a144e1168eefc4257b3ca62574ac /lib/private/Files
parentfc6e4530c41758c7b8713153f45dbe38f5cdca08 (diff)
invalidate mount cache on circles change
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Files')
-rw-r--r--lib/private/Files/SetupManager.php61
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();
+ });
+ }
+ }
}