diff options
author | Robin Appelman <robin@icewind.nl> | 2019-10-30 19:24:55 +0300 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2019-11-13 14:39:39 +0300 |
commit | 2165f10aaf58d7662d6ffb9cb432b70672fc0738 (patch) | |
tree | b6906c34ca1f4d4300ae642bde788ee11e842617 /apps/dav | |
parent | 136c4ef925eb77a421b8bd67d476405603a0fa1d (diff) |
hookup creation and upload time into dav
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'apps/dav')
-rw-r--r-- | apps/dav/lib/Connector/Sabre/File.php | 13 | ||||
-rw-r--r-- | apps/dav/lib/Connector/Sabre/FilesPlugin.php | 18 | ||||
-rw-r--r-- | apps/dav/lib/Connector/Sabre/Node.php | 8 |
3 files changed, 39 insertions, 0 deletions
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php index dd25b046bcf..bc72fd24e71 100644 --- a/apps/dav/lib/Connector/Sabre/File.php +++ b/apps/dav/lib/Connector/Sabre/File.php @@ -291,6 +291,19 @@ class File extends Node implements IFile { } } + $fileInfoUpdate = [ + 'upload_time' => time() + ]; + + // allow sync clients to send the creation time along in a header + if (isset($this->request->server['HTTP_X_OC_CTIME'])) { + $ctime = $this->sanitizeMtime($this->request->server['HTTP_X_OC_CTIME']); + $fileInfoUpdate['creation_time'] = $ctime; + $this->header('X-OC-CTime: accepted'); + } + + $this->fileView->putFileInfo($this->path, $fileInfoUpdate); + if ($view) { $this->emitPostHooks($exists); } diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 99317f2bc1c..b2a0e9a31b4 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -70,6 +70,9 @@ class FilesPlugin extends ServerPlugin { const HAS_PREVIEW_PROPERTYNAME = '{http://nextcloud.org/ns}has-preview'; const MOUNT_TYPE_PROPERTYNAME = '{http://nextcloud.org/ns}mount-type'; const IS_ENCRYPTED_PROPERTYNAME = '{http://nextcloud.org/ns}is-encrypted'; + const METADATA_ETAG_PROPERTYNAME = '{http://nextcloud.org/ns}metadata_etag'; + const UPLOAD_TIME_PROPERTYNAME = '{http://nextcloud.org/ns}upload_time'; + const CREATION_TIME_PROPERTYNAME = '{http://nextcloud.org/ns}creation_time'; const SHARE_NOTE = '{http://nextcloud.org/ns}note'; /** @@ -400,6 +403,14 @@ class FilesPlugin extends ServerPlugin { return new ChecksumList($checksum); }); + $propFind->handle(self::CREATION_TIME_PROPERTYNAME, function() use ($node) { + return $node->getFileInfo()->getCreationTime(); + }); + + $propFind->handle(self::UPLOAD_TIME_PROPERTYNAME, function() use ($node) { + return $node->getFileInfo()->getUploadTime(); + }); + } if ($node instanceof \OCA\DAV\Connector\Sabre\Directory) { @@ -470,6 +481,13 @@ class FilesPlugin extends ServerPlugin { } return false; }); + $propPatch->handle(self::CREATION_TIME_PROPERTYNAME, function($time) use ($node) { + if (empty($time)) { + return false; + } + $node->setCreationTime((int) $time); + return true; + }); } /** diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php index f0917fe11b2..2a3e8145f6f 100644 --- a/apps/dav/lib/Connector/Sabre/Node.php +++ b/apps/dav/lib/Connector/Sabre/Node.php @@ -201,6 +201,14 @@ abstract class Node implements \Sabre\DAV\INode { return $this->fileView->putFileInfo($this->path, array('etag' => $etag)); } + public function setCreationTime(int $time) { + return $this->fileView->putFileInfo($this->path, array('creation_time' => $time)); + } + + public function setUploadTime(int $time) { + return $this->fileView->putFileInfo($this->path, array('upload_time' => $time)); + } + /** * Returns the size of the node, in bytes * |