summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/private/connector/sabre/file.php13
-rw-r--r--lib/private/connector/sabre/filesplugin.php10
-rw-r--r--lib/private/files/storage/common.php13
-rw-r--r--lib/public/files/storage.php10
4 files changed, 46 insertions, 0 deletions
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 54eea54552f..cb03f30e023 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -226,6 +226,19 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
return \OC_Helper::getSecureMimeType($mimeType);
}
+ public function getDirectDownload() {
+ if (\OCP\App::isEnabled('encryption')) {
+ return [];
+ }
+ /** @var \OCP\Files\Storage $storage */
+ list($storage, $internalPath) = $this->fileView->resolvePath($this->path);
+ if (is_null($storage)) {
+ return [];
+ }
+
+ return $storage->getDirectDownload($internalPath);
+ }
+
/**
* @param resource $data
* @return null|string
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 37798d8b162..b011a050a5c 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -39,6 +39,7 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}id';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}permissions';
$server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}size';
+ $server->protectedProperties[] = '{' . self::NS_OWNCLOUD . '}dDU';
$this->server = $server;
$this->server->subscribeEvent('beforeGetProperties', array($this, 'beforeGetProperties'));
@@ -80,6 +81,15 @@ class OC_Connector_Sabre_FilesPlugin extends \Sabre\DAV\ServerPlugin
}
}
+ if ($node instanceof OC_Connector_Sabre_File) {
+ /** @var $node OC_Connector_Sabre_File */
+ $directDownloadUrl = $node->getDirectDownload();
+ if (isset($directDownloadUrl['url'])) {
+ $directDownloadUrlPropertyName = '{' . self::NS_OWNCLOUD . '}dDU';
+ $returnedProperties[200][$directDownloadUrlPropertyName] = $directDownloadUrl['url'];
+ }
+ }
+
if ($node instanceof OC_Connector_Sabre_Directory) {
$sizePropertyName = '{' . self::NS_OWNCLOUD . '}size';
diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php
index b3eda1165ab..fe6aefbb42e 100644
--- a/lib/private/files/storage/common.php
+++ b/lib/private/files/storage/common.php
@@ -437,4 +437,17 @@ abstract class Common implements \OC\Files\Storage\Storage {
public function instanceOfStorage($class) {
return is_a($this, $class);
}
+
+ /**
+ * A custom storage implementation can return an url for direct download of a give file.
+ *
+ * For now the returned array can hold the parameter url - in future more attributes might follow.
+ *
+ * @param string $path
+ * @return array
+ */
+ public function getDirectDownload($path) {
+ return [];
+ }
+
}
diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php
index 323d20db564..36d5b800df6 100644
--- a/lib/public/files/storage.php
+++ b/lib/public/files/storage.php
@@ -335,4 +335,14 @@ interface Storage {
* @return bool
*/
public function instanceOfStorage($class);
+
+ /**
+ * A custom storage implementation can return an url for direct download of a give file.
+ *
+ * For now the returned array can hold the parameter url - in future more attributes might follow.
+ *
+ * @param string $path
+ * @return array
+ */
+ public function getDirectDownload($path);
}