aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/files/cache/cache.php25
-rw-r--r--tests/lib/files/cache/cache.php11
2 files changed, 36 insertions, 0 deletions
diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 6604525477b..734890329ae 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -309,6 +309,31 @@ class Cache {
}
/**
+ * get the size of a folder and set it in the cache
+ *
+ * @param string $path
+ * @return int
+ */
+ public function calculateFolderSize($path) {
+ $id = $this->getId($path);
+ $query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*filecache` WHERE `parent` = ? AND `storage` = ?');
+ $result = $query->execute(array($id, $this->storageId));
+ $totalSize = 0;
+ while ($row = $result->fetchRow()) {
+ $size = (int)$row['size'];
+ if ($size === -1) {
+ $totalSize = -1;
+ break;
+ } else {
+ $totalSize += $size;
+ }
+ }
+
+ $this->update($id, array('size' => $totalSize));
+ return $totalSize;
+ }
+
+ /**
* get all file ids on the files on the storage
*
* @return int[]
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 5a8d79b902c..57a154d295c 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -99,6 +99,17 @@ class Cache extends \UnitTestCase {
$this->assertEqual($value, $cachedData[$name]);
}
}
+
+ $file4 = 'folder/unkownSize';
+ $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(-1, $this->cache->calculateFolderSize($file1));
+
+ $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file');
+ $this->cache->put($file4, $fileData['unkownSize']);
+
+ $this->assertEquals(1025, $this->cache->calculateFolderSize($file1));
}
function testStatus() {