Commit f3213571 authored by Morris Jobke's avatar Morris Jobke
Browse files

Merge pull request #12616 from owncloud/node-fileinfo

make \OC\Files\Node\Node implement the FileInfo interface
parents b8a2fdaa 672495a1
......@@ -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();
......
......@@ -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'));
......
......@@ -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();
}
}
......@@ -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');
......
......@@ -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');
......
......@@ -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);
......
......@@ -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())