]> source.dussan.org Git - nextcloud-server.git/commitdiff
add dav property to check if a file has a preview available
authorRobin Appelman <robin@icewind.nl>
Tue, 26 Jul 2016 11:15:12 +0000 (13:15 +0200)
committerRobin Appelman <robin@icewind.nl>
Wed, 27 Jul 2016 10:59:39 +0000 (12:59 +0200)
apps/dav/appinfo/v1/publicwebdav.php
apps/dav/appinfo/v1/webdav.php
apps/dav/lib/Connector/Sabre/FilesPlugin.php
apps/dav/lib/Connector/Sabre/ServerFactory.php
apps/dav/lib/Server.php
apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php
apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php

index 286629b20f97e5979dc8bac60d9164217ab258fd..b88c5847ab5dfbc9da3a717c92943e35485a802d 100644 (file)
@@ -50,7 +50,8 @@ $serverFactory = new OCA\DAV\Connector\Sabre\ServerFactory(
        \OC::$server->getUserSession(),
        \OC::$server->getMountManager(),
        \OC::$server->getTagManager(),
-       \OC::$server->getRequest()
+       \OC::$server->getRequest(),
+       \OC::$server->getPreviewManager()
 );
 
 $requestUri = \OC::$server->getRequest()->getRequestUri();
index 59d4f05bdc58c4fbd2688ec2c7e309387d767f72..f04bf40633459d58ca604decfa1f845d31925a1f 100644 (file)
@@ -36,7 +36,8 @@ $serverFactory = new \OCA\DAV\Connector\Sabre\ServerFactory(
        \OC::$server->getUserSession(),
        \OC::$server->getMountManager(),
        \OC::$server->getTagManager(),
-       \OC::$server->getRequest()
+       \OC::$server->getRequest(),
+       \OC::$server->getPreviewManager()
 );
 
 // Backends
index 203c0a4683f347365eaa04bac303e23e3b5935e8..c472f75b6bfe14cbf5e712bf60a3ff0f526c01ec 100644 (file)
@@ -33,6 +33,7 @@ namespace OCA\DAV\Connector\Sabre;
 use OC\Files\View;
 use OCA\DAV\Upload\FutureFile;
 use OCP\Files\ForbiddenException;
+use OCP\IPreview;
 use Sabre\DAV\Exception\Forbidden;
 use Sabre\DAV\Exception\NotFound;
 use Sabre\DAV\IFile;
