overwrite Sabre_DAV_ObjectTree with a faster getNodeForPath

This commit is contained in:
Robin Appelman 2013-06-30 18:02:34 +02:00
parent 8beec2015a
commit 2d1c6ae726
1 changed files with 49 additions and 0 deletions

View File

@ -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;
}
}