diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-08-19 02:30:33 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-08-19 02:30:33 +0200 |
commit | 9b44d0cb32795c5ec645922b204de88c8f33c196 (patch) | |
tree | ee77586e27cd12b07901a33a3a6180b081d1a2da | |
parent | eb4214821088529bc397af85ba2c5a2df5ba3c25 (diff) | |
download | nextcloud-server-9b44d0cb32795c5ec645922b204de88c8f33c196.tar.gz nextcloud-server-9b44d0cb32795c5ec645922b204de88c8f33c196.zip |
add OC_FileStorage::getLocalFolder
-rw-r--r-- | lib/filestorage.php | 1 | ||||
-rw-r--r-- | lib/filestorage/common.php | 20 | ||||
-rw-r--r-- | lib/filestorage/local.php | 5 | ||||
-rw-r--r-- | tests/lib/filestorage.php | 15 |
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(){ |