]> source.dussan.org Git - nextcloud-server.git/commitdiff
Also add metadata for postDelete hooks triggered from the view
authorRobin Appelman <icewind@owncloud.com>
Wed, 2 Dec 2015 12:19:19 +0000 (13:19 +0100)
committerRobin Appelman <icewind@owncloud.com>
Wed, 2 Dec 2015 12:51:26 +0000 (13:51 +0100)
lib/private/files/node/hookconnector.php
tests/lib/files/node/hookconnector.php

index c42a329d319970d20e07ed6e7e72f21209c6603e..360aaafdd71052670d6578e56156eadbe092f443 100644 (file)
@@ -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 (isset($this->deleteMetaCache[$fullPath])) {
+                               $info = $this->deleteMetaCache[$fullPath];
+                       } else {
+                               $info = null;
+                       }
                        if (Filesystem::is_dir($path)) {
-                               return new NonExistingFolder($this->root, $this->view, $fullPath);
+                               return new NonExistingFolder($this->root, $this->view, $fullPath, $info);
                        } else {
-                               return new NonExistingFile($this->root, $this->view, $fullPath);
+                               return new NonExistingFile($this->root, $this->view, $fullPath, $info);
                        }
                }
                if ($info->getType() === FileInfo::TYPE_FILE) {
index 646e3952a385f35612a4a041a221be87a730e120..e2a5e1906879c007ae62b657768a633c30942ca2 100644 (file)
@@ -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());
+       }
 }