diff options
Diffstat (limited to 'lib/private/Files/Config/MountProviderCollection.php')
-rw-r--r-- | lib/private/Files/Config/MountProviderCollection.php | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/lib/private/Files/Config/MountProviderCollection.php b/lib/private/Files/Config/MountProviderCollection.php index 0e08d9d0e83..ae6481e45bb 100644 --- a/lib/private/Files/Config/MountProviderCollection.php +++ b/lib/private/Files/Config/MountProviderCollection.php @@ -26,6 +26,7 @@ namespace OC\Files\Config; use OC\Hooks\Emitter; use OC\Hooks\EmitterTrait; +use OCP\Diagnostics\IEventLogger; use OCP\Files\Config\IHomeMountProvider; use OCP\Files\Config\IMountProvider; use OCP\Files\Config\IMountProviderCollection; @@ -65,13 +66,29 @@ class MountProviderCollection implements IMountProviderCollection, Emitter { /** @var callable[] */ private $mountFilters = []; + private IEventLogger $eventLogger; + /** * @param \OCP\Files\Storage\IStorageFactory $loader * @param IUserMountCache $mountCache */ - public function __construct(IStorageFactory $loader, IUserMountCache $mountCache) { + public function __construct( + IStorageFactory $loader, + IUserMountCache $mountCache, + IEventLogger $eventLogger + ) { $this->loader = $loader; $this->mountCache = $mountCache; + $this->eventLogger = $eventLogger; + } + + private function getMountsFromProvider(IMountProvider $provider, IUser $user, IStorageFactory $loader): array { + $class = str_replace('\\', '_', get_class($provider)); + $uid = $user->getUID(); + $this->eventLogger->start('fs:setup:provider:' . $class, "Getting mounts from $class for $uid"); + $mounts = $provider->getMountsForUser($user, $loader) ?? []; + $this->eventLogger->end('fs:setup:provider:' . $class); + return $mounts; } /** @@ -82,11 +99,8 @@ class MountProviderCollection implements IMountProviderCollection, Emitter { private function getUserMountsForProviders(IUser $user, array $providers): array { $loader = $this->loader; $mounts = array_map(function (IMountProvider $provider) use ($user, $loader) { - return $provider->getMountsForUser($user, $loader); + return $this->getMountsFromProvider($provider, $user, $loader); }, $providers); - $mounts = array_filter($mounts, function ($result) { - return is_array($result); - }); $mounts = array_reduce($mounts, function (array $mounts, array $providerMounts) { return array_merge($mounts, $providerMounts); }, []); @@ -121,24 +135,22 @@ class MountProviderCollection implements IMountProviderCollection, Emitter { return (get_class($provider) === 'OCA\Files_Sharing\MountProvider'); }); foreach ($firstProviders as $provider) { - $mounts = $provider->getMountsForUser($user, $this->loader); - if (is_array($mounts)) { - $firstMounts = array_merge($firstMounts, $mounts); - } + $mounts = $this->getMountsFromProvider($provider, $user, $this->loader); + $firstMounts = array_merge($firstMounts, $mounts); } $firstMounts = $this->filterMounts($user, $firstMounts); array_walk($firstMounts, [$mountManager, 'addMount']); $lateMounts = []; foreach ($lastProviders as $provider) { - $mounts = $provider->getMountsForUser($user, $this->loader); - if (is_array($mounts)) { - $lateMounts = array_merge($lateMounts, $mounts); - } + $mounts = $this->getMountsFromProvider($provider, $user, $this->loader); + $lateMounts = array_merge($lateMounts, $mounts); } $lateMounts = $this->filterMounts($user, $lateMounts); + $this->eventLogger->start("fs:setup:add-mounts", "Add mounts to the filesystem"); array_walk($lateMounts, [$mountManager, 'addMount']); + $this->eventLogger->end("fs:setup:add-mounts"); return array_merge($lateMounts, $firstMounts); } |