From 7ef0ffe8ad8f95b023f95f80e7b91c2a3ee50c67 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Fri, 26 Oct 2012 12:43:23 +0200
Subject: [PATCH] add View->putFileInfo to the filecache api

---
 lib/files/view.php       | 30 ++++++++++++++++++++++++++++--
 tests/lib/files/view.php |  7 +++++++
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/lib/files/view.php b/lib/files/view.php
index aaca1618acb..094a7d92a4d 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -663,7 +663,7 @@ class View {
 		$path = \OC\Files\Filesystem::normalizePath($this->fakeRoot . '/' . $path);
 		/**
 		 * @var \OC\Files\Storage\Storage $storage
-		 * @var string $path
+		 * @var string $internalPath
 		 */
 		list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
 		$cache = $storage->getCache();
@@ -700,7 +700,7 @@ class View {
 		$path = \OC\Files\Filesystem::normalizePath($this->fakeRoot . '/' . $directory);
 		/**
 		 * @var \OC\Files\Storage\Storage $storage
-		 * @var string $path
+		 * @var string $internalPath
 		 */
 		list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
 		$cache = $storage->getCache();
@@ -737,4 +737,30 @@ class View {
 		usort($files, "fileCmp"); //TODO: remove this once ajax is merged
 		return $files;
 	}
+
+	/**
+	 * change file metadata
+	 *
+	 * @param string $path
+	 * @param array $data
+	 * @return int
+	 *
+	 * returns the fileid of the updated file
+	 */
+	public function putFileInfo($path, $data) {
+		$path = \OC\Files\Filesystem::normalizePath($this->fakeRoot . '/' . $path);
+		/**
+		 * @var \OC\Files\Storage\Storage $storage
+		 * @var string $internalPath
+		 */
+		list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($path);
+		$cache = $storage->getCache();
+
+		if (!$cache->inCache($internalPath)) {
+			$scanner = $storage->getScanner();
+			$scanner->scan($internalPath, \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+		}
+
+		return $cache->put($internalPath, $data);
+	}
 }
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index adbed5a18b6..051ae251627 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -72,6 +72,13 @@ class View extends \PHPUnit_Framework_TestCase {
 
 		$folderView = new \OC\Files\View('/folder');
 		$this->assertEquals($rootView->getFileInfo('/folder'), $folderView->getFileInfo('/'));
+
+		$cachedData = $rootView->getFileInfo('/foo.txt');
+		$this->assertFalse($cachedData['encrypted']);
+		$id = $rootView->putFileInfo('/foo.txt', array('encrypted' => true));
+		$cachedData = $rootView->getFileInfo('/foo.txt');
+		$this->assertTrue($cachedData['encrypted']);
+		$this->assertEquals($cachedData['fileid'], $id);
 	}
 
 	public function testAutoScan() {
-- 
GitLab