Also support removeable mounts with rmdir

This commit is contained in:
Robin Appelman 2014-06-16 16:24:42 +02:00
parent 0532f5c39a
commit b188550c22
1 changed files with 28 additions and 19 deletions

View File

@ -161,7 +161,34 @@ class View {
return $this->basicOperation('mkdir', $path, array('create', 'write'));
}
protected function removeMount($mount, $path){
if ($mount instanceof MoveableMount) {
\OC_Hook::emit(
Filesystem::CLASSNAME, "umount",
array(Filesystem::signal_param_path => $path)
);
$result = $mount->removeMount();
if ($result) {
\OC_Hook::emit(
Filesystem::CLASSNAME, "post_umount",
array(Filesystem::signal_param_path => $path)
);
}
return $result;
} else {
// do not allow deleting the storage's root / the mount point
// because for some storages it might delete the whole contents
// but isn't supposed to work that way
return false;
}
}
public function rmdir($path) {
$absolutePath= $this->getAbsolutePath($path);
$mount = Filesystem::getMountManager()->find($absolutePath);
if ($mount->getInternalPath($absolutePath) === '') {
return $this->removeMount($mount, $path);
}
if ($this->is_dir($path)) {
return $this->basicOperation('rmdir', $path, array('delete'));
} else {
@ -360,25 +387,7 @@ class View {
$absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
$mount = Filesystem::getMountManager()->find($absolutePath . $postFix);
if ($mount->getInternalPath($absolutePath) === '') {
if ($mount instanceof MoveableMount) {
\OC_Hook::emit(
Filesystem::CLASSNAME, "umount",
array(Filesystem::signal_param_path => $path)
);
$result = $mount->removeMount();
if ($result) {
\OC_Hook::emit(
Filesystem::CLASSNAME, "post_umount",
array(Filesystem::signal_param_path => $path)
);
}
return $result;
} else {
// do not allow deleting the storage's root / the mount point
// because for some storages it might delete the whole contents
// but isn't supposed to work that way
return false;
}
return $this->removeMount($mount, $path);
}
return $this->basicOperation('unlink', $path, array('delete'));
}