diff options
author | Daniel Kesselberg <mail@danielkesselberg.de> | 2018-10-01 20:18:36 +0200 |
---|---|---|
committer | Daniel Kesselberg <mail@danielkesselberg.de> | 2018-10-01 20:18:36 +0200 |
commit | 5cf38254bbf8d689a3205a098405e9e9120ec01d (patch) | |
tree | 39770ccab0034a0cf3cbaa7ea5f6f374fdcce29d /apps/files_external/lib/Lib | |
parent | 67d5380b91a1c970a62d04dc82e1ccae10d0d862 (diff) | |
download | nextcloud-server-5cf38254bbf8d689a3205a098405e9e9120ec01d.tar.gz nextcloud-server-5cf38254bbf8d689a3205a098405e9e9120ec01d.zip |
Use helper method for content length and last modified
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Diffstat (limited to 'apps/files_external/lib/Lib')
-rw-r--r-- | apps/files_external/lib/Lib/Storage/AmazonS3.php | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php index 94ada029809..c1b68abf7fb 100644 --- a/apps/files_external/lib/Lib/Storage/AmazonS3.php +++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php @@ -61,10 +61,14 @@ class AmazonS3 extends \OC\Files\Storage\Common { /** @var CappedMemoryCache|Result[] */ private $objectCache; + /** @var CappedMemoryCache|array */ + private $filesCache; + public function __construct($parameters) { parent::__construct($parameters); $this->parseParams($parameters); $this->objectCache = new CappedMemoryCache(); + $this->filesCache = new CappedMemoryCache(); } /** @@ -302,10 +306,11 @@ class AmazonS3 extends \OC\Files\Storage\Common { ); $files[] = $file; - $this->objectCache->set($file, [ + // store this information for later usage + $this->filesCache[$file] = [ 'ContentLength' => $object['Size'], 'LastModified' => (string)$object['LastModified'], - ]); + ]; } } } @@ -321,20 +326,14 @@ class AmazonS3 extends \OC\Files\Storage\Common { $path = $this->normalizePath($path); try { - $stat = array(); + $stat = []; if ($this->is_dir($path)) { //folders don't really exist $stat['size'] = -1; //unknown $stat['mtime'] = time() - $this->rescanDelay * 1000; } else { - $result = $this->headObject($path); - - $stat['size'] = $result['ContentLength'] ? $result['ContentLength'] : 0; - if (isset($result['Metadata']['lastmodified'])) { - $stat['mtime'] = strtotime($result['Metadata']['lastmodified']); - } else { - $stat['mtime'] = strtotime($result['LastModified']); - } + $stat['size'] = $this->getContentLength($path); + $stat['mtime'] = strtotime($this->getLastModified($path)); } $stat['atime'] = time(); @@ -345,6 +344,50 @@ class AmazonS3 extends \OC\Files\Storage\Common { } } + /** + * Return content length for object + * + * When the information is already present (e.g. opendir has been called before) + * this value is return. Otherwise a headObject is emitted. + * + * @param $path + * @return int|mixed + */ + private function getContentLength($path) { + if (isset($this->filesCache[$path])) { + return $this->filesCache[$path]['ContentLength']; + } + + $result = $this->headObject($path); + if (isset($result['ContentLength'])) { + return $result['ContentLength']; + } + + return 0; + } + + /** + * Return last modified for object + * + * When the information is already present (e.g. opendir has been called before) + * this value is return. Otherwise a headObject is emitted. + * + * @param $path + * @return mixed|string + */ + private function getLastModified($path) { + if (isset($this->filesCache[$path])) { + return $this->filesCache[$path]['LastModified']; + } + + $result = $this->headObject($path); + if (isset($result['LastModified'])) { + return $result['LastModified']; + } + + return 'now'; + } + public function is_dir($path) { $path = $this->normalizePath($path); try { |