From 0062888aafcad14d574787d985cf6780356137cc Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 2 Dec 2015 13:19:19 +0100 Subject: [PATCH] Also add metadata for postDelete hooks triggered from the view --- lib/private/files/node/hookconnector.php | 21 +++++++++++++++++---- tests/lib/files/node/hookconnector.php | 22 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/lib/private/files/node/hookconnector.php b/lib/private/files/node/hookconnector.php index c42a329d31..360aaafdd7 100644 --- a/lib/private/files/node/hookconnector.php +++ b/lib/private/files/node/hookconnector.php @@ -21,9 +21,9 @@ namespace OC\Files\Node; +use OCP\Files\FileInfo; use OC\Files\Filesystem; use OC\Files\View; -use OCP\Files\FileInfo; use OCP\Util; class HookConnector { @@ -37,6 +37,11 @@ class HookConnector { */ private $view; + /** + * @var FileInfo[] + */ + private $deleteMetaCache = []; + /** * HookConnector constructor. * @@ -90,11 +95,13 @@ class HookConnector { public function delete($arguments) { $node = $this->getNodeForPath($arguments['path']); + $this->deleteMetaCache[$node->getPath()] = $node->getFileInfo(); $this->root->emit('\OC\Files', 'preDelete', [$node]); } public function postDelete($arguments) { $node = $this->getNodeForPath($arguments['path']); + unset($this->deleteMetaCache[$node->getPath()]); $this->root->emit('\OC\Files', 'postDelete', [$node]); } @@ -135,11 +142,17 @@ class HookConnector { private function getNodeForPath($path) { $info = Filesystem::getView()->getFileInfo($path); if (!$info) { + $fullPath = Filesystem::getView()->getAbsolutePath($path); - if (Filesystem::is_dir($path)) { - return new NonExistingFolder($this->root, $this->view, $fullPath); + if (isset($this->deleteMetaCache[$fullPath])) { + $info = $this->deleteMetaCache[$fullPath]; } else { - return new NonExistingFile($this->root, $this->view, $fullPath); + $info = null; + } + if (Filesystem::is_dir($path)) { + return new NonExistingFolder($this->root, $this->view, $fullPath, $info); + } else { + return new NonExistingFile($this->root, $this->view, $fullPath, $info); } } if ($info->getType() === FileInfo::TYPE_FILE) { diff --git a/tests/lib/files/node/hookconnector.php b/tests/lib/files/node/hookconnector.php index 646e3952a3..e2a5e19068 100644 --- a/tests/lib/files/node/hookconnector.php +++ b/tests/lib/files/node/hookconnector.php @@ -21,7 +21,7 @@ use Test\Traits\UserTrait; * Class HookConnector * * @group DB - * + * * @package Test\Files\Node */ class HookConnector extends TestCase { @@ -180,4 +180,24 @@ class HookConnector extends TestCase { $this->assertEquals('/' . $this->userId . '/files/source', $hookSourceNode->getPath()); $this->assertEquals('/' . $this->userId . '/files/target', $hookTargetNode->getPath()); } + + public function testPostDeleteMeta() { + $connector = new \OC\Files\Node\HookConnector($this->root, $this->view); + $connector->viewToNode(); + $hookCalled = false; + /** @var Node $hookNode */ + $hookNode = null; + + $this->root->listen('\OC\Files', 'postDelete', function ($node) use (&$hookNode, &$hookCalled) { + $hookCalled = true; + $hookNode = $node; + }); + + Filesystem::file_put_contents('test.txt', 'asd'); + $info = Filesystem::getFileInfo('test.txt'); + Filesystem::unlink('test.txt'); + + $this->assertTrue($hookCalled); + $this->assertEquals($hookNode->getId(), $info->getId()); + } }