diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-04-20 18:36:23 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-04-20 18:36:23 +0200 |
commit | a13088818a73ecdf6f7d6600c011e0fa49054b51 (patch) | |
tree | 1302033aec7a663cf9d8a12e61f17db56701641a | |
parent | fe2cbc37951ea25e3d545d78289c64542ef58eca (diff) | |
parent | 32995ace1c1ea453e08b1afd6f6d43cf68f2e3b1 (diff) | |
download | nextcloud-server-a13088818a73ecdf6f7d6600c011e0fa49054b51.tar.gz nextcloud-server-a13088818a73ecdf6f7d6600c011e0fa49054b51.zip |
Merge pull request #15748 from owncloud/fixing-enc-filesize-once-more
Introduce Storage::getData() to allow storage implementations more contr...
-rw-r--r-- | apps/files_external/lib/dropbox.php | 14 | ||||
-rw-r--r-- | lib/private/files/cache/scanner.php | 17 | ||||
-rw-r--r-- | lib/private/files/storage/common.php | 25 | ||||
-rw-r--r-- | lib/private/files/storage/storage.php | 6 | ||||
-rw-r--r-- | lib/private/files/storage/wrapper/encryption.php | 34 | ||||
-rw-r--r-- | lib/private/files/storage/wrapper/wrapper.php | 8 |
6 files changed, 78 insertions, 26 deletions
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index b685f635aea..78219f8f06e 100644 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -77,7 +77,7 @@ class Dropbox extends \OC\Files\Storage\Common { * @return mixed directory contents if $list is true, file metadata if $list is * false, null if the file doesn't exist or "false" if the operation failed */ - private function getMetaData($path, $list = false) { + private function getDropBoxMetaData($path, $list = false) { $path = $this->root.$path; if ( ! $list && isset($this->metaData[$path])) { return $this->metaData[$path]; @@ -150,7 +150,7 @@ class Dropbox extends \OC\Files\Storage\Common { } public function opendir($path) { - $contents = $this->getMetaData($path, true); + $contents = $this->getDropBoxMetaData($path, true); if ($contents !== false) { $files = array(); foreach ($contents as $file) { @@ -163,7 +163,7 @@ class Dropbox extends \OC\Files\Storage\Common { } public function stat($path) { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { $stat['size'] = $metaData['bytes']; $stat['atime'] = time(); @@ -177,7 +177,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($path == '' || $path == '/') { return 'dir'; } else { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { if ($metaData['is_dir'] == 'true') { return 'dir'; @@ -193,7 +193,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($path == '' || $path == '/') { return true; } - if ($this->getMetaData($path)) { + if ($this->getDropBoxMetaData($path)) { return true; } return false; @@ -213,7 +213,7 @@ class Dropbox extends \OC\Files\Storage\Common { public function rename($path1, $path2) { try { // overwrite if target file exists and is not a directory - $destMetaData = $this->getMetaData($path2); + $destMetaData = $this->getDropBoxMetaData($path2); if (isset($destMetaData) && $destMetaData !== false && !$destMetaData['is_dir']) { $this->unlink($path2); } @@ -297,7 +297,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($this->filetype($path) == 'dir') { return 'httpd/unix-directory'; } else { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { return $metaData['mime_type']; } diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php index 0878b6c60a0..d253afbfa1d 100644 --- a/lib/private/files/cache/scanner.php +++ b/lib/private/files/cache/scanner.php @@ -103,23 +103,10 @@ class Scanner extends BasicEmitter { * @return array an array of metadata of the file */ public function getData($path) { - $permissions = $this->storage->getPermissions($path); - if (!$permissions & \OCP\PERMISSION_READ) { - //cant read, nothing we can do + $data = $this->storage->getMetaData($path); + if (is_null($data)) { \OCP\Util::writeLog('OC\Files\Cache\Scanner', "!!! Path '$path' is not accessible or present !!!", \OCP\Util::DEBUG); - return null; } - $data = array(); - $data['mimetype'] = $this->storage->getMimeType($path); - $data['mtime'] = $this->storage->filemtime($path); - if ($data['mimetype'] == 'httpd/unix-directory') { - $data['size'] = -1; //unknown - } else { - $data['size'] = $this->storage->filesize($path); - } - $data['etag'] = $this->storage->getETag($path); - $data['storage_mtime'] = $data['mtime']; - $data['permissions'] = $permissions; return $data; } diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 66ed713e22d..06c61fe6931 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -580,4 +580,29 @@ abstract class Common implements Storage { } return $result; } + + /** + * @inheritdoc + */ + public function getMetaData($path) { + $permissions = $this->getPermissions($path); + if (!$permissions & \OCP\Constants::PERMISSION_READ) { + //cant read, nothing we can do + return null; + } + + $data = []; + $data['mimetype'] = $this->getMimeType($path); + $data['mtime'] = $this->filemtime($path); + if ($data['mimetype'] == 'httpd/unix-directory') { + $data['size'] = -1; //unknown + } else { + $data['size'] = $this->filesize($path); + } + $data['etag'] = $this->getETag($path); + $data['storage_mtime'] = $data['mtime']; + $data['permissions'] = $this->getPermissions($path); + + return $data; + } } diff --git a/lib/private/files/storage/storage.php b/lib/private/files/storage/storage.php index 4b75fa9da89..07b5633c908 100644 --- a/lib/private/files/storage/storage.php +++ b/lib/private/files/storage/storage.php @@ -70,4 +70,10 @@ interface Storage extends \OCP\Files\Storage { */ public function getStorageCache(); + /** + * @param string $path + * @return array + */ + public function getMetaData($path); + } diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php index 01bd861e3a2..e5c96286f09 100644 --- a/lib/private/files/storage/wrapper/encryption.php +++ b/lib/private/files/storage/wrapper/encryption.php @@ -23,6 +23,8 @@ namespace OC\Files\Storage\Wrapper; use OC\Encryption\Exceptions\ModuleDoesNotExistsException; +use OC\Encryption\File; +use OC\Files\Filesystem; use OC\Files\Storage\LocalTempFileTrait; use OCP\Files\Mount\IMountPoint; @@ -48,7 +50,7 @@ class Encryption extends Wrapper { /** @var array */ private $unencryptedSize; - /** @var \OC\Encryption\File */ + /** @var File */ private $fileHelper; /** @var IMountPoint */ @@ -59,7 +61,7 @@ class Encryption extends Wrapper { * @param \OC\Encryption\Manager $encryptionManager * @param \OC\Encryption\Util $util * @param \OC\Log $logger - * @param \OC\Encryption\File $fileHelper + * @param File $fileHelper * @param string $uid user who perform the read/write operation (null for public access) */ public function __construct( @@ -67,7 +69,7 @@ class Encryption extends Wrapper { \OC\Encryption\Manager $encryptionManager = null, \OC\Encryption\Util $util = null, \OC\Log $logger = null, - \OC\Encryption\File $fileHelper = null, + File $fileHelper = null, $uid = null ) { @@ -111,6 +113,30 @@ class Encryption extends Wrapper { } /** + * @param string $path + * @return array + */ + public function getMetaData($path) { + $data = $this->storage->getMetaData($path); + if (is_null($data)) { + return null; + } + $fullPath = $this->getFullPath($path); + + if (isset($this->unencryptedSize[$fullPath])) { + $data['encrypted'] = true; + $data['size'] = $this->unencryptedSize[$fullPath]; + } else { + $info = $this->getCache()->get($path); + if (isset($info['fileid']) && $info['encrypted']) { + $data['encrypted'] = true; + $data['size'] = $info['size']; + } + } + + return $data; + } + /** * see http://php.net/manual/en/function.file_get_contents.php * * @param string $path @@ -360,7 +386,7 @@ class Encryption extends Wrapper { * @return string full path including mount point */ protected function getFullPath($path) { - return \OC\Files\Filesystem::normalizePath($this->mountPoint . '/' . $path); + return Filesystem::normalizePath($this->mountPoint . '/' . $path); } /** diff --git a/lib/private/files/storage/wrapper/wrapper.php b/lib/private/files/storage/wrapper/wrapper.php index 2552c926e02..f3dc09db138 100644 --- a/lib/private/files/storage/wrapper/wrapper.php +++ b/lib/private/files/storage/wrapper/wrapper.php @@ -525,4 +525,12 @@ class Wrapper implements \OC\Files\Storage\Storage { public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath) { return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); } + + /** + * @param string $path + * @return array + */ + public function getMetaData($path) { + return $this->storage->getMetaData($path); + } } |