summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2012-07-27 12:14:18 +0200
committerBart Visscher <bartv@thisnet.nl>2012-07-27 19:35:28 +0200
commit1ea33ff36bf70ee2099f8d225f488dc220e3bcff (patch)
tree2ca34ad9fef5a0ee8a637f2e70dd75f0dcd27bcc /lib
parent2d85ef0e045380691b1dcf136b4b61b46104c2c6 (diff)
downloadnextcloud-server-1ea33ff36bf70ee2099f8d225f488dc220e3bcff.tar.gz
nextcloud-server-1ea33ff36bf70ee2099f8d225f488dc220e3bcff.zip
Chunked upload: Refactor OC_FileChunking to object
Diffstat (limited to 'lib')
-rw-r--r--lib/connector/sabre/directory.php7
-rw-r--r--lib/filechunking.php49
2 files changed, 35 insertions, 21 deletions
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<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);