add option to get raw size (without submounts) from fileinfo

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2019-02-27 15:35:44 +01:00
parent 407c7c2ad3
commit 8fc47c6f00
No known key found for this signature in database
GPG Key ID: 42B69D8A64526EFB
9 changed files with 32 additions and 16 deletions

View File

@ -82,8 +82,8 @@ class TrashItem implements ITrashItem {
return $this->fileInfo->getEtag(); return $this->fileInfo->getEtag();
} }
public function getSize() { public function getSize($includeMounts = true) {
return $this->fileInfo->getSize(); return $this->fileInfo->getSize($includeMounts);
} }
public function getMtime() { public function getMtime() {
@ -133,7 +133,7 @@ class TrashItem implements ITrashItem {
public function isReadable() { public function isReadable() {
return $this->fileInfo->isReadable(); return $this->fileInfo->isReadable();
} }
public function isUpdateable() { public function isUpdateable() {
return $this->fileInfo->isUpdateable(); return $this->fileInfo->isUpdateable();
} }

View File

@ -80,6 +80,13 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
private $subMountsUsed = false; private $subMountsUsed = false;
/**
* The size of the file/folder without any sub mount
*
* @var int
*/
private $rawSize = 0;
/** /**
* @param string|boolean $path * @param string|boolean $path
* @param Storage\Storage $storage * @param Storage\Storage $storage
@ -95,6 +102,7 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
$this->data = $data; $this->data = $data;
$this->mount = $mount; $this->mount = $mount;
$this->owner = $owner; $this->owner = $owner;
$this->rawSize = $this->data['size'] ?? 0;
} }
public function offsetSet($offset, $value) { public function offsetSet($offset, $value) {
@ -194,9 +202,13 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
/** /**
* @return int * @return int
*/ */
public function getSize() { public function getSize($includeMounts = true) {
$this->updateEntryfromSubMounts(); if ($includeMounts) {
return isset($this->data['size']) ? 0 + $this->data['size'] : 0; $this->updateEntryfromSubMounts();
return isset($this->data['size']) ? 0 + $this->data['size'] : 0;
} else {
return $this->rawSize;
}
} }
/** /**

View File

@ -214,7 +214,7 @@ class LazyRoot implements IRootFolder {
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function getSize() { public function getSize($includeMounts = true) {
return $this->__call(__FUNCTION__, func_get_args()); return $this->__call(__FUNCTION__, func_get_args());
} }

View File

@ -190,12 +190,13 @@ class Node implements \OCP\Files\Node {
} }
/** /**
* @param bool $includeMounts
* @return int * @return int
* @throws InvalidPathException * @throws InvalidPathException
* @throws NotFoundException * @throws NotFoundException
*/ */
public function getSize() { public function getSize($includeMounts = true) {
return $this->getFileInfo()->getSize(); return $this->getFileInfo()->getSize($includeMounts);
} }
/** /**

View File

@ -66,9 +66,9 @@ class NonExistingFile extends File {
} }
} }
public function getSize() { public function getSize($includeMounts = true) {
if ($this->fileInfo) { if ($this->fileInfo) {
return parent::getSize(); return parent::getSize($includeMounts);
} else { } else {
throw new NotFoundException(); throw new NotFoundException();
} }

View File

@ -67,9 +67,9 @@ class NonExistingFolder extends Folder {
} }
} }
public function getSize() { public function getSize($includeMounts = true) {
if ($this->fileInfo) { if ($this->fileInfo) {
return parent::getSize(); return parent::getSize($includeMounts);
} else { } else {
throw new NotFoundException(); throw new NotFoundException();
} }

View File

@ -282,9 +282,10 @@ class Root extends Folder implements IRootFolder {
} }
/** /**
* @param bool $includeMounts
* @return int * @return int
*/ */
public function getSize() { public function getSize($includeMounts = true) {
return null; return null;
} }

View File

@ -81,10 +81,11 @@ interface FileInfo {
/** /**
* Get the size in bytes for the file or folder * Get the size in bytes for the file or folder
* *
* @param bool $includeMounts whether or not to include the size of any sub mounts, since 16.0.0
* @return int * @return int
* @since 7.0.0 * @since 7.0.0
*/ */
public function getSize(); public function getSize($includeMounts = true);
/** /**
* Get the last modified date as timestamp for the file or folder * Get the last modified date as timestamp for the file or folder

View File

@ -136,12 +136,13 @@ interface Node extends FileInfo {
/** /**
* Get the size of the file or folder in bytes * Get the size of the file or folder in bytes
* *
* @param bool $includeMounts
* @return int * @return int
* @throws InvalidPathException * @throws InvalidPathException
* @throws NotFoundException * @throws NotFoundException
* @since 6.0.0 * @since 6.0.0
*/ */
public function getSize(); public function getSize($includeMounts = true);
/** /**
* Get the Etag of the file or folder * Get the Etag of the file or folder