diff options
author | Robin Appelman <icewind@owncloud.com> | 2013-06-30 18:02:34 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2013-06-30 18:37:46 +0200 |
commit | 2d1c6ae726caca3cb9574d7fd6a9e495d218ec83 (patch) | |
tree | cfa13b6c281db2f14dd6dee7d34b6f83b4b7daad /lib/connector/sabre | |
parent | 8beec2015a43839818f9b6f14283b8980ec185b3 (diff) | |
download | nextcloud-server-2d1c6ae726caca3cb9574d7fd6a9e495d218ec83.tar.gz nextcloud-server-2d1c6ae726caca3cb9574d7fd6a9e495d218ec83.zip |
overwrite Sabre_DAV_ObjectTree with a faster getNodeForPath
Diffstat (limited to 'lib/connector/sabre')
-rw-r--r-- | lib/connector/sabre/objecttree.php | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/connector/sabre/objecttree.php b/lib/connector/sabre/objecttree.php new file mode 100644 index 00000000000..23cbd20cf4e --- /dev/null +++ b/lib/connector/sabre/objecttree.php @@ -0,0 +1,49 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Connector\Sabre; + +use OC\Files\Filesystem; + +class ObjectTree extends \Sabre_DAV_ObjectTree { + /** + * Returns the INode object for the requested path + * + * @param string $path + * @throws \Sabre_DAV_Exception_NotFound + * @return \Sabre_DAV_INode + */ + public function getNodeForPath($path) { + + $path = trim($path, '/'); + if (isset($this->cache[$path])) return $this->cache[$path]; + + // Is it the root node? + if (!strlen($path)) { + return $this->rootNode; + } + + $info = Filesystem::getFileInfo($path); + + if (!$info) { + throw new \Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located'); + } + + if ($info['mimetype'] == 'httpd/unix-directory') { + $node = new \OC_Connector_Sabre_Directory($path); + } else { + $node = new \OC_Connector_Sabre_File($path); + } + + $node->setFileinfoCache($info); + + $this->cache[$path] = $node; + return $node; + + } +} |