aboutsummaryrefslogtreecommitdiffstats
path: root/lib/files/filesystem.php
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-10-21 02:12:58 +0200
committerRobin Appelman <icewind@owncloud.com>2012-10-21 02:12:58 +0200
commit2522c25af726a8487ac13855e8a035b990cd69a4 (patch)
tree18bc6a21eda6b3e8aa2303a25e063e2f2df3011b /lib/files/filesystem.php
parent01594b8610ce4f08e28010994d9cbecda4c52e35 (diff)
downloadnextcloud-server-2522c25af726a8487ac13855e8a035b990cd69a4.tar.gz
nextcloud-server-2522c25af726a8487ac13855e8a035b990cd69a4.zip
use OC_Files::getFileInfo and OC_Files::getDirectoryContent as high level api for the filecache
most apps would want to use this api instead of using the cache directly
Diffstat (limited to 'lib/files/filesystem.php')
-rw-r--r--lib/files/filesystem.php73
1 files changed, 57 insertions, 16 deletions
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php
index 05dd698ab4b..b7f8483fbf9 100644
--- a/lib/files/filesystem.php
+++ b/lib/files/filesystem.php
@@ -165,6 +165,43 @@ class Filesystem {
}
/**
+ * get a list of all mount points in a directory
+ *
+ * @param string $path
+ * @return string[]
+ */
+ static public function getMountPoints($path) {
+ $path = self::normalizePath($path);
+ if (strlen($path) > 1) {
+ $path .= '/';
+ }
+ $pathLength = strlen($path);
+
+ $mountPoints = array_keys(self::$mounts);
+ $result = array();
+ foreach ($mountPoints as $mountPoint) {
+ if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) {
+ $result[] = $mountPoint;
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * get the storage mounted at $mountPoint
+ *
+ * @param string $mountPoint
+ * @return \OC\Files\Storage\Storage
+ */
+ public static function getStorage($mountPoint) {
+ if (!isset(self::$storages[$mountPoint])) {
+ $mount = self::$mounts[$mountPoint];
+ self::$storages[$mountPoint] = self::createStorage($mount['class'], $mount['arguments']);
+ }
+ return self::$storages[$mountPoint];
+ }
+
+ /**
* resolve a path to a storage and internal path
*
* @param string $path
@@ -173,14 +210,14 @@ class Filesystem {
static public function resolvePath($path) {
$mountpoint = self::getMountPoint($path);
if ($mountpoint) {
- if (!isset(self::$storages[$mountpoint])) {
- $mount = self::$mounts[$mountpoint];
- self::$storages[$mountpoint] = self::createStorage($mount['class'], $mount['arguments']);
+ $storage = self::getStorage($mountpoint);
+ if ($mountpoint === $path) {
+ $internalPath = '';
+ } else {
+ $internalPath = substr($path, strlen($mountpoint));
}
- $storage = self::$storages[$mountpoint];
- $internalPath = substr($path, strlen($mountpoint));
return array($storage, $internalPath);
- }else{
+ } else {
return array(null, null);
}
}
@@ -302,18 +339,22 @@ class Filesystem {
/**
* mount an \OC\Files\Storage\Storage in our virtual filesystem
*
- * @param \OC\Files\Storage\Storage $storage
+ * @param \OC\Files\Storage\Storage|string $class
* @param array $arguments
* @param string $mountpoint
*/
static public function mount($class, $arguments, $mountpoint) {
- if ($mountpoint[0] != '/') {
- $mountpoint = '/' . $mountpoint;
+ $mountpoint = self::normalizePath($mountpoint);
+ if (strlen($mountpoint) > 1) {
+ $mountpoint .= '/';
}
- if (substr($mountpoint, -1) !== '/') {
- $mountpoint = $mountpoint . '/';
+
+ if ($class instanceof \OC\Files\Storage\Storage) {
+ self::$mounts[$mountpoint] = array('class' => get_class($class), 'arguments' => $arguments);
+ self::$storages[$mountpoint] = $class;
+ } else {
+ self::$mounts[$mountpoint] = array('class' => $class, 'arguments' => $arguments);
}
- self::$mounts[$mountpoint] = array('class' => $class, 'arguments' => $arguments);
}
/**
@@ -522,15 +563,15 @@ class Filesystem {
static public function removeETagHook($params, $root = false) {
if (isset($params['path'])) {
- $path=$params['path'];
+ $path = $params['path'];
} else {
- $path=$params['oldpath'];
+ $path = $params['oldpath'];
}
if ($root) { // reduce path to the required part of it (no 'username/files')
- $fakeRootView = new OC_FilesystemView($root);
+ $fakeRootView = new View($root);
$count = 1;
- $path=str_replace(OC_App::getStorage("files")->getAbsolutePath(), "", $fakeRootView->getAbsolutePath($path), $count);
+ $path = str_replace(\OC_App::getStorage("files")->getAbsolutePath(''), "", $fakeRootView->getAbsolutePath($path), $count);
}
$path = self::normalizePath($path);