summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2018-08-16 21:05:01 +0200
committerRobin Appelman <robin@icewind.nl>2018-08-16 21:28:01 +0200
commit67f3d6f0a6b87290cba0d6cf1f5e03e4e97e1f78 (patch)
tree0270bfec86fa8c0ea899f6a73197fe8faaea7ee8
parent4c0cbdff36ac70c956df2aa33168dfb66c479afe (diff)
downloadnextcloud-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.php4
-rw-r--r--apps/files_sharing/lib/MountProvider.php5
-rw-r--r--apps/files_sharing/lib/SharedMount.php18
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);
}