From dd4e33fe6b1cf9feccaeae33c81fc8b08fb24d4d Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Sun, 28 Jul 2013 16:14:49 -0400
Subject: [PATCH] Fix calculating size for empty folders

---
 lib/files/cache/cache.php | 35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 3818fdbd84..458df56141 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -485,27 +485,24 @@ class Cache {
 	 * @return int
 	 */
 	public function calculateFolderSize($path) {
-		$id = $this->getId($path);
-		if ($id === -1) {
-			return 0;
-		}
-		$sql = 'SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?';
-		$result = \OC_DB::executeAudited($sql, array($id, $this->getNumericStorageId()));
 		$totalSize = 0;
-		$hasChilds = 0;
-		while ($row = $result->fetchRow()) {
-			$hasChilds = true;
-			$size = (int)$row['size'];
-			if ($size === -1) {
-				$totalSize = -1;
-				break;
-			} else {
-				$totalSize += $size;
+		$entry = $this->get($path);
+		if ($entry && $entry['mimetype'] === 'httpd/unix-directory') {
+			$id = $entry['fileid'];
+			$sql = 'SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?';
+			$result = \OC_DB::executeAudited($sql, array($id, $this->getNumericStorageId()));
+			while ($row = $result->fetchRow()) {
+				$size = (int)$row['size'];
+				if ($size === -1) {
+					$totalSize = -1;
+					break;
+				} else {
+					$totalSize += $size;
+				}
+			}
+			if ($entry['size'] !== $totalSize) {
+				$this->update($id, array('size' => $totalSize));
 			}
-		}
-
-		if ($hasChilds) {
-			$this->update($id, array('size' => $totalSize));
 		}
 		return $totalSize;
 	}
-- 
GitLab