]> source.dussan.org Git - nextcloud-server.git/commitdiff
improved free space calculation if no quota is set, discussed in #2936
authorBjörn Schießle <schiessle@owncloud.com>
Tue, 16 Apr 2013 11:51:53 +0000 (13:51 +0200)
committerBjörn Schießle <schiessle@owncloud.com>
Tue, 16 Apr 2013 11:51:53 +0000 (13:51 +0200)
apps/files_trashbin/lib/trash.php

index 13823ecbba3ea8c2b3ac567b19488952ce126710..f0b56eef01403ce3bf12493916614b7070be6f73 100644 (file)
@@ -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`=?');