From f2ca7023e1ece60dc3cebc5cd770c7373f53c93a Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Tue, 1 Jan 2013 11:19:33 -0500
Subject: [PATCH] Fix Shared root problems with Watcher and Quota proxy

---
 apps/files_sharing/lib/cache.php         |  3 +++
 apps/files_sharing/lib/sharedstorage.php | 13 +++++++++++++
 lib/fileproxy/quota.php                  |  4 +++-
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index a22e7af7f5..60f29ce5ee 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -169,6 +169,9 @@ class Shared_Cache extends Cache {
 	 * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
 	 */
 	public function getStatus($file) {
+		if ($file == '') {
+			return self::COMPLETE;
+		}
 		if ($cache = $this->getSourceCache($file)) {
 			return $cache->getStatus($this->files[$file]);
 		}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index cb9b36482f..3a1d7ef101 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -364,6 +364,9 @@ class Shared extends \OC\Files\Storage\Common {
 	}
 
 	public function free_space($path) {
+		if ($path == '') {
+			return -1;
+		}
 		$source = $this->getSourcePath($path);
 		if ($source) {
 			list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
@@ -391,6 +394,13 @@ class Shared extends \OC\Files\Storage\Common {
 		\OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
 	}
 
+	public function hasUpdated($path, $time) {
+		if ($path == '') {
+			return false;
+		}
+		return $this->filemtime($path) > $time;
+	}
+
 	public function getCache() {
 		return new \OC\Files\Cache\Shared_Cache($this);
 	}
@@ -404,6 +414,9 @@ class Shared extends \OC\Files\Storage\Common {
 	}
 
 	public function getOwner($path) {
+		if ($path == '') {
+			return false;
+		}
 		$source = $this->getFile($path);
 		if ($source) {
 			return $source['uid_owner'];
diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php
index 80270728ab..c333efa6cd 100644
--- a/lib/fileproxy/quota.php
+++ b/lib/fileproxy/quota.php
@@ -63,6 +63,9 @@ class OC_FileProxy_Quota extends OC_FileProxy{
 		 */
 		list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
 		$owner=$storage->getOwner($internalPath);
+		if (!$owner) {
+			return -1;
+		}
 
 		$totalSpace=$this->getQuota($owner);
 		if($totalSpace==-1) {
@@ -73,7 +76,6 @@ class OC_FileProxy_Quota extends OC_FileProxy{
 
 		$rootInfo=$view->getFileInfo('/');
 		$usedSpace=isset($rootInfo['size'])?$rootInfo['size']:0;
-		$usedSpace=isset($sharedInfo['size'])?$usedSpace-$sharedInfo['size']:$usedSpace;
 		return $totalSpace-$usedSpace;
 	}
 	
-- 
GitLab