hookup creation and upload time into dav

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2019-10-30 17:24:55 +01:00
parent 136c4ef925
commit 2165f10aaf
No known key found for this signature in database
GPG Key ID: 42B69D8A64526EFB
3 changed files with 39 additions and 0 deletions

View File

@ -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);
}

View File

@ -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;
});
}
/**

View File

@ -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
*