mount shared mounts last

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2017-02-15 15:00:21 +01:00
parent 11c4875190
commit 714f198a5d
No known key found for this signature in database
GPG Key ID: CBCA68FBAEBF98C9
2 changed files with 34 additions and 2 deletions

View File

@ -29,6 +29,7 @@ use OCP\Files\Config\IHomeMountProvider;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Config\IUserMountCache;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\Storage\IStorageFactory;
use OCP\IUser;
@ -84,6 +85,37 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
}, array());
}
public function addMountForUser(IUser $user, IMountManager $mountManager) {
// shared mount provider gets to go last since it needs to know existing files
// to check for name collisions
$firstMounts = [];
$firstProviders = array_filter($this->providers, function (IMountProvider $provider) {
return (get_class($provider) !== 'OCA\Files_Sharing\MountProvider');
});
$lastProviders = array_filter($this->providers, function (IMountProvider $provider) {
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);
}
}
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);
}
}
array_walk($lateMounts, [$mountManager, 'addMount']);
return array_merge($lateMounts, $firstMounts);
}
/**
* Get the configured home mount for this user
*
@ -110,6 +142,7 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
*/
public function registerProvider(IMountProvider $provider) {
$this->providers[] = $provider;
$this->emit('\OC\Files\Config', 'registerMountProvider', [$provider]);
}

View File

@ -443,8 +443,7 @@ class Filesystem {
// Chance to mount for other storages
if ($userObject) {
$mounts = $mountConfigManager->getMountsForUser($userObject);
array_walk($mounts, array(self::$mounts, 'addMount'));
$mounts = $mountConfigManager->addMountForUser($userObject, self::getMountManager());
$mounts[] = $homeMount;
$mountConfigManager->registerMounts($userObject, $mounts);
}