From 17bcea15855784f00791ab19984d520a773aa0ca Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 27 Jan 2013 00:13:16 +0100 Subject: [PATCH] Filesystem: add View->getPath to the cache api --- lib/files/view.php | 15 +++++++++++++++ tests/lib/files/view.php | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lib/files/view.php b/lib/files/view.php index e6b52fb35b..c2038f222a 100644 --- a/lib/files/view.php +++ b/lib/files/view.php @@ -932,4 +932,19 @@ class View { return null; } } + + /** + * Get the path of a file by id, relative to the view + * + * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file + * + * @param int $id + * @return string + */ + public function getPath($id) { + list($storage, $internalPath) = Cache\Cache::getById($id); + $mount = Mount::findById($storage); + $fullPath = $mount->getMountPoint() . $internalPath; + return $this->getRelativePath($fullPath); + } } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 586ad17842..a064e44f3e 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -98,6 +98,29 @@ class View extends \PHPUnit_Framework_TestCase { $this->assertEquals(array(), $rootView->getDirectoryContent('/non/existing')); } + function testGetPath() { + $storage1 = $this->getTestStorage(); + $storage2 = $this->getTestStorage(); + $storage3 = $this->getTestStorage(); + \OC\Files\Filesystem::mount($storage1, array(), '/'); + \OC\Files\Filesystem::mount($storage2, array(), '/substorage'); + \OC\Files\Filesystem::mount($storage3, array(), '/folder/anotherstorage'); + + $rootView = new \OC\Files\View(''); + + $cachedData = $rootView->getFileInfo('/foo.txt'); + $id1 = $cachedData['fileid']; + $this->assertEquals('/foo.txt', $rootView->getPath($id1)); + + $cachedData = $rootView->getFileInfo('/substorage/foo.txt'); + $id2 = $cachedData['fileid']; + $this->assertEquals('/substorage/foo.txt', $rootView->getPath($id2)); + + $folderView = new \OC\Files\View('/substorage'); + $this->assertEquals('/foo.txt', $folderView->getPath($id2)); + $this->assertNull($folderView->getPath($id1)); + } + function testMountPointOverwrite() { $storage1 = $this->getTestStorage(false); $storage2 = $this->getTestStorage();