]> source.dussan.org Git - nextcloud-server.git/commitdiff
Various bug fixes for swift
authorBenjamin Liles <benliles@arch.tamu.edu>
Thu, 11 Oct 2012 13:52:21 +0000 (08:52 -0500)
committerBenjamin Liles <benliles@arch.tamu.edu>
Thu, 11 Oct 2012 13:52:21 +0000 (08:52 -0500)
apps/files_external/lib/swift.php

index c29d28b44c12a006cfac5c9015add66b33ba409e..4b0b8c25fda50a16469ebe91352e739aa44faf53 100644 (file)
@@ -39,7 +39,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
         * @return string
         */
        private function getContainerName($path) {
-               $path=trim($this->root.$path,'/');
+               $path=trim(trim($this->root,'/')."/".$path,'/.');
                return str_replace('/','\\',$path);
        }
 
@@ -70,11 +70,11 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
         * @return CF_Container
         */
        private function createContainer($path) {
-               if($path=='' or $path=='/') {
+               if($path=='' or $path=='/' or $path=='.') {
                        return $this->conn->create_container($this->getContainerName($path));
                }
                $parent=dirname($path);
-               if($parent=='' or $parent=='/') {
+               if($parent=='' or $parent=='/' or $parent=='.') {
                        $parentContainer=$this->rootContainer;
                }else{
                        if(!$this->containerExists($parent)) {
@@ -100,6 +100,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
                if(is_null($container)) {
                        return null;
                }else{
+                       if ($path=="/" or $path=='') {
+                               return null;
+                       }
                        try{
                                $obj=$container->get_object(basename($path));
                                $this->objects[$path]=$obj;
@@ -135,7 +138,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
        private function createObject($path) {
                $container=$this->getContainer(dirname($path));
                if(!is_null($container)) {
-                       $container=$this->createContainer($path);
+                       $container=$this->createContainer(dirname($path));
                }
                return $container->create_object(basename($path));
        }
@@ -277,7 +280,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
 
                $this->conn = new CF_Connection($this->auth);
 
-               if(!$this->containerExists($this->root)) {
+               if(!$this->containerExists('/')) {
                        $this->rootContainer=$this->createContainer('/');
                }else{
                        $this->rootContainer=$this->getContainer('/');
@@ -391,6 +394,9 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
        }
 
        public function unlink($path) {
+               if($this->containerExists($path)) {
+                       return $this->rmdir($path);
+               }
                if($this->objectExists($path)) {
                        $container=$this->getContainer(dirname($path));
                        $container->delete_object(basename($path));
@@ -401,13 +407,13 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
        }
 
        public function fopen($path,$mode) {
-               $obj=$this->getObject($path);
-               if(is_null($obj)) {
-                       return false;
-               }
                switch($mode) {
                        case 'r':
                        case 'rb':
+                               $obj=$this->getObject($path);
+                               if (is_null($obj)) {
+                                       return false;
+                               }
                                $fp = fopen('php://temp', 'r+');
                                $obj->stream($fp);
 
@@ -440,7 +446,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
        }
 
        public function free_space($path) {
-               return 0;
+               return 1024*1024*1024*8;
        }
 
        public function touch($path,$mtime=null) {
@@ -481,7 +487,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
        }
 
        public function stat($path) {
+               $container=$this->getContainer($path);
+               if (!is_null($container)) {
+                       return array(
+                               'mtime'=>-1,
+                               'size'=>$container->bytes_used,
+                               'ctime'=>-1
+                       );
+               }
+
                $obj=$this->getObject($path);
+
                if(is_null($obj)) {
                        return false;
                }
@@ -505,7 +521,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
                        $obj->save_to_filename($tmpFile);
                        return $tmpFile;
                }else{
-                       return false;
+                       return OCP\Files::tmpFile();
                }
        }