From e2f04b3b429b42975f4457b77ca720396506e512 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Thu, 25 Jul 2013 16:01:37 +0200
Subject: [PATCH] use storage wrapper for quota instead of a filesystem proxy

---
 lib/util.php | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/lib/util.php b/lib/util.php
index 2586ad2832..4c878f8b2f 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -46,6 +46,16 @@ class OC_Util {
 		}
 
 		if( $user != "" ) { //if we aren't logged in, there is no use to set up the filesystem
+			$quota = self::getUserQuota($user);
+			if ($quota !== \OC\Files\SPACE_UNLIMITED) {
+				\OC\Files\Filesystem::addStorageWrapper(function($mountPoint, $storage) use ($quota, $user) {
+					if ($mountPoint === '/' . $user . '/'){
+						return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota));
+					} else {
+						return $storage;
+					}
+				});
+			}
 			$user_dir = '/'.$user.'/files';
 			$user_root = OC_User::getHome($user);
 			$userdirectory = $user_root . '/files';
@@ -55,9 +65,7 @@ class OC_Util {
 			//jail the user into his "home" directory
 			\OC\Files\Filesystem::init($user, $user_dir);
 
-			$quotaProxy=new OC_FileProxy_Quota();
 			$fileOperationProxy = new OC_FileProxy_FileOperations();
-			OC_FileProxy::register($quotaProxy);
 			OC_FileProxy::register($fileOperationProxy);
 
 			OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir));
@@ -65,6 +73,18 @@ class OC_Util {
 		return true;
 	}
 
+	public static function getUserQuota($user){
+		$userQuota = OC_Preferences::getValue($user, 'files', 'quota', 'default');
+		if($userQuota === 'default') {
+			$userQuota = OC_AppConfig::getValue('files', 'default_quota', 'none');
+		}
+		if($userQuota === 'none') {
+			return \OC\Files\SPACE_UNLIMITED;
+		}else{
+			return OC_Helper::computerFileSize($userQuota);
+		}
+	}
+
 	public static function tearDownFS() {
 		\OC\Files\Filesystem::tearDown();
 		self::$fsSetup=false;
-- 
GitLab