summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-10-21 22:04:45 +0200
committerRobin Appelman <icewind@owncloud.com>2012-10-21 22:04:45 +0200
commit33cabcf590401763609570a86f7bc7540dbf1fc5 (patch)
treec20f0fc3ba4dd4fdc0f9f2c04f040aa1d4d1ee8b
parent5217ca219a380c1ae8c6cdc56b83ceeb055edf15 (diff)
downloadnextcloud-server-33cabcf590401763609570a86f7bc7540dbf1fc5.tar.gz
nextcloud-server-33cabcf590401763609570a86f7bc7540dbf1fc5.zip
postpone the cost of setting up some of the external storage backends untill we actually need it
-rw-r--r--apps/files_external/lib/ftp.php2
-rw-r--r--apps/files_external/lib/smb.php7
-rw-r--r--apps/files_external/lib/streamwrapper.php26
-rw-r--r--apps/files_external/lib/swift.php29
-rw-r--r--apps/files_external/lib/webdav.php23
-rw-r--r--apps/files_external/tests/config.php2
6 files changed, 81 insertions, 8 deletions
diff --git a/apps/files_external/lib/ftp.php b/apps/files_external/lib/ftp.php
index dea44728f3c..e76eca0be38 100644
--- a/apps/files_external/lib/ftp.php
+++ b/apps/files_external/lib/ftp.php
@@ -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);
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index dfba3105ecb..4382f630031 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -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;
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index 750bdbaf4d4..bc1c95c5e8f 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -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));
}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index c3578b0c23e..55c2c3e0ac9 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -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);
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index c9785f3eb11..470a80f8cf3 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -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'));
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index 5af317675cb..65127175ad7 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -30,7 +30,7 @@ return array(
'root'=>'/',
),
'smb'=>array(
- 'run'=>false,
+ 'run'=>true,
'user'=>'test',
'password'=>'test',
'host'=>'localhost',