diff --git a/lib/files/cache/cache.php b/lib/files/cache/cache.php
index 79673771e5e5a7a7a6f6302273a6a2221d062b45..5ef49246ea5bbacae04b8c3048beb4cb09c34e8d 100644
--- a/lib/files/cache/cache.php
+++ b/lib/files/cache/cache.php
@@ -9,6 +9,11 @@
 namespace OC\Files\Cache;
 
 class Cache {
+	const NOT_FOUND = 0;
+	const PARTIAL = 1; //only partial data available, file not cached in the database
+	const SHALLOW = 2; //folder in cache, but not all child files are completely scanned
+	const COMPLETE = 3;
+
 	/**
 	 * @var \OC\Files\Storage\Storage
 	 */
@@ -233,4 +238,28 @@ class Cache {
 		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache` WHERE storage=?');
 		$query->execute(array($this->storageId));
 	}
+
+	/**
+	 * @param string $file
+	 *
+	 * @return int, Cache::NOT_FOUND, Cache::PARTIAL, Cache::SHALLOW or Cache::COMPLETE
+	 */
+	public function getStatus($file) {
+		$pathHash = md5($file);
+		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*filecache` WHERE `storage` = ? AND `path_hash` = ?');
+		$result = $query->execute(array($this->storageId, $pathHash));
+		if ($row = $result->fetchRow()) {
+			if ((int)$row['size'] === -1) {
+				return self::SHALLOW;
+			} else {
+				return self::COMPLETE;
+			}
+		} else {
+			if (isset($this->partial[$file])) {
+				return self::PARTIAL;
+			} else {
+				return self::NOT_FOUND;
+			}
+		}
+	}
 }
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 8cedadbf19ae32c8c76a6748ffea35c03bddcecf..177cf1c045d083e5a83fee23ed9fb5d1256095d8 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -101,6 +101,16 @@ class Cache extends \UnitTestCase {
 		}
 	}
 
+	function testStatus() {
+		$this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
+		$this->cache->put('foo', array('size' => -1));
+		$this->assertEquals(\OC\Files\Cache\Cache::PARTIAL, $this->cache->getStatus('foo'));
+		$this->cache->put('foo', array('size' => -1, 'mtime' => 20, 'mimetype' => 'foo/file'));
+		$this->assertEquals(\OC\Files\Cache\Cache::SHALLOW, $this->cache->getStatus('foo'));
+		$this->cache->put('foo', array('size' => 10));
+		$this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
+	}
+
 	public function tearDown() {
 		$this->cache->clear();
 	}