summaryrefslogtreecommitdiffstats
path: root/lib/private/connector/sabre/file.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/connector/sabre/file.php')
-rw-r--r--lib/private/connector/sabre/file.php70
1 files changed, 29 insertions, 41 deletions
diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php
index 433b4d805c9..66b50a87552 100644
--- a/lib/private/connector/sabre/file.php
+++ b/lib/private/connector/sabre/file.php
@@ -42,14 +42,16 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*
* @param resource $data
* @throws Sabre_DAV_Exception_Forbidden
+ * @throws OC_Connector_Sabre_Exception_UnsupportedMediaType
+ * @throws Sabre_DAV_Exception_BadRequest
+ * @throws Sabre_DAV_Exception
+ * @throws OC_Connector_Sabre_Exception_EntityTooLarge
+ * @throws Sabre_DAV_Exception_ServiceUnavailable
* @return string|null
*/
public function put($data) {
-
- $fs = $this->getFS();
-
- if ($fs->file_exists($this->path) &&
- !$fs->isUpdatable($this->path)) {
+ if ($this->info && $this->fileView->file_exists($this->path) &&
+ !$this->info->isUpdateable()) {
throw new \Sabre_DAV_Exception_Forbidden();
}
@@ -72,10 +74,10 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
$partpath = $this->path . '.ocTransferId' . rand() . '.part';
try {
- $putOkay = $fs->file_put_contents($partpath, $data);
+ $putOkay = $this->fileView->file_put_contents($partpath, $data);
if ($putOkay === false) {
\OC_Log::write('webdav', '\OC\Files\Filesystem::file_put_contents() failed', \OC_Log::ERROR);
- $fs->unlink($partpath);
+ $this->fileView->unlink($partpath);
// because we have no clue about the cause we can only throw back a 500/Internal Server Error
throw new Sabre_DAV_Exception('Could not write file contents');
}
@@ -98,29 +100,30 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
}
// rename to correct path
- $renameOkay = $fs->rename($partpath, $this->path);
- $fileExists = $fs->file_exists($this->path);
+ $renameOkay = $this->fileView->rename($partpath, $this->path);
+ $fileExists = $this->fileView->file_exists($this->path);
if ($renameOkay === false || $fileExists === false) {
\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
- $fs->unlink($partpath);
+ $this->fileView->unlink($partpath);
throw new Sabre_DAV_Exception('Could not rename part file to final file');
}
// allow sync clients to send the mtime along in a header
$mtime = OC_Request::hasModificationTime();
if ($mtime !== false) {
- if($fs->touch($this->path, $mtime)) {
+ if($this->fileView->touch($this->path, $mtime)) {
header('X-OC-MTime: accepted');
}
}
+ $this->refreshInfo();
- return $this->getETagPropertyForPath($this->path);
+ return '"' . $this->info->getEtag() . '"';
}
/**
* Returns the data
*
- * @return string
+ * @return string | resource
*/
public function get() {
@@ -128,7 +131,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
if (\OC_Util::encryptedFiles()) {
throw new \Sabre_DAV_Exception_ServiceUnavailable();
} else {
- return \OC\Files\Filesystem::fopen($this->path, 'rb');
+ return $this->fileView->fopen($this->path, 'rb');
}
}
@@ -140,12 +143,10 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @throws Sabre_DAV_Exception_Forbidden
*/
public function delete() {
- $fs = $this->getFS();
-
- if (!$fs->isDeletable($this->path)) {
+ if (!$this->info->isDeletable()) {
throw new \Sabre_DAV_Exception_Forbidden();
}
- $fs->unlink($this->path);
+ $this->fileView->unlink($this->path);
// remove properties
$this->removeProperties();
@@ -158,12 +159,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return int
*/
public function getSize() {
- $this->getFileinfoCache();
- if ($this->fileinfo_cache['size'] > -1) {
- return $this->fileinfo_cache['size'];
- } else {
- return null;
- }
+ return $this->info->getSize();
}
/**
@@ -178,11 +174,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return mixed
*/
public function getETag() {
- $properties = $this->getProperties(array(self::GETETAG_PROPERTYNAME));
- if (isset($properties[self::GETETAG_PROPERTYNAME])) {
- return $properties[self::GETETAG_PROPERTYNAME];
- }
- return null;
+ return '"' . $this->info->getEtag() . '"';
}
/**
@@ -193,18 +185,14 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return mixed
*/
public function getContentType() {
- if (isset($this->fileinfo_cache['mimetype'])) {
- $mimeType = $this->fileinfo_cache['mimetype'];
- } else {
- $mimeType = \OC\Files\Filesystem::getMimeType($this->path);
- }
+ $mimeType = $this->info->getMimetype();
return \OC_Helper::getSecureMimeType($mimeType);
-
}
/**
* @param resource $data
+ * @return null|string
*/
private function createFileChunked($data)
{
@@ -236,15 +224,14 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
$chunk_handler->file_assemble($partFile);
// here is the final atomic rename
- $fs = $this->getFS();
$targetPath = $path . '/' . $info['name'];
- $renameOkay = $fs->rename($partFile, $targetPath);
- $fileExists = $fs->file_exists($targetPath);
+ $renameOkay = $this->fileView->rename($partFile, $targetPath);
+ $fileExists = $this->fileView->file_exists($targetPath);
if ($renameOkay === false || $fileExists === false) {
\OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR);
// only delete if an error occurred and the target file was already created
if ($fileExists) {
- $fs->unlink($targetPath);
+ $this->fileView->unlink($targetPath);
}
throw new Sabre_DAV_Exception('Could not rename part file assembled from chunks');
}
@@ -252,12 +239,13 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
// allow sync clients to send the mtime along in a header
$mtime = OC_Request::hasModificationTime();
if ($mtime !== false) {
- if($fs->touch($targetPath, $mtime)) {
+ if($this->fileView->touch($targetPath, $mtime)) {
header('X-OC-MTime: accepted');
}
}
- return OC_Connector_Sabre_Node::getETagPropertyForPath($targetPath);
+ $info = $this->fileView->getFileInfo($targetPath);
+ return $info->getEtag();
}
return null;