From 672495a1a31c71880fe93fce3a8134278a48ca7a Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 4 Dec 2014 13:27:08 +0100 Subject: [PATCH] make \OC\Files\Node\Node implement the FileInfo interface --- lib/private/files/node/file.php | 10 ++--- lib/private/files/node/folder.php | 7 --- lib/private/files/node/node.php | 71 +++++++++++++++++++++++++------ tests/lib/files/node/file.php | 41 ++++++++++-------- tests/lib/files/node/folder.php | 19 ++++++--- tests/lib/files/node/node.php | 52 +++++++++++++--------- tests/lib/files/node/root.php | 7 ++- 7 files changed, 133 insertions(+), 74 deletions(-) diff --git a/lib/private/files/node/file.php b/lib/private/files/node/file.php index 81e251c20b8..1c47294cdae 100644 --- a/lib/private/files/node/file.php +++ b/lib/private/files/node/file.php @@ -34,19 +34,13 @@ class File extends Node implements \OCP\Files\File { if ($this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE)) { $this->sendHooks(array('preWrite')); $this->view->file_put_contents($this->path, $data); + $this->fileInfo = null; $this->sendHooks(array('postWrite')); } else { throw new NotPermittedException(); } } - /** - * @return string - */ - public function getMimeType() { - return $this->view->getMimeType($this->path); - } - /** * @param string $mode * @return resource @@ -94,6 +88,7 @@ class File extends Node implements \OCP\Files\File { $nonExisting = new NonExistingFile($this->root, $this->view, $this->path); $this->root->emit('\OC\Files', 'postDelete', array($nonExisting)); $this->exists = false; + $this->fileInfo = null; } else { throw new NotPermittedException(); } @@ -138,6 +133,7 @@ class File extends Node implements \OCP\Files\File { $this->root->emit('\OC\Files', 'postRename', array($this, $targetNode)); $this->root->emit('\OC\Files', 'postWrite', array($targetNode)); $this->path = $targetPath; + $this->fileInfo = null; return $targetNode; } else { throw new NotPermittedException(); diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php index 83e20871528..54a699be532 100644 --- a/lib/private/files/node/folder.php +++ b/lib/private/files/node/folder.php @@ -321,13 +321,6 @@ class Folder extends Node implements \OCP\Files\Folder { return $this->view->free_space($this->path); } - /** - * @return bool - */ - public function isCreatable() { - return $this->checkPermissions(\OCP\Constants::PERMISSION_CREATE); - } - public function delete() { if ($this->checkPermissions(\OCP\Constants::PERMISSION_DELETE)) { $this->sendHooks(array('preDelete')); diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php index c52f5bbd54f..b80db28e8ec 100644 --- a/lib/private/files/node/node.php +++ b/lib/private/files/node/node.php @@ -8,10 +8,10 @@ namespace OC\Files\Node; -use OCP\Files\NotFoundException; +use OCP\Files\FileInfo; use OCP\Files\NotPermittedException; -class Node implements \OCP\Files\Node { +class Node implements \OCP\Files\Node, FileInfo { /** * @var \OC\Files\View $view */ @@ -27,6 +27,11 @@ class Node implements \OCP\Files\Node { */ protected $path; + /** + * @var \OCP\Files\FileInfo + */ + protected $fileInfo; + /** * @param \OC\Files\View $view * @param \OC\Files\Node\Root $root @@ -38,6 +43,13 @@ class Node implements \OCP\Files\Node { $this->path = $path; } + private function getFileInfo() { + if (!$this->fileInfo) { + $this->fileInfo = $this->view->getFileInfo($this->path); + } + return $this->fileInfo; + } + /** * @param string[] $hooks */ @@ -85,6 +97,12 @@ class Node implements \OCP\Files\Node { $this->sendHooks(array('preTouch')); $this->view->touch($this->path, $mtime); $this->sendHooks(array('postTouch')); + if ($this->fileInfo) { + if (is_null($mtime)) { + $mtime = time(); + } + $this->fileInfo['mtime'] = $mtime; + } } else { throw new NotPermittedException(); } @@ -118,8 +136,7 @@ class Node implements \OCP\Files\Node { * @return int */ public function getId() { - $info = $this->view->getFileInfo($this->path); - return $info['fileid']; + return $this->getFileInfo()->getId(); } /** @@ -133,58 +150,60 @@ class Node implements \OCP\Files\Node { * @return int */ public function getMTime() { - return $this->view->filemtime($this->path); + return $this->getFileInfo()->getMTime(); } /** * @return int */ public function getSize() { - return $this->view->filesize($this->path); + return $this->getFileInfo()->getSize(); } /** * @return string */ public function getEtag() { - $info = $this->view->getFileInfo($this->path); - return $info['etag']; + return $this->getFileInfo()->getEtag(); } /** * @return int */ public function getPermissions() { - $info = $this->view->getFileInfo($this->path); - return $info['permissions']; + return $this->getFileInfo()->getPermissions(); } /** * @return bool */ public function isReadable() { - return $this->checkPermissions(\OCP\Constants::PERMISSION_READ); + return $this->getFileInfo()->isReadable(); } /** * @return bool */ public function isUpdateable() { - return $this->checkPermissions(\OCP\Constants::PERMISSION_UPDATE); + return $this->getFileInfo()->isUpdateable(); } /** * @return bool */ public function isDeletable() { - return $this->checkPermissions(\OCP\Constants::PERMISSION_DELETE); + return $this->getFileInfo()->isDeletable(); } /** * @return bool */ public function isShareable() { - return $this->checkPermissions(\OCP\Constants::PERMISSION_SHARE); + return $this->getFileInfo()->isShareable(); + } + + public function isCreatable() { + return $this->getFileInfo()->isCreatable(); } /** @@ -240,4 +259,28 @@ class Node implements \OCP\Files\Node { } return true; } + + public function isMounted() { + return $this->getFileInfo()->isMounted(); + } + + public function isShared() { + return $this->getFileInfo()->isShared(); + } + + public function getMimeType() { + return $this->getFileInfo()->getMimetype(); + } + + public function getMimePart() { + return $this->getFileInfo()->getMimePart(); + } + + public function getType() { + return $this->getFileInfo()->getType(); + } + + public function isEncrypted() { + return $this->getFileInfo()->isEncrypted(); + } } diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php index 1ae312ab5a8..a1d2266edf7 100644 --- a/tests/lib/files/node/file.php +++ b/tests/lib/files/node/file.php @@ -8,6 +8,7 @@ namespace Test\Files\Node; +use OC\Files\FileInfo; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OC\Files\View; @@ -20,6 +21,10 @@ class File extends \Test\TestCase { $this->user = new \OC\User\User('', new \OC_User_Dummy); } + protected function getFileInfo($data) { + return new FileInfo('', null, '', $data); + } + public function testDelete() { $manager = $this->getMock('\OC\Files\Mount\Manager'); @@ -39,7 +44,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $view->expects($this->once()) ->method('unlink') @@ -89,7 +94,7 @@ class File extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)))); $view->expects($this->once()) ->method('unlink') @@ -124,7 +129,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->delete(); @@ -156,7 +161,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $this->assertEquals('bar', $node->getContent()); @@ -180,7 +185,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => 0))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => 0)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->getContent(); @@ -201,7 +206,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $view->expects($this->once()) ->method('file_put_contents') @@ -226,7 +231,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->putContent('bar'); @@ -241,9 +246,9 @@ class File extends \Test\TestCase { $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user)); $view->expects($this->once()) - ->method('getMimeType') + ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue('text/plain')); + ->will($this->returnValue($this->getFileInfo(array('mimetype' => 'text/plain')))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $this->assertEquals('text/plain', $node->getMimeType()); @@ -279,7 +284,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $fh = $node->fopen('r'); @@ -316,7 +321,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $fh = $node->fopen('w'); @@ -348,7 +353,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => 0))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => 0)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->fopen('r'); @@ -375,7 +380,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_UPDATE))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_UPDATE)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->fopen('w'); @@ -402,7 +407,7 @@ class File extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $node->fopen('w'); @@ -425,7 +430,7 @@ class File extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 3)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $parentNode = new \OC\Files\Node\Folder($root, $view, '/bar'); @@ -469,7 +474,7 @@ class File extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ, 'fileid' => 3)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $parentNode = new \OC\Files\Node\Folder($root, $view, '/bar'); @@ -556,7 +561,7 @@ class File extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)))); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $parentNode = new \OC\Files\Node\Folder($root, $view, '/bar'); @@ -587,7 +592,7 @@ class File extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $view->expects($this->never()) ->method('rename'); diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php index 91aa3b82db2..4aa57aa9373 100644 --- a/tests/lib/files/node/folder.php +++ b/tests/lib/files/node/folder.php @@ -9,6 +9,7 @@ namespace Test\Files\Node; use OC\Files\Cache\Cache; +use OC\Files\FileInfo; use OC\Files\Mount\Mount; use OC\Files\Node\Node; use OCP\Files\NotFoundException; @@ -23,6 +24,10 @@ class Folder extends \Test\TestCase { $this->user = new \OC\User\User('', new \OC_User_Dummy); } + protected function getFileInfo($data) { + return new FileInfo('', null, '', $data); + } + public function testDelete() { $manager = $this->getMock('\OC\Files\Mount\Manager'); /** @@ -39,7 +44,7 @@ class Folder extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $view->expects($this->once()) ->method('rmdir') @@ -87,7 +92,7 @@ class Folder extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL, 'fileid' => 1)))); $view->expects($this->once()) ->method('rmdir') @@ -121,7 +126,7 @@ class Folder extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); $node->delete(); @@ -255,7 +260,7 @@ class Folder extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $view->expects($this->once()) ->method('mkdir') @@ -285,7 +290,7 @@ class Folder extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); $node->newFolder('asd'); @@ -305,7 +310,7 @@ class Folder extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $view->expects($this->once()) ->method('touch') @@ -335,7 +340,7 @@ class Folder extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); $node->newFile('asd'); diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php index 8820be5b0b2..4697479ba95 100644 --- a/tests/lib/files/node/node.php +++ b/tests/lib/files/node/node.php @@ -8,6 +8,8 @@ namespace Test\Files\Node; +use OC\Files\FileInfo; + class Node extends \Test\TestCase { private $user; @@ -16,6 +18,10 @@ class Node extends \Test\TestCase { $this->user = new \OC\User\User('', new \OC_User_Dummy); } + protected function getFileInfo($data) { + return new FileInfo('', null, '', $data); + } + public function testStat() { $manager = $this->getMock('\OC\Files\Mount\Manager'); /** @@ -55,12 +61,12 @@ class Node extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); - $stat = array( + $stat = $this->getFileInfo(array( 'fileid' => 1, 'size' => 100, 'etag' => 'qwerty', 'mtime' => 50 - ); + )); $view->expects($this->once()) ->method('getFileInfo') @@ -82,10 +88,18 @@ class Node extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); + + $stat = $this->getFileInfo(array( + 'fileid' => 1, + 'size' => 100, + 'etag' => 'qwerty', + 'mtime' => 50 + )); + $view->expects($this->once()) - ->method('filesize') + ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(100)); + ->will($this->returnValue($stat)); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $this->assertEquals(100, $node->getSize()); @@ -102,12 +116,12 @@ class Node extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); - $stat = array( + $stat = $this->getFileInfo(array( 'fileid' => 1, 'size' => 100, 'etag' => 'qwerty', 'mtime' => 50 - ); + )); $view->expects($this->once()) ->method('getFileInfo') @@ -128,15 +142,18 @@ class Node extends \Test\TestCase { $root->expects($this->any()) ->method('getUser') ->will($this->returnValue($this->user)); - /** - * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage - */ - $storage = $this->getMock('\OC\Files\Storage\Storage'); + + $stat = $this->getFileInfo(array( + 'fileid' => 1, + 'size' => 100, + 'etag' => 'qwerty', + 'mtime' => 50 + )); $view->expects($this->once()) - ->method('filemtime') + ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(50)); + ->will($this->returnValue($stat)); $node = new \OC\Files\Node\File($root, $view, '/bar/foo'); $this->assertEquals(50, $node->getMTime()); @@ -238,15 +255,10 @@ class Node extends \Test\TestCase { ->with('/bar/foo', 100) ->will($this->returnValue(true)); - $view->expects($this->once()) - ->method('filemtime') - ->with('/bar/foo') - ->will($this->returnValue(100)); - $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $node = new \OC\Files\Node\Node($root, $view, '/bar/foo'); $node->touch(100); @@ -299,7 +311,7 @@ class Node extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_ALL))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_ALL)))); $node = new \OC\Files\Node\Node($root, $view, '/bar/foo'); $node->touch(100); @@ -323,7 +335,7 @@ class Node extends \Test\TestCase { $view->expects($this->any()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('permissions' => \OCP\Constants::PERMISSION_READ))); + ->will($this->returnValue($this->getFileInfo(array('permissions' => \OCP\Constants::PERMISSION_READ)))); $node = new \OC\Files\Node\Node($root, $view, '/bar/foo'); $node->touch(100); diff --git a/tests/lib/files/node/root.php b/tests/lib/files/node/root.php index fcce7070f5d..35bd462157e 100644 --- a/tests/lib/files/node/root.php +++ b/tests/lib/files/node/root.php @@ -8,6 +8,7 @@ namespace Test\Files\Node; +use OC\Files\FileInfo; use OCP\Files\NotPermittedException; use OC\Files\Mount\Manager; @@ -19,6 +20,10 @@ class Root extends \Test\TestCase { $this->user = new \OC\User\User('', new \OC_User_Dummy); } + protected function getFileInfo($data) { + return new FileInfo('', null, '', $data); + } + public function testGet() { $manager = new Manager(); /** @@ -34,7 +39,7 @@ class Root extends \Test\TestCase { $view->expects($this->once()) ->method('getFileInfo') ->with('/bar/foo') - ->will($this->returnValue(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain'))); + ->will($this->returnValue($this->getFileInfo(array('fileid' => 10, 'path' => 'bar/foo', 'name', 'mimetype' => 'text/plain')))); $view->expects($this->once()) ->method('is_dir') -- 2.39.5