diff options
author | Robin Appelman <robin@icewind.nl> | 2018-08-16 21:05:01 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2018-08-16 21:28:01 +0200 |
commit | 67f3d6f0a6b87290cba0d6cf1f5e03e4e97e1f78 (patch) | |
tree | 0270bfec86fa8c0ea899f6a73197fe8faaea7ee8 | |
parent | 4c0cbdff36ac70c956df2aa33168dfb66c479afe (diff) | |
download | nextcloud-server-67f3d6f0a6b87290cba0d6cf1f5e03e4e97e1f78.tar.gz nextcloud-server-67f3d6f0a6b87290cba0d6cf1f5e03e4e97e1f78.zip |
cache parent exists status during share setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | apps/files_sharing/lib/Helper.php | 4 | ||||
-rw-r--r-- | apps/files_sharing/lib/MountProvider.php | 5 | ||||
-rw-r--r-- | apps/files_sharing/lib/SharedMount.php | 18 |
3 files changed, 17 insertions, 10 deletions
diff --git a/apps/files_sharing/lib/Helper.php b/apps/files_sharing/lib/Helper.php index 5f29a7a2457..72dea4b7dcb 100644 --- a/apps/files_sharing/lib/Helper.php +++ b/apps/files_sharing/lib/Helper.php @@ -65,10 +65,6 @@ class Helper { return $path; } - public static function isUsingShareFolder() { - return \OC::$server->getConfig()->getSystemValue('share_folder', '/') !== '/'; - } - /** * get default share folder * diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index 96af77d54ec..47a787350d5 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -27,6 +27,7 @@ namespace OCA\Files_Sharing; +use OC\Cache\CappedMemoryCache; use OC\Files\View; use OCP\Files\Config\IMountProvider; use OCP\Files\Storage\IStorageFactory; @@ -88,6 +89,7 @@ class MountProvider implements IMountProvider { $view = new View('/' . $user->getUID() . '/files'); $ownerViews = []; $sharingDisabledForUser = $this->shareManager->sharingDisabledForUser($user->getUID()); + $foldersExistCache = new CappedMemoryCache(); foreach ($superShares as $share) { try { /** @var \OCP\Share\IShare $parentShare */ @@ -109,7 +111,8 @@ class MountProvider implements IMountProvider { 'sharingDisabledForUser' => $sharingDisabledForUser ], $storageFactory, - $view + $view, + $foldersExistCache ); $mounts[$mount->getMountPoint()] = $mount; } catch (\Exception $e) { diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 223d7693671..a44fa336875 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -28,10 +28,12 @@ namespace OCA\Files_Sharing; +use OC\Cache\CappedMemoryCache; use OC\Files\Filesystem; use OC\Files\Mount\MountPoint; use OC\Files\Mount\MoveableMount; use OC\Files\View; +use OCP\Files\Storage\IStorageFactory; /** * Shared mount points can be moved by the user @@ -62,17 +64,17 @@ class SharedMount extends MountPoint implements MoveableMount { * @param string $storage * @param SharedMount[] $mountpoints * @param array $arguments - * @param \OCP\Files\Storage\IStorageFactory $loader + * @param IStorageFactory $loader * @param View $recipientView */ - public function __construct($storage, array $mountpoints, $arguments, $loader, $recipientView) { + public function __construct($storage, array $mountpoints, $arguments, IStorageFactory $loader, View $recipientView, CappedMemoryCache $folderExistCache) { $this->user = $arguments['user']; $this->recipientView = $recipientView; $this->superShare = $arguments['superShare']; $this->groupedShares = $arguments['groupedShares']; - $newMountPoint = $this->verifyMountPoint($this->superShare, $mountpoints); + $newMountPoint = $this->verifyMountPoint($this->superShare, $mountpoints, $folderExistCache); $absMountPoint = '/' . $this->user . '/files' . $newMountPoint; parent::__construct($storage, $absMountPoint, $arguments, $loader); } @@ -84,12 +86,18 @@ class SharedMount extends MountPoint implements MoveableMount { * @param SharedMount[] $mountpoints * @return string */ - private function verifyMountPoint(\OCP\Share\IShare $share, array $mountpoints) { + private function verifyMountPoint(\OCP\Share\IShare $share, array $mountpoints, CappedMemoryCache $folderExistCache) { $mountPoint = basename($share->getTarget()); $parent = dirname($share->getTarget()); - if (Helper::isUsingShareFolder() && !$this->recipientView->is_dir($parent)) { + if ($folderExistCache->hasKey($parent)) { + $parentExists = $folderExistCache->get($parent); + } else { + $parentExists = $this->recipientView->is_dir($parent); + $folderExistCache->set($parent, $parentExists); + } + if (!$parentExists) { $parent = Helper::getShareFolder($this->recipientView); } |