diff options
author | Björn Schießle <schiessle@owncloud.com> | 2013-04-16 13:51:53 +0200 |
---|---|---|
committer | Björn Schießle <schiessle@owncloud.com> | 2013-04-17 10:42:59 +0200 |
commit | a3999036f720e73727dac07a337578f3e25f92aa (patch) | |
tree | f090be3d862d23ae8119fa08f49cefef82563b3c /apps | |
parent | f3c06ae4e41521f5f2439300f6ecb263cd9786ed (diff) | |
download | nextcloud-server-a3999036f720e73727dac07a337578f3e25f92aa.tar.gz nextcloud-server-a3999036f720e73727dac07a337578f3e25f92aa.zip |
improved free space calculation if no quota is set, discussed in #2936
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_trashbin/lib/trash.php | 66 |
1 files 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); @@ -353,13 +334,52 @@ class Trashbin { } /** + * 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`=?'); |