From 404773940daf9c5a686b92d65dd39fb44d766050 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 5 Mar 2015 11:49:15 +0100 Subject: [PATCH] Detect storage full when doing cross storage copy/move --- lib/private/files/storage/wrapper/quota.php | 39 +++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/private/files/storage/wrapper/quota.php b/lib/private/files/storage/wrapper/quota.php index 3c0fda98dad..92d749a814f 100644 --- a/lib/private/files/storage/wrapper/quota.php +++ b/lib/private/files/storage/wrapper/quota.php @@ -55,9 +55,14 @@ class Quota extends Wrapper { /** * @param string $path + * @param \OC\Files\Storage\Storage $storage */ - protected function getSize($path) { - $cache = $this->getCache(); + protected function getSize($path, $storage = null) { + if (is_null($storage)) { + $cache = $this->getCache(); + } else { + $cache = $storage->getCache(); + } $data = $cache->get($path); if (is_array($data) and isset($data['size'])) { return $data['size']; @@ -141,4 +146,34 @@ class Quota extends Wrapper { return $source; } } + + /** + * @param \OCP\Files\Storage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function copyFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath) { + $free = $this->free_space(''); + if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) { + return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); + } else { + return false; + } + } + + /** + * @param \OCP\Files\Storage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath) { + $free = $this->free_space(''); + if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) { + return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); + } else { + return false; + } + } } -- 2.39.5