aboutsummaryrefslogtreecommitdiffstats
path: root/lib/connector/sabre
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-06-30 18:02:34 +0200
committerRobin Appelman <icewind@owncloud.com>2013-06-30 18:37:46 +0200
commit2d1c6ae726caca3cb9574d7fd6a9e495d218ec83 (patch)
treecfa13b6c281db2f14dd6dee7d34b6f83b4b7daad /lib/connector/sabre
parent8beec2015a43839818f9b6f14283b8980ec185b3 (diff)
downloadnextcloud-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.php49
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;
+
+ }
+}