aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-08-19 02:30:33 +0200
committerRobin Appelman <icewind@owncloud.com>2012-08-19 02:30:33 +0200
commit9b44d0cb32795c5ec645922b204de88c8f33c196 (patch)
treeee77586e27cd12b07901a33a3a6180b081d1a2da
parenteb4214821088529bc397af85ba2c5a2df5ba3c25 (diff)
downloadnextcloud-server-9b44d0cb32795c5ec645922b204de88c8f33c196.tar.gz
nextcloud-server-9b44d0cb32795c5ec645922b204de88c8f33c196.zip
add OC_FileStorage::getLocalFolder
-rw-r--r--lib/filestorage.php1
-rw-r--r--lib/filestorage/common.php20
-rw-r--r--lib/filestorage/local.php5
-rw-r--r--tests/lib/filestorage.php15
4 files changed, 39 insertions, 2 deletions
diff --git a/lib/filestorage.php b/lib/filestorage.php
index fd4ad36530e..672b9cb0d72 100644
--- a/lib/filestorage.php
+++ b/lib/filestorage.php
@@ -50,6 +50,7 @@ abstract class OC_Filestorage{
abstract public function search($query);
abstract public function touch($path, $mtime=null);
abstract public function getLocalFile($path);// get a path to a local version of the file, whether the original file is local or remote
+ abstract public function getLocalFolder($path);// get a path to a local version of the folder, whether the original file is local or remote
/**
* check if a file or folder has been updated since $time
* @param int $time
diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php
index c77df38e6b1..4f506a31495 100644
--- a/lib/filestorage/common.php
+++ b/lib/filestorage/common.php
@@ -223,6 +223,26 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
OC_Helper::streamCopy($source,$target);
return $tmpFile;
}
+ public function getLocalFolder($path){
+ $baseDir=OC_Helper::tmpFolder();
+ $this->addLocalFolder($path,$baseDir);
+ return $baseDir;
+ }
+ private function addLocalFolder($path,$target){
+ if($dh=$this->opendir($path)){
+ while($file=readdir($dh)){
+ if($file!=='.' and $file!=='..'){
+ if($this->is_dir($path.'/'.$file)){
+ mkdir($target.'/'.$file);
+ $this->addLocalFolder($path.'/'.$file,$target.'/'.$file);
+ }else{
+ $tmp=$this->toTmpFile($path.'/'.$file);
+ rename($tmp,$target.'/'.$file);
+ }
+ }
+ }
+ }
+ }
// abstract public function touch($path, $mtime=null);
protected function searchInDir($query,$dir=''){
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index d60f32b15be..2087663809f 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -168,7 +168,10 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{
return $this->searchInDir($query);
}
public function getLocalFile($path){
- return $this->datadir.$path;
+ return $this->datadir.$path;
+ }
+ public function getLocalFolder($path){
+ return $this->datadir.$path;
}
protected function searchInDir($query,$dir=''){
diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php
index 00f37b9f1a2..e554a75e441 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/filestorage.php
@@ -129,12 +129,25 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertEqual(file_get_contents($textFile),$this->instance->file_get_contents('/target.txt'));
}
- public function testLocalFile(){
+ public function testLocal(){
$textFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt',file_get_contents($textFile));
$localFile=$this->instance->getLocalFile('/lorem.txt');
$this->assertTrue(file_exists($localFile));
$this->assertEqual(file_get_contents($localFile),file_get_contents($textFile));
+
+ $this->instance->mkdir('/folder');
+ $this->instance->file_put_contents('/folder/lorem.txt',file_get_contents($textFile));
+ $this->instance->file_put_contents('/folder/bar.txt','asd');
+ $this->instance->mkdir('/folder/recursive');
+ $this->instance->file_put_contents('/folder/recursive/file.txt','foo');
+ $localFolder=$this->instance->getLocalFolder('/folder');
+
+ $this->assertTrue(is_dir($localFolder));
+ $this->assertTrue(file_exists($localFolder.'/lorem.txt'));
+ $this->assertEqual(file_get_contents($localFolder.'/lorem.txt'),file_get_contents($textFile));
+ $this->assertEqual(file_get_contents($localFolder.'/bar.txt'),'asd');
+ $this->assertEqual(file_get_contents($localFolder.'/recursive/file.txt'),'foo');
}
public function testStat(){