Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps/dav
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2019-10-30 19:24:55 +0300
committerRobin Appelman <robin@icewind.nl>2019-11-13 14:39:39 +0300
commit2165f10aaf58d7662d6ffb9cb432b70672fc0738 (patch)
treeb6906c34ca1f4d4300ae642bde788ee11e842617 /apps/dav
parent136c4ef925eb77a421b8bd67d476405603a0fa1d (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.php13
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php18
-rw-r--r--apps/dav/lib/Connector/Sabre/Node.php8
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
*