postpone the cost of setting up some of the external storage backends untill we actually need it
This commit is contained in:
parent
5217ca219a
commit
33cabcf590
|
@ -50,6 +50,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
|
|||
return $url;
|
||||
}
|
||||
public function fopen($path,$mode) {
|
||||
$this->init();
|
||||
switch($mode) {
|
||||
case 'r':
|
||||
case 'rb':
|
||||
|
@ -86,6 +87,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
|
|||
}
|
||||
|
||||
public function writeBack($tmpFile) {
|
||||
$this->init();
|
||||
if(isset(self::$tempFiles[$tmpFile])) {
|
||||
$this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]);
|
||||
unlink($tmpFile);
|
||||
|
|
|
@ -35,11 +35,6 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
|
|||
if(substr($this->share,-1,1)=='/') {
|
||||
$this->share=substr($this->share,0,-1);
|
||||
}
|
||||
|
||||
//create the root folder if necesary
|
||||
if(!$this->is_dir('')) {
|
||||
$this->mkdir('');
|
||||
}
|
||||
}
|
||||
|
||||
public function getId(){
|
||||
|
@ -54,6 +49,7 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
|
|||
}
|
||||
|
||||
public function stat($path) {
|
||||
$this->init();
|
||||
if(!$path and $this->root=='/') {//mtime doesn't work for shares
|
||||
$mtime=$this->shareMTime();
|
||||
$stat=stat($this->constructUrl($path));
|
||||
|
@ -75,6 +71,7 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
|
|||
* @return bool
|
||||
*/
|
||||
public function hasUpdated($path,$time) {
|
||||
$this->init();
|
||||
if(!$path and $this->root=='/') {
|
||||
//mtime doesn't work for shares, but giving the nature of the backend, doing a full update is still just fast enough
|
||||
return true;
|
||||
|
|
|
@ -9,13 +9,29 @@
|
|||
namespace OC\Files\Storage;
|
||||
|
||||
abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
||||
private $ready = false;
|
||||
|
||||
protected function init(){
|
||||
if($this->ready){
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
||||
//create the root folder if necesary
|
||||
if(!$this->is_dir('')) {
|
||||
$this->mkdir('');
|
||||
}
|
||||
}
|
||||
|
||||
abstract public function constructUrl($path);
|
||||
|
||||
public function mkdir($path) {
|
||||
$this->init();
|
||||
return mkdir($this->constructUrl($path));
|
||||
}
|
||||
|
||||
public function rmdir($path) {
|
||||
$this->init();
|
||||
if($this->file_exists($path)) {
|
||||
$succes=rmdir($this->constructUrl($path));
|
||||
clearstatcache();
|
||||
|
@ -26,10 +42,12 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function opendir($path) {
|
||||
$this->init();
|
||||
return opendir($this->constructUrl($path));
|
||||
}
|
||||
|
||||
public function filetype($path) {
|
||||
$this->init();
|
||||
return filetype($this->constructUrl($path));
|
||||
}
|
||||
|
||||
|
@ -42,16 +60,19 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function file_exists($path) {
|
||||
$this->init();
|
||||
return file_exists($this->constructUrl($path));
|
||||
}
|
||||
|
||||
public function unlink($path) {
|
||||
$this->init();
|
||||
$succes=unlink($this->constructUrl($path));
|
||||
clearstatcache();
|
||||
return $succes;
|
||||
}
|
||||
|
||||
public function fopen($path,$mode) {
|
||||
$this->init();
|
||||
return fopen($this->constructUrl($path),$mode);
|
||||
}
|
||||
|
||||
|
@ -60,6 +81,7 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function touch($path,$mtime=null) {
|
||||
$this->init();
|
||||
if(is_null($mtime)) {
|
||||
$fh=$this->fopen($path,'a');
|
||||
fwrite($fh,'');
|
||||
|
@ -70,18 +92,22 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function getFile($path,$target) {
|
||||
$this->init();
|
||||
return copy($this->constructUrl($path),$target);
|
||||
}
|
||||
|
||||
public function uploadFile($path,$target) {
|
||||
$this->init();
|
||||
return copy($path,$this->constructUrl($target));
|
||||
}
|
||||
|
||||
public function rename($path1,$path2) {
|
||||
$this->init();
|
||||
return rename($this->constructUrl($path1),$this->constructUrl($path2));
|
||||
}
|
||||
|
||||
public function stat($path) {
|
||||
$this->init();
|
||||
return stat($this->constructUrl($path));
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
private $user;
|
||||
private $token;
|
||||
private $secure;
|
||||
private $ready = false;
|
||||
/**
|
||||
* @var \CF_Authentication auth
|
||||
*/
|
||||
|
@ -188,7 +189,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
|
||||
/**
|
||||
* add an emulated sub container
|
||||
* @param CF_Container $container
|
||||
* @param \CF_Container $container
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -222,7 +223,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
|
||||
/**
|
||||
* remove an emulated sub container
|
||||
* @param CF_Container $container
|
||||
* @param \CF_Container $container
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -279,6 +280,15 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
if(!$this->root || $this->root[0]!='/') {
|
||||
$this->root='/'.$this->root;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function init(){
|
||||
if($this->ready){
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
||||
$this->auth = new \CF_Authentication($this->user, $this->token, null, $this->host);
|
||||
$this->auth->authenticate();
|
||||
|
||||
|
@ -297,6 +307,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
|
||||
|
||||
public function mkdir($path) {
|
||||
$this->init();
|
||||
if($this->containerExists($path)) {
|
||||
return false;
|
||||
}else{
|
||||
|
@ -306,6 +317,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function rmdir($path) {
|
||||
$this->init();
|
||||
if(!$this->containerExists($path)) {
|
||||
return false;
|
||||
}else{
|
||||
|
@ -343,6 +355,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function opendir($path) {
|
||||
$this->init();
|
||||
$container=$this->getContainer($path);
|
||||
$files=$this->getObjects($container);
|
||||
$i=array_search(self::SUBCONTAINER_FILE,$files);
|
||||
|
@ -357,6 +370,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function filetype($path) {
|
||||
$this->init();
|
||||
if($this->containerExists($path)) {
|
||||
return 'dir';
|
||||
}else{
|
||||
|
@ -373,6 +387,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function file_exists($path) {
|
||||
$this->init();
|
||||
if($this->is_dir($path)) {
|
||||
return true;
|
||||
}else{
|
||||
|
@ -381,6 +396,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function file_get_contents($path) {
|
||||
$this->init();
|
||||
$obj=$this->getObject($path);
|
||||
if(is_null($obj)) {
|
||||
return false;
|
||||
|
@ -389,6 +405,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function file_put_contents($path,$content) {
|
||||
$this->init();
|
||||
$obj=$this->getObject($path);
|
||||
if(is_null($obj)) {
|
||||
$container=$this->getContainer(dirname($path));
|
||||
|
@ -402,6 +419,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function unlink($path) {
|
||||
$this->init();
|
||||
if($this->containerExists($path)) {
|
||||
return $this->rmdir($path);
|
||||
}
|
||||
|
@ -415,6 +433,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function fopen($path,$mode) {
|
||||
$this->init();
|
||||
switch($mode) {
|
||||
case 'r':
|
||||
case 'rb':
|
||||
|
@ -458,6 +477,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function touch($path,$mtime=null) {
|
||||
$this->init();
|
||||
$obj=$this->getObject($path);
|
||||
if(is_null($obj)) {
|
||||
return false;
|
||||
|
@ -472,6 +492,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function rename($path1,$path2) {
|
||||
$this->init();
|
||||
$sourceContainer=$this->getContainer(dirname($path1));
|
||||
$targetContainer=$this->getContainer(dirname($path2));
|
||||
$result=$sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2));
|
||||
|
@ -484,6 +505,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function copy($path1,$path2) {
|
||||
$this->init();
|
||||
$sourceContainer=$this->getContainer(dirname($path1));
|
||||
$targetContainer=$this->getContainer(dirname($path2));
|
||||
$result=$sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2));
|
||||
|
@ -495,6 +517,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function stat($path) {
|
||||
$this->init();
|
||||
$container=$this->getContainer($path);
|
||||
if (!is_null($container)) {
|
||||
return array(
|
||||
|
@ -521,6 +544,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
private function getTmpFile($path) {
|
||||
$this->init();
|
||||
$obj=$this->getObject($path);
|
||||
if(!is_null($obj)) {
|
||||
$tmpFile=\OCP\Files::tmpFile();
|
||||
|
@ -532,6 +556,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
private function fromTmpFile($tmpFile,$path) {
|
||||
$this->init();
|
||||
$obj=$this->getObject($path);
|
||||
if(is_null($obj)) {
|
||||
$obj=$this->createObject($path);
|
||||
|
|
|
@ -14,6 +14,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
private $host;
|
||||
private $secure;
|
||||
private $root;
|
||||
private $ready;
|
||||
/**
|
||||
* @var \Sabre_DAV_Client
|
||||
*/
|
||||
|
@ -37,6 +38,13 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
if(substr($this->root,-1,1)!='/') {
|
||||
$this->root.='/';
|
||||
}
|
||||
}
|
||||
|
||||
private function init(){
|
||||
if($this->ready){
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
||||
$settings = array(
|
||||
'baseUri' => $this->createBaseUri(),
|
||||
|
@ -70,16 +78,19 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function mkdir($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
return $this->simpleResponse('MKCOL',$path,null,201);
|
||||
}
|
||||
|
||||
public function rmdir($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
return $this->simpleResponse('DELETE',$path,null,204);
|
||||
}
|
||||
|
||||
public function opendir($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$response=$this->client->propfind($path, array(),1);
|
||||
|
@ -98,6 +109,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function filetype($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$response=$this->client->propfind($path, array('{DAV:}resourcetype'));
|
||||
|
@ -119,6 +131,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function file_exists($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$this->client->propfind($path, array('{DAV:}resourcetype'));
|
||||
|
@ -129,10 +142,12 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function unlink($path) {
|
||||
$this->init();
|
||||
return $this->simpleResponse('DELETE',$path,null,204);
|
||||
}
|
||||
|
||||
public function fopen($path,$mode) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
switch($mode) {
|
||||
case 'r':
|
||||
|
@ -187,6 +202,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function free_space($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$response=$this->client->propfind($path, array('{DAV:}quota-available-bytes'));
|
||||
|
@ -201,6 +217,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function touch($path,$mtime=null) {
|
||||
$this->init();
|
||||
if(is_null($mtime)) {
|
||||
$mtime=time();
|
||||
}
|
||||
|
@ -209,11 +226,13 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function getFile($path,$target) {
|
||||
$this->init();
|
||||
$source=$this->fopen($path,'r');
|
||||
file_put_contents($target,$source);
|
||||
}
|
||||
|
||||
public function uploadFile($path,$target) {
|
||||
$this->init();
|
||||
$source=fopen($path,'r');
|
||||
|
||||
$curl = curl_init();
|
||||
|
@ -228,6 +247,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function rename($path1,$path2) {
|
||||
$this->init();
|
||||
$path1=$this->cleanPath($path1);
|
||||
$path2=$this->root.$this->cleanPath($path2);
|
||||
try{
|
||||
|
@ -239,6 +259,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function copy($path1,$path2) {
|
||||
$this->init();
|
||||
$path1=$this->cleanPath($path1);
|
||||
$path2=$this->root.$this->cleanPath($path2);
|
||||
try{
|
||||
|
@ -250,6 +271,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function stat($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$response=$this->client->propfind($path, array('{DAV:}getlastmodified','{DAV:}getcontentlength'));
|
||||
|
@ -263,6 +285,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
public function getMimeType($path) {
|
||||
$this->init();
|
||||
$path=$this->cleanPath($path);
|
||||
try{
|
||||
$response=$this->client->propfind($path, array('{DAV:}getcontenttype','{DAV:}resourcetype'));
|
||||
|
|
|
@ -30,7 +30,7 @@ return array(
|
|||
'root'=>'/',
|
||||
),
|
||||
'smb'=>array(
|
||||
'run'=>false,
|
||||
'run'=>true,
|
||||
'user'=>'test',
|
||||
'password'=>'test',
|
||||
'host'=>'localhost',
|
||||
|
|
Loading…
Reference in New Issue