Only construct the storage when we start using it
This commit is contained in:
parent
c98fef8a51
commit
2f1c62ce0b
|
@ -49,6 +49,9 @@ class SharedMount extends MountPoint implements MoveableMount {
|
|||
*/
|
||||
private $user;
|
||||
|
||||
/** @var \OCP\Share\IShare */
|
||||
private $share;
|
||||
|
||||
/**
|
||||
* @param string $storage
|
||||
* @param SharedMount[] $mountpoints
|
||||
|
@ -58,11 +61,10 @@ class SharedMount extends MountPoint implements MoveableMount {
|
|||
public function __construct($storage, array $mountpoints, $arguments = null, $loader = null) {
|
||||
$this->user = $arguments['user'];
|
||||
$this->recipientView = new View('/' . $this->user . '/files');
|
||||
/** @var \OCP\Share\IShare $share */
|
||||
$share = $arguments['newShare'];
|
||||
$newMountPoint = $this->verifyMountPoint($share, $mountpoints);
|
||||
$this->share = $arguments['newShare'];
|
||||
$newMountPoint = $this->verifyMountPoint($this->share, $mountpoints);
|
||||
$absMountPoint = '/' . $this->user . '/files' . $newMountPoint;
|
||||
$arguments['ownerView'] = new View('/' . $share->getShareOwner() . '/files');
|
||||
$arguments['ownerView'] = new View('/' . $this->share->getShareOwner() . '/files');
|
||||
parent::__construct($storage, $absMountPoint, $arguments, $loader);
|
||||
}
|
||||
|
||||
|
@ -210,8 +212,15 @@ class SharedMount extends MountPoint implements MoveableMount {
|
|||
* @return \OCP\Share\IShare
|
||||
*/
|
||||
public function getShare() {
|
||||
/** @var $storage \OC\Files\Storage\Shared */
|
||||
$storage = $this->getStorage();
|
||||
return $storage->getShare();
|
||||
return $this->share;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the file id of the root of the storage
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getStorageRootId() {
|
||||
return $this->share->getNodeId();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,22 +30,22 @@ class CachedMountInfo implements ICachedMountInfo {
|
|||
/**
|
||||
* @var IUser
|
||||
*/
|
||||
private $user;
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $storageId;
|
||||
protected $storageId;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $rootId;
|
||||
protected $rootId;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $mountPoint;
|
||||
protected $mountPoint;
|
||||
|
||||
/**
|
||||
* CachedMountInfo constructor.
|
||||
|
@ -88,9 +88,9 @@ class CachedMountInfo implements ICachedMountInfo {
|
|||
*/
|
||||
public function getMountPointNode() {
|
||||
// TODO injection etc
|
||||
Filesystem::initMountPoints($this->user->getUID());
|
||||
$userNode = \OC::$server->getUserFolder($this->user->getUID());
|
||||
$nodes = $userNode->getById($this->rootId);
|
||||
Filesystem::initMountPoints($this->getUser()->getUID());
|
||||
$userNode = \OC::$server->getUserFolder($this->getUser()->getUID());
|
||||
$nodes = $userNode->getById($this->getRootId());
|
||||
if (count($nodes) > 0) {
|
||||
return $nodes[0];
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
/**
|
||||
* @author Robin Appelman <icewind@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OC\Files\Config;
|
||||
|
||||
use OC\Files\Filesystem;
|
||||
use OCP\Files\Config\ICachedMountInfo;
|
||||
use OCP\Files\Mount\IMountPoint;
|
||||
use OCP\Files\Node;
|
||||
use OCP\IUser;
|
||||
|
||||
class LazyStorageMountInfo extends CachedMountInfo {
|
||||
/** @var IMountPoint */
|
||||
private $mount;
|
||||
|
||||
/**
|
||||
* CachedMountInfo constructor.
|
||||
*
|
||||
* @param IUser $user
|
||||
* @param IMountPoint $mount
|
||||
*/
|
||||
public function __construct(IUser $user, IMountPoint $mount) {
|
||||
$this->user = $user;
|
||||
$this->mount = $mount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int the numeric storage id of the mount
|
||||
*/
|
||||
public function getStorageId() {
|
||||
if (!$this->storageId) {
|
||||
$this->storageId = $this->mount->getStorage()->getStorageCache()->getNumericId();
|
||||
}
|
||||
return parent::getStorageId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int the fileid of the root of the mount
|
||||
*/
|
||||
public function getRootId() {
|
||||
if (!$this->rootId) {
|
||||
$this->rootId = $this->mount->getStorageRootId();
|
||||
}
|
||||
return parent::getRootId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string the mount point of the mount for the user
|
||||
*/
|
||||
public function getMountPoint() {
|
||||
if (!$this->mountPoint) {
|
||||
$this->mountPoint = $this->mount->getMountPoint();
|
||||
}
|
||||
return parent::getMountPoint();
|
||||
}
|
||||
}
|
|
@ -80,18 +80,11 @@ class UserMountCache implements IUserMountCache {
|
|||
});
|
||||
/** @var ICachedMountInfo[] $newMounts */
|
||||
$newMounts = array_map(function (IMountPoint $mount) use ($user) {
|
||||
$storage = $mount->getStorage();
|
||||
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
|
||||
$rootId = (int)$storage->getShare()->getNodeId();
|
||||
} else {
|
||||
$rootId = (int)$storage->getCache()->getId('');
|
||||
}
|
||||
$storageId = (int)$storage->getStorageCache()->getNumericId();
|
||||
// filter out any storages which aren't scanned yet since we aren't interested in files from those storages (yet)
|
||||
if ($rootId === -1) {
|
||||
if ($mount->getStorageRootId() === -1) {
|
||||
return null;
|
||||
} else {
|
||||
return new CachedMountInfo($user, $storageId, $rootId, $mount->getMountPoint());
|
||||
return new LazyStorageMountInfo($user, $mount);
|
||||
}
|
||||
}, $mounts);
|
||||
$newMounts = array_values(array_filter($newMounts));
|
||||
|
|
|
@ -239,4 +239,13 @@ class MountPoint implements IMountPoint {
|
|||
public function getOptions() {
|
||||
return $this->mountOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the file id of the root of the storage
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getStorageRootId() {
|
||||
return (int)$this->getStorage()->getCache()->getId('');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,4 +94,12 @@ interface IMountPoint {
|
|||
* @since 8.1.0
|
||||
*/
|
||||
public function getOptions();
|
||||
|
||||
/**
|
||||
* Get the file id of the root of the storage
|
||||
*
|
||||
* @return int
|
||||
* @since 9.1.0
|
||||
*/
|
||||
public function getStorageRootId();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue