From a3999036f720e73727dac07a337578f3e25f92aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Tue, 16 Apr 2013 13:51:53 +0200 Subject: [PATCH] improved free space calculation if no quota is set, discussed in #2936 --- apps/files_trashbin/lib/trash.php | 66 ++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php index 13823ecbba3..f0b56eef014 100644 --- a/apps/files_trashbin/lib/trash.php +++ b/apps/files_trashbin/lib/trash.php @@ -104,27 +104,8 @@ class Trashbin { } else { \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin', \OC_log::ERROR); } - - // get available disk space for user - $quota = \OC_Preferences::getValue($user, 'files', 'quota'); - if ( $quota === null || $quota === 'default') { - $quota = \OC_Appconfig::getValue('files', 'default_quota'); - } - if ( $quota === null || $quota === 'none' ) { - $quota = \OC\Files\Filesystem::free_space('/') / count(\OCP\User::getUsers()); - } else { - $quota = \OCP\Util::computerFileSize($quota); - } - - // calculate available space for trash bin - $rootInfo = $view->getFileInfo('/files'); - $free = $quota-$rootInfo['size']; // remaining free space for user - if ( $free > 0 ) { - $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions - } else { - $availableSpace = $free-$trashbinSize; - } - $trashbinSize -= self::expire($availableSpace); + + $trashbinSize -= self::expire($trashbinSize); self::setTrashbinSize($user, $trashbinSize); @@ -352,14 +333,53 @@ class Trashbin { return false; } + /** + * calculate remaining free space for trash bin + * + * @param $trashbinSize current size of the trash bin + * @return available free space for trash bin + */ + private static function calculateFreeSpace($trashbinSize) { + $softQuota = true; + $user = \OCP\User::getUser(); + $quota = \OC_Preferences::getValue($user, 'files', 'quota'); + $view = new \OC\Files\View('/'.$user); + if ( $quota === null || $quota === 'default') { + $quota = \OC_Appconfig::getValue('files', 'default_quota'); + } + if ( $quota === null || $quota === 'none' ) { + $quota = \OC\Files\Filesystem::free_space('/'); + $softQuota = false; + } else { + $quota = \OCP\Util::computerFileSize($quota); + } + + // calculate available space for trash bin + // subtract size of files and current trash bin size from quota + if ($softQuota) { + $rootInfo = $view->getFileInfo('/files/'); + $free = $quota-$rootInfo['size']; // remaining free space for user + if ( $free > 0 ) { + $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions + } else { + $availableSpace = $free-$trashbinSize; + } + } else { + $availableSpace = $quota; + } + + return $availableSpace; + } + /** * clean up the trash bin - * @param max. available disk space for trashbin + * @param current size of the trash bin */ - private static function expire($availableSpace) { + private static function expire($trashbinSize) { $user = \OCP\User::getUser(); $view = new \OC\Files\View('/'.$user); + $availableSpace = self::calculateFreeSpace($trashbinSize); $size = 0; $query = \OC_DB::prepare('SELECT `location`,`type`,`id`,`timestamp` FROM `*PREFIX*files_trash` WHERE `user`=?'); -- 2.39.5