]> source.dussan.org Git - nextcloud-server.git/commitdiff
Chunked upload: Refactor OC_FileChunking to object
authorBart Visscher <bartv@thisnet.nl>
Fri, 27 Jul 2012 10:14:18 +0000 (12:14 +0200)
committerBart Visscher <bartv@thisnet.nl>
Fri, 27 Jul 2012 17:35:28 +0000 (19:35 +0200)
lib/connector/sabre/directory.php
lib/filechunking.php

index b88d0f32864989678cac795bb724b029dd02c54a..09c65f19b80195b08972dc8b8d326c057ba70343 100644 (file)
@@ -49,12 +49,13 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
         */
        public function createFile($name, $data = null) {
                if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
-                       OC_FileChunking::store($name, $data);
                        $info = OC_FileChunking::decodeName($name);
-                       if (OC_FileChunking::isComplete($info)) {
+                       $chunk_handler = new OC_FileChunking($info);
+                       $chunk_handler->store($info['index'], $data);
+                       if ($chunk_handler->isComplete()) {
                                $newPath = $this->path . '/' . $info['name'];
                                $f = OC_Filesystem::fopen($newPath, 'w');
-                               OC_FileChunking::assemble($info, $f);
+                               $chunk_handler->assemble($f);
                                return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
                        }
                } else {
index 4e4918d49d4666f8fa5425e40763c33de4758655..9aead4c12fb9f94b05553edad8ed0c2439dafcaf 100644 (file)
@@ -8,42 +8,55 @@
 
 
 class OC_FileChunking {
+       protected $info;
+       protected $cache;
+
        static public function decodeName($name) {
                preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
                return $matches;
        }
 
-       static public function getPrefix($name, $transferid, $chunkcount) {
+       public function __construct($info) {
+               $this->info = $info;
+       }
+
+       public function getPrefix() {
+               $name = $this->info['name'];
+               $transferid = $this->info['transferid'];
+               $chunkcount = $this->info['chunkcount'];
+
                return $name.'-chunking-'.$transferid.'-'.$chunkcount.'-';
        }
 
-       static public function store($name, $data) {
-               $cache = new OC_Cache_File();
+       protected function getCache() {
+               if (!isset($this->cache)) {
+                       $this->cache = new OC_Cache_File();
+               }
+               return $this->cache;
+       }
+
+       public function store($index, $data) {
+               $cache = $this->getCache();
+               $name = $this->getPrefix().$index;
                $cache->set($name, $data);
        }
 
-       static public function isComplete($info) {
-               $prefix = OC_FileChunking::getPrefix($info['name'],
-                               $info['transferid'],
-                               $info['chunkcount']
-                       );
+       public function isComplete() {
+               $prefix = $this->getPrefix();
                $parts = 0;
-               $cache = new OC_Cache_File();
-               for($i=0; $i < $info['chunkcount']; $i++) {
+               $cache = $this->getCache();
+               for($i=0; $i < $this->info['chunkcount']; $i++) {
                        if ($cache->hasKey($prefix.$i)) {
                                $parts ++;
                        }
                }
-               return $parts == $info['chunkcount'];
+               return $parts == $this->info['chunkcount'];
        }
 
-       static public function assemble($info, $f) {
-               $cache = new OC_Cache_File();
-               $prefix = OC_FileChunking::getPrefix($info['name'],
-                               $info['transferid'],
-                               $info['chunkcount']
-                       );
-               for($i=0; $i < $info['chunkcount']; $i++) {
+       public function assemble($f) {
+               $cache = $this->getCache();
+               $prefix = $this->getPrefix();
+               for($i=0; $i < $this->info['chunkcount']; $i++) {
                        $chunk = $cache->get($prefix.$i);
                        $cache->remove($prefix.$i);
                        fwrite($f,$chunk);