]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix calculating size for empty folders
authorMichael Gapczynski <mtgap@owncloud.com>
Sun, 28 Jul 2013 20:14:49 +0000 (16:14 -0400)
committerMichael Gapczynski <mtgap@owncloud.com>
Fri, 2 Aug 2013 13:58:10 +0000 (09:58 -0400)
Conflicts:
lib/files/cache/cache.php

lib/files/cache/cache.php

index 7b38f1290dd829e5c5b6a135cb594ecc6a2ff801..f605d72a6b398f4559a2bab2f2677a976d01f1bd 100644 (file)
@@ -499,27 +499,24 @@ class Cache {
         * @return int
         */
        public function calculateFolderSize($path) {
-               $id = $this->getId($path);
-               if ($id === -1) {
-                       return 0;
-               }
-               $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?');
-               $result = $query->execute(array($id, $this->numericId));
                $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;
        }