From 783d67be6285d730ab7f365e3643bde0c116611a Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 25 Jul 2012 23:08:53 +0200 Subject: [PATCH] Create uniqid ETag for directories --- lib/connector/sabre/directory.php | 20 ++++++++++++++++++++ lib/connector/sabre/file.php | 9 +++++++++ lib/connector/sabre/node.php | 11 ++++++++++- lib/filesystem.php | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index 7003a920277..7f8434c7151 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -170,5 +170,25 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa } + /** + * Returns a list of properties for this nodes.; + * + * The properties list is a list of propertynames the client requested, + * encoded as xmlnamespace#tagName, for example: + * http://www.example.org/namespace#author + * If the array is empty, all properties should be returned + * + * @param array $properties + * @return void + */ + public function getProperties($properties) { + $props = parent::getProperties($properties); + if (in_array(self::GETETAG_PROPERTYNAME, $properties) + && !isset($props[self::GETETAG_PROPERTYNAME])) { + $props[self::GETETAG_PROPERTYNAME] = + OC_Connector_Sabre_Node::getETagPropertyForPath($this->path); + } + return $props; + } } diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php index 4fd50591071..9d571fceb0d 100644 --- a/lib/connector/sabre/file.php +++ b/lib/connector/sabre/file.php @@ -101,6 +101,15 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D return $this->getETagPropertyForPath($this->path); } + /** + * Creates a ETag for this path. + * @param string $path Path of the file + * @return string|null Returns null if the ETag can not effectively be determined + */ + static protected function createETag($path) { + return OC_Filesystem::hash('md5', $path); + } + /** * Returns the mime-type for a file * diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php index 77aff92cc39..22506f27cf6 100644 --- a/lib/connector/sabre/node.php +++ b/lib/connector/sabre/node.php @@ -203,13 +203,22 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr return $props; } + /** + * Creates a ETag for this path. + * @param string $path Path of the file + * @return string|null Returns null if the ETag can not effectively be determined + */ + static protected function createETag($path) { + return uniqid('', true); + } + /** * Returns the ETag surrounded by double-quotes for this path. * @param string $path Path of the file * @return string|null Returns null if the ETag can not effectively be determined */ static public function getETagPropertyForPath($path) { - $tag = OC_Filesystem::hash('md5', $path); + $tag = self::createETag($path); if (empty($tag)) { return null; } diff --git a/lib/filesystem.php b/lib/filesystem.php index c87bc9ed9cb..d88b30c2f68 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -476,6 +476,7 @@ class OC_Filesystem{ static public function removeETagHook($params) { $path=$params['path']; OC_Connector_Sabre_Node::removeETagPropertyForPath($path); + OC_Connector_Sabre_Node::removeETagPropertyForPath(dirname($path)); } } OC_Hook::connect('OC_Filesystem','post_write', 'OC_Filesystem','removeETagHook');