@@ -50,6 +51,7 @@ class FilesPlugin extends ServerPlugin {
 
        // namespace
        const NS_OWNCLOUD = 'http://owncloud.org/ns';
+       const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
        const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id';
        const INTERNAL_FILEID_PROPERTYNAME = '{http://owncloud.org/ns}fileid';
        const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions';
@@ -62,6 +64,7 @@ class FilesPlugin extends ServerPlugin {
        const OWNER_DISPLAY_NAME_PROPERTYNAME = '{http://owncloud.org/ns}owner-display-name';
        const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums';
        const DATA_FINGERPRINT_PROPERTYNAME = '{http://owncloud.org/ns}data-fingerprint';
+       const HAS_PREVIEW_PROPERTYNAME = '{http://nextcloud.org/ns}has-preview';
 
        /**
         * Reference to main server object
@@ -103,11 +106,17 @@ class FilesPlugin extends ServerPlugin {
         */
        private $request;
 
+       /**
+        * @var IPreview
+        */
+       private $previewManager;
+
        /**
         * @param Tree $tree
         * @param View $view
         * @param IConfig $config
         * @param IRequest $request
+        * @param IPreview $previewManager
         * @param bool $isPublic
         * @param bool $downloadAttachment
         */
@@ -115,6 +124,7 @@ class FilesPlugin extends ServerPlugin {
                                                                View $view,
                                                                IConfig $config,
                                                                IRequest $request,
+                                                               IPreview $previewManager,
                                                                $isPublic = false,
                                                                $downloadAttachment = true) {
                $this->tree = $tree;
@@ -123,6 +133,7 @@ class FilesPlugin extends ServerPlugin {
                $this->request = $request;
                $this->isPublic = $isPublic;
                $this->downloadAttachment = $downloadAttachment;
+               $this->previewManager = $previewManager;
        }
 
        /**
@@ -139,6 +150,7 @@ class FilesPlugin extends ServerPlugin {
        public function initialize(\Sabre\DAV\Server $server) {
 
                $server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
+               $server->xml->namespaceMap[self::NS_NEXTCLOUD] = 'nc';
                $server->protectedProperties[] = self::FILEID_PROPERTYNAME;
                $server->protectedProperties[] = self::INTERNAL_FILEID_PROPERTYNAME;
                $server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME;
@@ -149,6 +161,7 @@ class FilesPlugin extends ServerPlugin {
                $server->protectedProperties[] = self::OWNER_DISPLAY_NAME_PROPERTYNAME;
                $server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME;
                $server->protectedProperties[] = self::DATA_FINGERPRINT_PROPERTYNAME;
+               $server->protectedProperties[] = self::HAS_PREVIEW_PROPERTYNAME;
 
                // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH
                $allowedProperties = ['{DAV:}getetag'];
@@ -316,6 +329,10 @@ class FilesPlugin extends ServerPlugin {
                                        return $this->config->getSystemValue('data-fingerprint', '');
                                }
                        });
+
+                       $propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
+                               return json_encode($this->previewManager->isAvailable($node->getFileInfo()));
+                       });
                }
 
                if ($node instanceof \OCA\DAV\Files\FilesHome) {
index 9f142b996eeeb2a0a4785f13e9ea328fc72485f1..55b967619d6a07fa25fee97173db45377a849cce 100644 (file)
@@ -34,6 +34,7 @@ use OCP\Files\Mount\IMountManager;
 use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\ILogger;
+use OCP\IPreview;
 use OCP\IRequest;
 use OCP\ITagManager;
 use OCP\IUserSession;
@@ -54,6 +55,8 @@ class ServerFactory {
        private $tagManager;
        /** @var IRequest */
        private $request;
+       /** @var IPreview  */
+       private $previewManager;
 
        /**
         * @param IConfig $config
@@ -63,6 +66,7 @@ class ServerFactory {
         * @param IMountManager $mountManager
         * @param ITagManager $tagManager
         * @param IRequest $request
+        * @param IPreview $previewManager
         */
        public function __construct(
                IConfig $config,
@@ -71,7 +75,8 @@ class ServerFactory {
                IUserSession $userSession,
                IMountManager $mountManager,
                ITagManager $tagManager,
-               IRequest $request
+               IRequest $request,
+               IPreview $previewManager
        ) {
                $this->config = $config;
                $this->logger = $logger;
@@ -80,6 +85,7 @@ class ServerFactory {
                $this->mountManager = $mountManager;
                $this->tagManager = $tagManager;
                $this->request = $request;
+               $this->previewManager = $previewManager;
        }
 
        /**
@@ -145,6 +151,7 @@ class ServerFactory {
                                        $view,
                                        $this->config,
                                        $this->request,
+                                       $this->previewManager,
                                        false,
                                        !$this->config->getSystemValue('debug', false)
                                )
index c488feeb8003d7431f63daaf74426b3d63f850f1..e80f9ae125ab2e9744f456c4c032d0a73ea98676 100644 (file)
@@ -158,6 +158,7 @@ class Server {
                                                $view,
                                                \OC::$server->getConfig(),
                                                $this->request,
+                                               \OC::$server->getPreviewManager(),
                                                false,
                                                !\OC::$server->getConfig()->getSystemValue('debug', false)
                                        )
index 74f1d844b24405ba56bf9ca7ab1c944ba2866fab..6630c02754124501ce805995176e31396b375415 100644 (file)
@@ -48,6 +48,7 @@ class FilesPluginTest extends TestCase {
        const OWNER_ID_PROPERTYNAME = FilesPlugin::OWNER_ID_PROPERTYNAME;
        const OWNER_DISPLAY_NAME_PROPERTYNAME = FilesPlugin::OWNER_DISPLAY_NAME_PROPERTYNAME;
        const DATA_FINGERPRINT_PROPERTYNAME = FilesPlugin::DATA_FINGERPRINT_PROPERTYNAME;
+       const HAS_PREVIEW_PROPERTYNAME = FilesPlugin::HAS_PREVIEW_PROPERTYNAME;
 
        /**
         * @var \Sabre\DAV\Server | \PHPUnit_Framework_MockObject_MockObject
@@ -79,6 +80,11 @@ class FilesPluginTest extends TestCase {
         */
        private $request;
 
+       /**
+        * @var \OCP\IPreview | \PHPUnit_Framework_MockObject_MockObject
+        */
+       private $previewManager;
+
        public function setUp() {
                parent::setUp();
                $this->server = $this->getMockBuilder('\Sabre\DAV\Server')
@@ -99,12 +105,16 @@ class FilesPluginTest extends TestCase {
                $this->request = $this->getMockBuilder('\OCP\IRequest')
                        ->disableOriginalConstructor()
                        ->getMock();
+               $this->previewManager = $this->getMockBuilder('\OCP\IPreview')
+                       ->disableOriginalConstructor()
+                       ->getMock();
 
                $this->plugin = new FilesPlugin(
                        $this->tree,
                        $this->view,
                        $this->config,
-                       $this->request
+                       $this->request,
+                       $this->previewManager
                );
                $this->plugin->initialize($this->server);
        }
@@ -139,6 +149,13 @@ class FilesPluginTest extends TestCase {
                $node->expects($this->any())
                        ->method('getDavPermissions')
                        ->will($this->returnValue('DWCKMSR'));
+               $node->expects($this->any())
+                       ->method('getFileInfo')
+                       ->will($this->returnValue(
+                               $this->getMockBuilder('\OCP\Files\FileInfo')
+                               ->disableOriginalConstructor()
+                               ->getMock()
+                       ));
 
                return $node;
        }
@@ -283,6 +300,7 @@ class FilesPluginTest extends TestCase {
                        $this->getMockBuilder('\OCP\IRequest')
                                ->disableOriginalConstructor()
                                ->getMock(),
+                       $this->previewManager,
                        true);
                $this->plugin->initialize($this->server);
 
@@ -555,4 +573,28 @@ class FilesPluginTest extends TestCase {
 
                $this->plugin->httpGet($request, $response);
        }
+
+       public function testHasPreview() {
+               /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit_Framework_MockObject_MockObject $node */
+               $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory');
+
+               $propFind = new PropFind(
+                       '/dummyPath',
+                       array(
+                               self::HAS_PREVIEW_PROPERTYNAME
+                       ),
+                       0
+               );
+
+               $this->previewManager->expects($this->once())
+                       ->method('isAvailable')
+                       ->will($this->returnValue(false));
+
+               $this->plugin->handleGetProperties(
+                       $propFind,
+                       $node
+               );
+
+               $this->assertEquals("false", $propFind->get(self::HAS_PREVIEW_PROPERTYNAME));
+       }
 }
index 3302c23c3c6a6b5ef43aa5fa39a497e7908231c3..336a33058bf26a570bfb277aecc85790b5e4d6b2 100644 (file)
@@ -25,6 +25,7 @@
 namespace OCA\DAV\Tests\unit\Connector\Sabre;
 
 use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation;
+use OCP\IPreview;
 use Sabre\DAV\Exception\NotFound;
 use OCP\SystemTag\ISystemTagObjectMapper;
 use OC\Files\View;
@@ -60,6 +61,9 @@ class FilesReportPluginTest extends \Test\TestCase {
        /** @var Folder|\PHPUnit_Framework_MockObject_MockObject **/
        private $userFolder;
 
+       /** @var IPreview|\PHPUnit_Framework_MockObject_MockObject * */
+       private $previewManager;
+
        public function setUp() {
                parent::setUp();
                $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
@@ -93,6 +97,10 @@ class FilesReportPluginTest extends \Test\TestCase {
                        ->disableOriginalConstructor()
                        ->getMock();
 
+               $this->previewManager = $this->getMockBuilder('\OCP\IPreview')
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
                $user = $this->getMockBuilder('\OCP\IUser')
                        ->disableOriginalConstructor()
                        ->getMock();
@@ -365,7 +373,8 @@ class FilesReportPluginTest extends \Test\TestCase {
                                $config,
                                $this->getMockBuilder('\OCP\IRequest')
                                        ->disableOriginalConstructor()
-                                       ->getMock()
+                                       ->getMock(),
+                               $this->previewManager
                        )
                );
                $this->plugin->initialize($this->server);
index a254aca77235d847e352dd54813f0f689381e5a2..8b06678407ba543b62c0c34fdc210f5b871d92f1 100644 (file)
@@ -66,7 +66,8 @@ abstract class RequestTest extends TestCase {
                        \OC::$server->getTagManager(),
                        $this->getMockBuilder('\OCP\IRequest')
                                ->disableOriginalConstructor()
-                               ->getMock()
+                               ->getMock(),
+                       \OC::$server->getPreviewManager()
                );
        }