From: Bart Visscher Date: Fri, 27 Jul 2012 10:14:18 +0000 (+0200) Subject: Chunked upload: Refactor OC_FileChunking to object X-Git-Tag: v4.5.0beta1~74^2~225^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1ea33ff36bf70ee2099f8d225f488dc220e3bcff;p=nextcloud-server.git Chunked upload: Refactor OC_FileChunking to object --- diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index b88d0f32864..09c65f19b80 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -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 { diff --git a/lib/filechunking.php b/lib/filechunking.php index 4e4918d49d4..9aead4c12fb 100644 --- a/lib/filechunking.php +++ b/lib/filechunking.php @@ -8,42 +8,55 @@ class OC_FileChunking { + protected $info; + protected $cache; + static public function decodeName($name) { preg_match('/(?P.*)-chunking-(?P\d+)-(?P\d+)-(?P\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);