add dav property to check if a file has a preview available
This commit is contained in:
parent
318d68a9a9
commit
1fef5d3d06
|
@ -50,7 +50,8 @@ $serverFactory = new OCA\DAV\Connector\Sabre\ServerFactory(
|
||||||
\OC::$server->getUserSession(),
|
\OC::$server->getUserSession(),
|
||||||
\OC::$server->getMountManager(),
|
\OC::$server->getMountManager(),
|
||||||
\OC::$server->getTagManager(),
|
\OC::$server->getTagManager(),
|
||||||
\OC::$server->getRequest()
|
\OC::$server->getRequest(),
|
||||||
|
\OC::$server->getPreviewManager()
|
||||||
);
|
);
|
||||||
|
|
||||||
$requestUri = \OC::$server->getRequest()->getRequestUri();
|
$requestUri = \OC::$server->getRequest()->getRequestUri();
|
||||||
|
|
|
@ -36,7 +36,8 @@ $serverFactory = new \OCA\DAV\Connector\Sabre\ServerFactory(
|
||||||
\OC::$server->getUserSession(),
|
\OC::$server->getUserSession(),
|
||||||
\OC::$server->getMountManager(),
|
\OC::$server->getMountManager(),
|
||||||
\OC::$server->getTagManager(),
|
\OC::$server->getTagManager(),
|
||||||
\OC::$server->getRequest()
|
\OC::$server->getRequest(),
|
||||||
|
\OC::$server->getPreviewManager()
|
||||||
);
|
);
|
||||||
|
|
||||||
// Backends
|
// Backends
|
||||||
|
|
|
@ -33,6 +33,7 @@ namespace OCA\DAV\Connector\Sabre;
|
||||||
use OC\Files\View;
|
use OC\Files\View;
|
||||||
use OCA\DAV\Upload\FutureFile;
|
use OCA\DAV\Upload\FutureFile;
|
||||||
use OCP\Files\ForbiddenException;
|
use OCP\Files\ForbiddenException;
|
||||||
|
use OCP\IPreview;
|
||||||
use Sabre\DAV\Exception\Forbidden;
|
use Sabre\DAV\Exception\Forbidden;
|
||||||
use Sabre\DAV\Exception\NotFound;
|
use Sabre\DAV\Exception\NotFound;
|
||||||
use Sabre\DAV\IFile;
|
use Sabre\DAV\IFile;
|
||||||
|
@ -50,6 +51,7 @@ class FilesPlugin extends ServerPlugin {
|
||||||
|
|
||||||
// namespace
|
// namespace
|
||||||
const NS_OWNCLOUD = 'http://owncloud.org/ns';
|
const NS_OWNCLOUD = 'http://owncloud.org/ns';
|
||||||
|
const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
|
||||||
const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id';
|
const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id';
|
||||||
const INTERNAL_FILEID_PROPERTYNAME = '{http://owncloud.org/ns}fileid';
|
const INTERNAL_FILEID_PROPERTYNAME = '{http://owncloud.org/ns}fileid';
|
||||||
const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions';
|
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 OWNER_DISPLAY_NAME_PROPERTYNAME = '{http://owncloud.org/ns}owner-display-name';
|
||||||
const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums';
|
const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums';
|
||||||
const DATA_FINGERPRINT_PROPERTYNAME = '{http://owncloud.org/ns}data-fingerprint';
|
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
|
* Reference to main server object
|
||||||
|
@ -103,11 +106,17 @@ class FilesPlugin extends ServerPlugin {
|
||||||
*/
|
*/
|
||||||
private $request;
|
private $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var IPreview
|
||||||
|
*/
|
||||||
|
private $previewManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Tree $tree
|
* @param Tree $tree
|
||||||
* @param View $view
|
* @param View $view
|
||||||
* @param IConfig $config
|
* @param IConfig $config
|
||||||
* @param IRequest $request
|
* @param IRequest $request
|
||||||
|
* @param IPreview $previewManager
|
||||||
* @param bool $isPublic
|
* @param bool $isPublic
|
||||||
* @param bool $downloadAttachment
|
* @param bool $downloadAttachment
|
||||||
*/
|
*/
|
||||||
|
@ -115,6 +124,7 @@ class FilesPlugin extends ServerPlugin {
|
||||||
View $view,
|
View $view,
|
||||||
IConfig $config,
|
IConfig $config,
|
||||||
IRequest $request,
|
IRequest $request,
|
||||||
|
IPreview $previewManager,
|
||||||
$isPublic = false,
|
$isPublic = false,
|
||||||
$downloadAttachment = true) {
|
$downloadAttachment = true) {
|
||||||
$this->tree = $tree;
|
$this->tree = $tree;
|
||||||
|
@ -123,6 +133,7 @@ class FilesPlugin extends ServerPlugin {
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
$this->isPublic = $isPublic;
|
$this->isPublic = $isPublic;
|
||||||
$this->downloadAttachment = $downloadAttachment;
|
$this->downloadAttachment = $downloadAttachment;
|
||||||
|
$this->previewManager = $previewManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -139,6 +150,7 @@ class FilesPlugin extends ServerPlugin {
|
||||||
public function initialize(\Sabre\DAV\Server $server) {
|
public function initialize(\Sabre\DAV\Server $server) {
|
||||||
|
|
||||||
$server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
|
$server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
|
||||||
|
$server->xml->namespaceMap[self::NS_NEXTCLOUD] = 'nc';
|
||||||
$server->protectedProperties[] = self::FILEID_PROPERTYNAME;
|
$server->protectedProperties[] = self::FILEID_PROPERTYNAME;
|
||||||
$server->protectedProperties[] = self::INTERNAL_FILEID_PROPERTYNAME;
|
$server->protectedProperties[] = self::INTERNAL_FILEID_PROPERTYNAME;
|
||||||
$server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME;
|
$server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME;
|
||||||
|
@ -149,6 +161,7 @@ class FilesPlugin extends ServerPlugin {
|
||||||
$server->protectedProperties[] = self::OWNER_DISPLAY_NAME_PROPERTYNAME;
|
$server->protectedProperties[] = self::OWNER_DISPLAY_NAME_PROPERTYNAME;
|
||||||
$server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME;
|
$server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME;
|
||||||
$server->protectedProperties[] = self::DATA_FINGERPRINT_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
|
// normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH
|
||||||
$allowedProperties = ['{DAV:}getetag'];
|
$allowedProperties = ['{DAV:}getetag'];
|
||||||
|
@ -316,6 +329,10 @@ class FilesPlugin extends ServerPlugin {
|
||||||
return $this->config->getSystemValue('data-fingerprint', '');
|
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) {
|
if ($node instanceof \OCA\DAV\Files\FilesHome) {
|
||||||
|
|
|
@ -34,6 +34,7 @@ use OCP\Files\Mount\IMountManager;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
use OCP\ILogger;
|
use OCP\ILogger;
|
||||||
|
use OCP\IPreview;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
use OCP\ITagManager;
|
use OCP\ITagManager;
|
||||||
use OCP\IUserSession;
|
use OCP\IUserSession;
|
||||||
|
@ -54,6 +55,8 @@ class ServerFactory {
|
||||||
private $tagManager;
|
private $tagManager;
|
||||||
/** @var IRequest */
|
/** @var IRequest */
|
||||||
private $request;
|
private $request;
|
||||||
|
/** @var IPreview */
|
||||||
|
private $previewManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param IConfig $config
|
* @param IConfig $config
|
||||||
|
@ -63,6 +66,7 @@ class ServerFactory {
|
||||||
* @param IMountManager $mountManager
|
* @param IMountManager $mountManager
|
||||||
* @param ITagManager $tagManager
|
* @param ITagManager $tagManager
|
||||||
* @param IRequest $request
|
* @param IRequest $request
|
||||||
|
* @param IPreview $previewManager
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
IConfig $config,
|
IConfig $config,
|
||||||
|
@ -71,7 +75,8 @@ class ServerFactory {
|
||||||
IUserSession $userSession,
|
IUserSession $userSession,
|
||||||
IMountManager $mountManager,
|
IMountManager $mountManager,
|
||||||
ITagManager $tagManager,
|
ITagManager $tagManager,
|
||||||
IRequest $request
|
IRequest $request,
|
||||||
|
IPreview $previewManager
|
||||||
) {
|
) {
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
|
@ -80,6 +85,7 @@ class ServerFactory {
|
||||||
$this->mountManager = $mountManager;
|
$this->mountManager = $mountManager;
|
||||||
$this->tagManager = $tagManager;
|
$this->tagManager = $tagManager;
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
|
$this->previewManager = $previewManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -145,6 +151,7 @@ class ServerFactory {
|
||||||
$view,
|
$view,
|
||||||
$this->config,
|
$this->config,
|
||||||
$this->request,
|
$this->request,
|
||||||
|
$this->previewManager,
|
||||||
false,
|
false,
|
||||||
!$this->config->getSystemValue('debug', false)
|
!$this->config->getSystemValue('debug', false)
|
||||||
)
|
)
|
||||||
|
|
|
@ -158,6 +158,7 @@ class Server {
|
||||||
$view,
|
$view,
|
||||||
\OC::$server->getConfig(),
|
\OC::$server->getConfig(),
|
||||||
$this->request,
|
$this->request,
|
||||||
|
\OC::$server->getPreviewManager(),
|
||||||
false,
|
false,
|
||||||
!\OC::$server->getConfig()->getSystemValue('debug', false)
|
!\OC::$server->getConfig()->getSystemValue('debug', false)
|
||||||
)
|
)
|
||||||
|
|
|
@ -48,6 +48,7 @@ class FilesPluginTest extends TestCase {
|
||||||
const OWNER_ID_PROPERTYNAME = FilesPlugin::OWNER_ID_PROPERTYNAME;
|
const OWNER_ID_PROPERTYNAME = FilesPlugin::OWNER_ID_PROPERTYNAME;
|
||||||
const OWNER_DISPLAY_NAME_PROPERTYNAME = FilesPlugin::OWNER_DISPLAY_NAME_PROPERTYNAME;
|
const OWNER_DISPLAY_NAME_PROPERTYNAME = FilesPlugin::OWNER_DISPLAY_NAME_PROPERTYNAME;
|
||||||
const DATA_FINGERPRINT_PROPERTYNAME = FilesPlugin::DATA_FINGERPRINT_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
|
* @var \Sabre\DAV\Server | \PHPUnit_Framework_MockObject_MockObject
|
||||||
|
@ -79,6 +80,11 @@ class FilesPluginTest extends TestCase {
|
||||||
*/
|
*/
|
||||||
private $request;
|
private $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \OCP\IPreview | \PHPUnit_Framework_MockObject_MockObject
|
||||||
|
*/
|
||||||
|
private $previewManager;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->server = $this->getMockBuilder('\Sabre\DAV\Server')
|
$this->server = $this->getMockBuilder('\Sabre\DAV\Server')
|
||||||
|
@ -99,12 +105,16 @@ class FilesPluginTest extends TestCase {
|
||||||
$this->request = $this->getMockBuilder('\OCP\IRequest')
|
$this->request = $this->getMockBuilder('\OCP\IRequest')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
$this->previewManager = $this->getMockBuilder('\OCP\IPreview')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
$this->plugin = new FilesPlugin(
|
$this->plugin = new FilesPlugin(
|
||||||
$this->tree,
|
$this->tree,
|
||||||
$this->view,
|
$this->view,
|
||||||
$this->config,
|
$this->config,
|
||||||
$this->request
|
$this->request,
|
||||||
|
$this->previewManager
|
||||||
);
|
);
|
||||||
$this->plugin->initialize($this->server);
|
$this->plugin->initialize($this->server);
|
||||||
}
|
}
|
||||||
|
@ -139,6 +149,13 @@ class FilesPluginTest extends TestCase {
|
||||||
$node->expects($this->any())
|
$node->expects($this->any())
|
||||||
->method('getDavPermissions')
|
->method('getDavPermissions')
|
||||||
->will($this->returnValue('DWCKMSR'));
|
->will($this->returnValue('DWCKMSR'));
|
||||||
|
$node->expects($this->any())
|
||||||
|
->method('getFileInfo')
|
||||||
|
->will($this->returnValue(
|
||||||
|
$this->getMockBuilder('\OCP\Files\FileInfo')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock()
|
||||||
|
));
|
||||||
|
|
||||||
return $node;
|
return $node;
|
||||||
}
|
}
|
||||||
|
@ -283,6 +300,7 @@ class FilesPluginTest extends TestCase {
|
||||||
$this->getMockBuilder('\OCP\IRequest')
|
$this->getMockBuilder('\OCP\IRequest')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock(),
|
->getMock(),
|
||||||
|
$this->previewManager,
|
||||||
true);
|
true);
|
||||||
$this->plugin->initialize($this->server);
|
$this->plugin->initialize($this->server);
|
||||||
|
|
||||||
|
@ -555,4 +573,28 @@ class FilesPluginTest extends TestCase {
|
||||||
|
|
||||||
$this->plugin->httpGet($request, $response);
|
$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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
namespace OCA\DAV\Tests\unit\Connector\Sabre;
|
namespace OCA\DAV\Tests\unit\Connector\Sabre;
|
||||||
|
|
||||||
use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation;
|
use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation;
|
||||||
|
use OCP\IPreview;
|
||||||
use Sabre\DAV\Exception\NotFound;
|
use Sabre\DAV\Exception\NotFound;
|
||||||
use OCP\SystemTag\ISystemTagObjectMapper;
|
use OCP\SystemTag\ISystemTagObjectMapper;
|
||||||
use OC\Files\View;
|
use OC\Files\View;
|
||||||
|
@ -60,6 +61,9 @@ class FilesReportPluginTest extends \Test\TestCase {
|
||||||
/** @var Folder|\PHPUnit_Framework_MockObject_MockObject **/
|
/** @var Folder|\PHPUnit_Framework_MockObject_MockObject **/
|
||||||
private $userFolder;
|
private $userFolder;
|
||||||
|
|
||||||
|
/** @var IPreview|\PHPUnit_Framework_MockObject_MockObject * */
|
||||||
|
private $previewManager;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
|
$this->tree = $this->getMockBuilder('\Sabre\DAV\Tree')
|
||||||
|
@ -93,6 +97,10 @@ class FilesReportPluginTest extends \Test\TestCase {
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
|
||||||
|
$this->previewManager = $this->getMockBuilder('\OCP\IPreview')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
$user = $this->getMockBuilder('\OCP\IUser')
|
$user = $this->getMockBuilder('\OCP\IUser')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
@ -365,7 +373,8 @@ class FilesReportPluginTest extends \Test\TestCase {
|
||||||
$config,
|
$config,
|
||||||
$this->getMockBuilder('\OCP\IRequest')
|
$this->getMockBuilder('\OCP\IRequest')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock()
|
->getMock(),
|
||||||
|
$this->previewManager
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->plugin->initialize($this->server);
|
$this->plugin->initialize($this->server);
|
||||||
|
|
|
@ -66,7 +66,8 @@ abstract class RequestTest extends TestCase {
|
||||||
\OC::$server->getTagManager(),
|
\OC::$server->getTagManager(),
|
||||||
$this->getMockBuilder('\OCP\IRequest')
|
$this->getMockBuilder('\OCP\IRequest')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock()
|
->getMock(),
|
||||||
|
\OC::$server->getPreviewManager()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue