summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-04-20 18:36:23 +0200
committerVincent Petry <pvince81@owncloud.com>2015-04-20 18:36:23 +0200
commita13088818a73ecdf6f7d6600c011e0fa49054b51 (patch)
tree1302033aec7a663cf9d8a12e61f17db56701641a
parentfe2cbc37951ea25e3d545d78289c64542ef58eca (diff)
parent32995ace1c1ea453e08b1afd6f6d43cf68f2e3b1 (diff)
downloadnextcloud-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.php14
-rw-r--r--lib/private/files/cache/scanner.php17
-rw-r--r--lib/private/files/storage/common.php25
-rw-r--r--lib/private/files/storage/storage.php6
-rw-r--r--lib/private/files/storage/wrapper/encryption.php34
-rw-r--r--lib/private/files/storage/wrapper/wrapper.php8
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);
+ }
}