diff options
author | Robin Appelman <icewind@owncloud.com> | 2013-04-26 00:01:36 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2013-04-26 00:01:36 +0200 |
commit | 809b5f81f6ee448563462ae8f642fbb8a6a11499 (patch) | |
tree | 88f31a78a59d073b3731e00c26bb6ae05be032a5 /lib/files | |
parent | bcd9a6903317a786f5f947374a8680130e4a8297 (diff) | |
download | nextcloud-server-809b5f81f6ee448563462ae8f642fbb8a6a11499.tar.gz nextcloud-server-809b5f81f6ee448563462ae8f642fbb8a6a11499.zip |
Further seperation of mount management logic
Diffstat (limited to 'lib/files')
-rw-r--r-- | lib/files/filesystem.php | 39 | ||||
-rw-r--r-- | lib/files/mount/manager.php | 120 | ||||
-rw-r--r-- | lib/files/mount/mount.php (renamed from lib/files/mount.php) | 109 | ||||
-rw-r--r-- | lib/files/view.php | 2 |
4 files changed, 162 insertions, 108 deletions
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php index 09732e67ac6..ad21a98fabc 100644 --- a/lib/files/filesystem.php +++ b/lib/files/filesystem.php @@ -34,6 +34,11 @@ const FREE_SPACE_UNKNOWN = -2; const FREE_SPACE_UNLIMITED = -3; class Filesystem { + /** + * @var Mount\Manager $mounts + */ + private static $mounts; + public static $loaded = false; /** * @var \OC\Files\View $defaultInstance @@ -147,7 +152,7 @@ class Filesystem { * @return string */ static public function getMountPoint($path) { - $mount = Mount::find($path); + $mount = self::$mounts->find($path); if ($mount) { return $mount->getMountPoint(); } else { @@ -163,7 +168,7 @@ class Filesystem { */ static public function getMountPoints($path) { $result = array(); - $mounts = Mount::findIn($path); + $mounts = self::$mounts->findIn($path); foreach ($mounts as $mount) { $result[] = $mount->getMountPoint(); } @@ -177,18 +182,34 @@ class Filesystem { * @return \OC\Files\Storage\Storage */ public static function getStorage($mountPoint) { - $mount = Mount::find($mountPoint); + $mount = self::$mounts->find($mountPoint); return $mount->getStorage(); } /** + * @param $id + * @return Mount\Mount[] + */ + public static function getMountByStorageId($id) { + return self::$mounts->findByStorageId($id); + } + + /** + * @param $id + * @return Mount\Mount[] + */ + public static function getMountByNumericId($id) { + return self::$mounts->findByStorageId($id); + } + + /** * resolve a path to a storage and internal path * * @param string $path * @return array consisting of the storage and the internal path */ static public function resolvePath($path) { - $mount = Mount::find($path); + $mount = self::$mounts->find($path); if ($mount) { return array($mount->getStorage(), $mount->getInternalPath($path)); } else { @@ -201,6 +222,7 @@ class Filesystem { return false; } self::$defaultInstance = new View($root); + self::$mounts = new Mount\Manager(); //load custom mount config self::initMountPoints($user); @@ -210,6 +232,10 @@ class Filesystem { return true; } + static public function initMounts(){ + self::$mounts = new Mount\Manager(); + } + /** * Initialize system and personal mount points for a user * @@ -328,7 +354,7 @@ class Filesystem { * clear all mounts and storage backends */ public static function clearMounts() { - Mount::clear(); + self::$mounts->clear(); } /** @@ -339,7 +365,8 @@ class Filesystem { * @param string $mountpoint */ static public function mount($class, $arguments, $mountpoint) { - new Mount($class, $mountpoint, $arguments); + $mount = new Mount\Mount($class, $mountpoint, $arguments); + self::$mounts->addMount($mount); } /** diff --git a/lib/files/mount/manager.php b/lib/files/mount/manager.php new file mode 100644 index 00000000000..25a5fe241cc --- /dev/null +++ b/lib/files/mount/manager.php @@ -0,0 +1,120 @@ +<?php +/** + * Copyright (c) 2012 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\Files\Mount; + +use \OC\Files\Filesystem; + +class Manager { + /** + * @var Mount[] + */ + private $mounts = array(); + + /** + * @param Mount $mount + */ + public function addMount($mount) { + $this->mounts[$mount->getMountPoint()] = $mount; + } + + /** + * Find the mount for $path + * + * @param $path + * @return Mount + */ + public function find($path) { + \OC_Util::setupFS(); + $path = $this->formatPath($path); + if (isset($this->mounts[$path])) { + return $this->mounts[$path]; + } + + \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path)); + $foundMountPoint = ''; + $mountPoints = array_keys($this->mounts); + foreach ($mountPoints as $mountpoint) { + if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) { + $foundMountPoint = $mountpoint; + } + } + if (isset($this->mounts[$foundMountPoint])) { + return $this->mounts[$foundMountPoint]; + } else { + return null; + } + } + + /** + * Find all mounts in $path + * + * @param $path + * @return Mount[] + */ + public function findIn($path) { + \OC_Util::setupFS(); + $path = $this->formatPath($path); + $result = array(); + $pathLength = strlen($path); + $mountPoints = array_keys($this->mounts); + foreach ($mountPoints as $mountPoint) { + if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) { + $result[] = $this->mounts[$mountPoint]; + } + } + return $result; + } + + public function clear() { + $this->mounts = array(); + } + + /** + * Find mounts by storage id + * + * @param string $id + * @return Mount[] + */ + public function findByStorageId($id) { + \OC_Util::setupFS(); + if (strlen($id) > 64) { + $id = md5($id); + } + $result = array(); + foreach ($this->mounts as $mount) { + if ($mount->getStorageId() === $id) { + $result[] = $mount; + } + } + return $result; + } + + /** + * Find mounts by numeric storage id + * + * @param string $id + * @return Mount + */ + public function findByNumericId($id) { + $storageId = \OC\Files\Cache\Storage::getStorageId($id); + return $this->findByStorageId($storageId); + } + + /** + * @param string $path + * @return string + */ + private function formatPath($path) { + $path = Filesystem::normalizePath($path); + if (strlen($path) > 1) { + $path .= '/'; + } + return $path; + } +} diff --git a/lib/files/mount.php b/lib/files/mount/mount.php index 0030d0ee7a6..69b8285ab4c 100644 --- a/lib/files/mount.php +++ b/lib/files/mount/mount.php @@ -6,13 +6,12 @@ * See the COPYING-README file. */ -namespace OC\Files; +namespace OC\Files\Mount; + +use \OC\Files\Filesystem; class Mount { - /** - * @var Mount[] - */ - static private $mounts = array(); + /** * @var \OC\Files\Storage\Storage $storage @@ -33,7 +32,7 @@ class Mount { $arguments = array(); } - $mountpoint = self::formatPath($mountpoint); + $mountpoint = $this->formatPath($mountpoint); if ($storage instanceof \OC\Files\Storage\Storage) { $this->class = get_class($storage); $this->storage = $storage; @@ -46,8 +45,6 @@ class Mount { $this->arguments = $arguments; } $this->mountPoint = $mountpoint; - - self::$mounts[$this->mountPoint] = $this; } /** @@ -58,6 +55,8 @@ class Mount { } /** + * create the storage that is mounted + * * @return \OC\Files\Storage\Storage */ private function createStorage() { @@ -121,103 +120,11 @@ class Mount { * @param string $path * @return string */ - private static function formatPath($path) { + private function formatPath($path) { $path = Filesystem::normalizePath($path); if (strlen($path) > 1) { $path .= '/'; } return $path; } - - /** - * Find the mount for $path - * - * @param $path - * @return Mount - */ - public static function find($path) { - \OC_Util::setupFS(); - $path = self::formatPath($path); - if (isset(self::$mounts[$path])) { - return self::$mounts[$path]; - } - - \OC_Hook::emit('OC_Filesystem', 'get_mountpoint', array('path' => $path)); - $foundMountPoint = ''; - $mountPoints = array_keys(self::$mounts); - foreach ($mountPoints as $mountpoint) { - if (strpos($path, $mountpoint) === 0 and strlen($mountpoint) > strlen($foundMountPoint)) { - $foundMountPoint = $mountpoint; - } - } - if (isset(self::$mounts[$foundMountPoint])) { - return self::$mounts[$foundMountPoint]; - } else { - return null; - } - } - - /** - * Find all mounts in $path - * - * @param $path - * @return Mount[] - */ - public static function findIn($path) { - \OC_Util::setupFS(); - $path = self::formatPath($path); - $result = array(); - $pathLength = strlen($path); - $mountPoints = array_keys(self::$mounts); - foreach ($mountPoints as $mountPoint) { - if (substr($mountPoint, 0, $pathLength) === $path and strlen($mountPoint) > $pathLength) { - $result[] = self::$mounts[$mountPoint]; - } - } - return $result; - } - - public static function clear() { - self::$mounts = array(); - } - - /** - * Find mounts by storage id - * - * @param string $id - * @return Mount[] - */ - public static function findByStorageId($id) { - \OC_Util::setupFS(); - if (strlen($id) > 64) { - $id = md5($id); - } - $result = array(); - foreach (self::$mounts as $mount) { - if ($mount->getStorageId() === $id) { - $result[] = $mount; - } - } - return $result; - } - - /** - * Find mounts by numeric storage id - * - * @param string $id - * @return Mount - */ - public static function findByNumericId($id) { - $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*storages` WHERE `numeric_id` = ?'); - $result = $query->execute(array($id))->fetchOne(); - if ($result) { - $id = $result; - foreach (self::$mounts as $mount) { - if ($mount->getStorageId() === $id) { - return $mount; - } - } - } - return false; - } } diff --git a/lib/files/view.php b/lib/files/view.php index 0da104c107e..f89b7f66ffd 100644 --- a/lib/files/view.php +++ b/lib/files/view.php @@ -977,7 +977,7 @@ class View { */ public function getPath($id) { list($storage, $internalPath) = Cache\Cache::getById($id); - $mounts = Mount::findByStorageId($storage); + $mounts = Filesystem::getMountByStorageId($storage); foreach ($mounts as $mount) { /** * @var \OC\Files\Mount $mount |