From 8687e0d346e7dad6890982c1a7b08befd8998aeb Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Wed, 21 Nov 2012 23:18:58 +0100
Subject: [PATCH] add Scanner->backgroundScan

---
 lib/files/cache/scanner.php       | 10 ++++++++++
 tests/lib/files/cache/scanner.php | 22 ++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index e650a220f5..3c83b6528a 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -121,4 +121,14 @@ class Scanner {
 		}
 		return $size;
 	}
+
+	/**
+	 * walk over any folders that are not fully scanned yet and scan them
+	 */
+	public function backgroundScan() {
+		while ($path = $this->cache->getIncomplete()) {
+			$this->scan($path);
+			$this->cache->correctFolderSize($path);
+		}
+	}
 }
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index c53da92727..6d26150d82 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -104,6 +104,28 @@ class Scanner extends \UnitTestCase {
 		$this->assertNotEqual($cachedDataFolder['size'], -1);
 	}
 
+	function testBackgroundScan(){
+		$this->fillTestFolders();
+		$this->storage->mkdir('folder2');
+		$this->storage->file_put_contents('folder2/bar.txt', 'foobar');
+
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+		$this->assertFalse($this->cache->inCache('folder/bar.txt'));
+		$this->assertFalse($this->cache->inCache('folder/2bar.txt'));
+		$cachedData = $this->cache->get('');
+		$this->assertEquals(-1, $cachedData['size']);
+
+		$this->scanner->backgroundScan();
+
+		$this->assertTrue($this->cache->inCache('folder/bar.txt'));
+		$this->assertTrue($this->cache->inCache('folder/bar.txt'));
+
+		$cachedData = $this->cache->get('');
+		$this->assertnotEquals(-1, $cachedData['size']);
+
+		$this->assertFalse($this->cache->getIncomplete());
+	}
+
 	function setUp() {
 		$this->storage = new \OC\Files\Storage\Temporary(array());
 		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);
-- 
GitLab