Skip to content
Snippets Groups Projects
Commit ce0aa7d4 authored by Robin Appelman's avatar Robin Appelman Committed by Bjoern Schiessle
Browse files

Use the movable mount system for external shares

parent c61f759a
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,6 @@
namespace OCA\Files_Sharing\External;
use OC\Files\Filesystem;
use OC\Files\Mount\Mount;
class Manager {
const STORAGE = '\OCA\Files_Sharing\External\Storage';
......@@ -83,13 +82,18 @@ class Manager {
}
}
protected function stripPath($path) {
$prefix = '/' . $this->userSession->getUser()->getUID() . '/files';
return rtrim(substr($path, strlen($prefix)), '/');
}
/**
* @param array $data
* @return Mount
*/
protected function mountShare($data) {
$mountPoint = '/' . $this->userSession->getUser()->getUID() . '/files' . $data['mountpoint'];
$mount = new Mount(self::STORAGE, $mountPoint, $data, $this->storageLoader);
$mount = new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
$this->mountManager->addMount($mount);
return $mount;
}
......@@ -107,22 +111,21 @@ class Manager {
* @return bool
*/
public function setMountPoint($source, $target) {
$source = $this->stripPath($source);
$target = $this->stripPath($target);
$sourceHash = md5($source);
$targetHash = md5($target);
$query = $this->connection->prepare('UPDATE *PREFIX*share_external SET
`mountpoint` = ?, `mountpoint_hash` = ? WHERE `mountpoint_hash` = ?');
$query->execute(array($target, $targetHash, $sourceHash));
$result = (bool)$query->execute(array($target, $targetHash, $sourceHash));
$mount = $this->mountManager->find($source);
$mount->setMountPoint($target . '/');
$this->mountManager->addMount($mount);
$this->mountManager->removeMount($source . '/');
return $result;
}
public function removeShare($mountPoint) {
$hash = md5($mountPoint);
$query = $this->connection->prepare('DELETE FROM *PREFIX*share_external WHERE `mountpoint_hash` = ?');
$query->execute(array($hash));
return (bool)$query->execute(array($hash));
}
}
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OCA\Files_Sharing\External;
use OC\Files\Mount\MoveableMount;
class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
/**
* @var \OCA\Files_Sharing\External\Manager
*/
protected $manager;
/**
* @param string|\OC\Files\Storage\Storage $storage
* @param string $mountpoint
* @param array $options
* @param \OCA\Files_Sharing\External\Manager $manager
* @param \OC\Files\Storage\Loader $loader
*/
public function __construct($storage, $mountpoint, $options, $manager, $loader = null) {
parent::__construct($storage, $mountpoint, $options, $loader);
$this->manager = $manager;
}
/**
* Move the mount point to $target
*
* @param string $target the target mount point
* @return bool
*/
public function moveMount($target) {
$result = $this->manager->setMountPoint($this->mountPoint, $target);
$this->setMountPoint($target);
return $result;
}
/**
* Remove the mount points
*
* @return mixed
* @return bool
*/
public function removeMount() {
return $this->manager->removeShare($this->mountPoint);
}
}
......@@ -9,9 +9,10 @@
namespace OCA\Files_Sharing\External;
use OC\Files\Filesystem;
use OC\Files\Storage\DAV;
use OCA\Files_Sharing\ISharedStorage;
class Storage extends \OC\Files\Storage\DAV implements ISharedStorage {
class Storage extends DAV implements ISharedStorage {
/**
* @var string
*/
......@@ -101,34 +102,4 @@ class Storage extends \OC\Files\Storage\DAV implements ISharedStorage {
}
return $this->scanner;
}
public function rename($path1, $path2) {
// if we renamed the mount point we need to adjust the mountpoint in the database
if (Filesystem::normalizePath($this->mountPoint) === Filesystem::normalizePath($path1)) {
$this->manager->setMountPoint($path1, $path2);
$this->mountPoint = $path2;
return true;
} else {
// read only shares
return false;
}
}
public function unlink($path) {
if ($path === '' || $path === false) {
$this->manager->removeShare($this->mountPoint);
return true;
} else {
return parent::unlink($path);
}
}
public function rmdir($path) {
if ($path === '' || $path === false) {
$this->manager->removeShare($this->mountPoint);
return true;
} else {
return parent::rmdir($path);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment