/** @var \OC\Files\Storage\Storage $sourceStorage */
[$sourceStorage, $sourceInternalPath] = $ownerView->resolvePath('/files/' . $ownerPath);
+ $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
+
try {
$moveSuccessful = true;
if ($trashStorage->file_exists($trashInternalPath)) {
return false;
}
- $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
-
if ($moveSuccessful) {
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`user`) VALUES (?,?,?,?)");
$result = $query->execute(array($filename, $timestamp, $location, $owner));
}
} else {
$source = $sourceStorage->fopen($sourceInternalPath, 'r');
- // TODO: call fopen in a way that we execute again all storage wrappers
- // to avoid that we bypass storage wrappers which perform important actions
- // for this operation. Same is true for all other operations which
- // are not the same as the original one.Once this is fixed we also
- // need to adjust the encryption wrapper.
- $target = $this->fopen($targetInternalPath, 'w');
- list(, $result) = \OC_Helper::streamCopy($source, $target);
+ if ($source) {
+ $result = $this->writeStream($targetInternalPath, $source) > 0;
+ } else {
+ $result = false;
+ }
+
if ($result and $preserveMtime) {
$this->touch($targetInternalPath, $sourceStorage->filemtime($sourceInternalPath));
}
- fclose($source);
- fclose($target);
if (!$result) {
// delete partially written target file