Browse Source

Merge pull request #32040 from nextcloud/full-setup-only-new

only register mounts that are new from providers that are new during a full setup
tags/v25.0.0beta1
Julius Härtl 2 years ago
parent
commit
fb59875071
No account linked to committer's email address

+ 4
- 0
lib/private/Files/Config/MountProviderCollection.php View File

@@ -234,4 +234,8 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
$this->homeProviders = [];
$this->rootProviders = [];
}

public function getProviders(): array {
return $this->providers;
}
}

+ 12
- 3
lib/private/Files/SetupManager.php View File

@@ -203,6 +203,8 @@ class SetupManager {
$this->setupUserMountProviders[$user->getUID()] = [];
}

$previouslySetupProviders = $this->setupUserMountProviders[$user->getUID()];

$this->setupForUserWith($user, function () use ($user) {
$this->mountProviderCollection->addMountForUser($user, $this->mountManager, function (
IMountProvider $provider
@@ -210,7 +212,7 @@ class SetupManager {
return !in_array(get_class($provider), $this->setupUserMountProviders[$user->getUID()]);
});
});
$this->afterUserFullySetup($user);
$this->afterUserFullySetup($user, $previouslySetupProviders);
}

/**
@@ -258,13 +260,20 @@ class SetupManager {
/**
* Final housekeeping after a user has been fully setup
*/
private function afterUserFullySetup(IUser $user): void {
private function afterUserFullySetup(IUser $user, array $previouslySetupProviders): void {
$userRoot = '/' . $user->getUID() . '/';
$mounts = $this->mountManager->getAll();
$mounts = array_filter($mounts, function (IMountPoint $mount) use ($userRoot) {
return strpos($mount->getMountPoint(), $userRoot) === 0;
});
$this->userMountCache->registerMounts($user, $mounts);
$allProviders = array_map(function (IMountProvider $provider) {
return get_class($provider);
}, $this->mountProviderCollection->getProviders());
$newProviders = array_diff($allProviders, $previouslySetupProviders);
$mounts = array_filter($mounts, function (IMountPoint $mount) use ($previouslySetupProviders) {
return !in_array($mount->getMountProvider(), $previouslySetupProviders);
});
$this->userMountCache->registerMounts($user, $mounts, $newProviders);

$cacheDuration = $this->config->getSystemValueInt('fs_mount_cache_duration', 5 * 60);
if ($cacheDuration > 0) {

Loading…
Cancel
Save