Completed
Pull Request — master (#6473)
by Roeland
13:24
created
lib/private/Command/CommandJob.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -29,12 +29,12 @@
 block discarded – undo
29 29
  * Wrap a command in the background job interface
30 30
  */
31 31
 class CommandJob extends QueuedJob {
32
-	protected function run($serializedCommand) {
33
-		$command = unserialize($serializedCommand);
34
-		if ($command instanceof ICommand) {
35
-			$command->handle();
36
-		} else {
37
-			throw new \InvalidArgumentException('Invalid serialized command');
38
-		}
39
-	}
32
+    protected function run($serializedCommand) {
33
+        $command = unserialize($serializedCommand);
34
+        if ($command instanceof ICommand) {
35
+            $command->handle();
36
+        } else {
37
+            throw new \InvalidArgumentException('Invalid serialized command');
38
+        }
39
+    }
40 40
 }
Please login to merge, or discard this patch.
lib/private/Template/ResourceNotFoundException.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -24,23 +24,23 @@
 block discarded – undo
24 24
 namespace OC\Template;
25 25
 
26 26
 class ResourceNotFoundException extends \LogicException {
27
-	protected $resource;
28
-	protected $webPath;
27
+    protected $resource;
28
+    protected $webPath;
29 29
 
30
-	/**
31
-	 * @param string $resource
32
-	 * @param string $webPath
33
-	 */
34
-	public function __construct($resource, $webPath) {
35
-		parent::__construct('Resource not found');
36
-		$this->resource = $resource;
37
-		$this->webPath = $webPath;
38
-	}
30
+    /**
31
+     * @param string $resource
32
+     * @param string $webPath
33
+     */
34
+    public function __construct($resource, $webPath) {
35
+        parent::__construct('Resource not found');
36
+        $this->resource = $resource;
37
+        $this->webPath = $webPath;
38
+    }
39 39
 
40
-	/**
41
-	 * @return string
42
-	 */
43
-	public function getResourcePath() {
44
-		return $this->webPath . '/' . $this->resource;
45
-	}
40
+    /**
41
+     * @return string
42
+     */
43
+    public function getResourcePath() {
44
+        return $this->webPath . '/' . $this->resource;
45
+    }
46 46
 }
Please login to merge, or discard this patch.
lib/private/Template/TemplateFileLocator.php 1 patch
Indentation   +29 added lines, -29 removed lines patch added patch discarded remove patch
@@ -26,37 +26,37 @@
 block discarded – undo
26 26
 namespace OC\Template;
27 27
 
28 28
 class TemplateFileLocator {
29
-	protected $dirs;
30
-	private $path;
29
+    protected $dirs;
30
+    private $path;
31 31
 
32
-	/**
33
-	 * @param string[] $dirs
34
-	 */
35
-	public function __construct( $dirs ) {
36
-		$this->dirs = $dirs;
37
-	}
32
+    /**
33
+     * @param string[] $dirs
34
+     */
35
+    public function __construct( $dirs ) {
36
+        $this->dirs = $dirs;
37
+    }
38 38
 
39
-	/**
40
-	 * @param string $template
41
-	 * @return string
42
-	 * @throws \Exception
43
-	 */
44
-	public function find( $template ) {
45
-		if ($template === '') {
46
-			throw new \InvalidArgumentException('Empty template name');
47
-		}
39
+    /**
40
+     * @param string $template
41
+     * @return string
42
+     * @throws \Exception
43
+     */
44
+    public function find( $template ) {
45
+        if ($template === '') {
46
+            throw new \InvalidArgumentException('Empty template name');
47
+        }
48 48
 
49
-		foreach($this->dirs as $dir) {
50
-			$file = $dir.$template.'.php';
51
-			if (is_file($file)) {
52
-				$this->path = $dir;
53
-				return $file;
54
-			}
55
-		}
56
-		throw new \Exception('template file not found: template:'.$template);
57
-	}
49
+        foreach($this->dirs as $dir) {
50
+            $file = $dir.$template.'.php';
51
+            if (is_file($file)) {
52
+                $this->path = $dir;
53
+                return $file;
54
+            }
55
+        }
56
+        throw new \Exception('template file not found: template:'.$template);
57
+    }
58 58
 
59
-	public function getPath() {
60
-		return $this->path;
61
-	}
59
+    public function getPath() {
60
+        return $this->path;
61
+    }
62 62
 }
Please login to merge, or discard this patch.
lib/private/Hooks/BasicEmitter.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -24,5 +24,5 @@
 block discarded – undo
24 24
 namespace OC\Hooks;
25 25
 
26 26
 abstract class BasicEmitter implements Emitter {
27
-	use EmitterTrait;
27
+    use EmitterTrait;
28 28
 }
Please login to merge, or discard this patch.
lib/private/Hooks/Emitter.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -32,19 +32,19 @@
 block discarded – undo
32 32
  * @package OC\Hooks
33 33
  */
34 34
 interface Emitter {
35
-	/**
36
-	 * @param string $scope
37
-	 * @param string $method
38
-	 * @param callable $callback
39
-	 * @return void
40
-	 */
41
-	public function listen($scope, $method, callable $callback);
35
+    /**
36
+     * @param string $scope
37
+     * @param string $method
38
+     * @param callable $callback
39
+     * @return void
40
+     */
41
+    public function listen($scope, $method, callable $callback);
42 42
 
43
-	/**
44
-	 * @param string $scope optional
45
-	 * @param string $method optional
46
-	 * @param callable $callback optional
47
-	 * @return void
48
-	 */
49
-	public function removeListener($scope = null, $method = null, callable $callback = null);
43
+    /**
44
+     * @param string $scope optional
45
+     * @param string $method optional
46
+     * @param callable $callback optional
47
+     * @return void
48
+     */
49
+    public function removeListener($scope = null, $method = null, callable $callback = null);
50 50
 }
Please login to merge, or discard this patch.
lib/private/Hooks/ForwardingEmitter.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -31,35 +31,35 @@
 block discarded – undo
31 31
  * @package OC\Hooks
32 32
  */
33 33
 abstract class ForwardingEmitter extends BasicEmitter {
34
-	/**
35
-	 * @var \OC\Hooks\Emitter[] array
36
-	 */
37
-	private $forwardEmitters = array();
34
+    /**
35
+     * @var \OC\Hooks\Emitter[] array
36
+     */
37
+    private $forwardEmitters = array();
38 38
 
39
-	/**
40
-	 * @param string $scope
41
-	 * @param string $method
42
-	 * @param callable $callback
43
-	 */
44
-	public function listen($scope, $method, callable $callback) {
45
-		parent::listen($scope, $method, $callback);
46
-		foreach ($this->forwardEmitters as $emitter) {
47
-			$emitter->listen($scope, $method, $callback);
48
-		}
49
-	}
39
+    /**
40
+     * @param string $scope
41
+     * @param string $method
42
+     * @param callable $callback
43
+     */
44
+    public function listen($scope, $method, callable $callback) {
45
+        parent::listen($scope, $method, $callback);
46
+        foreach ($this->forwardEmitters as $emitter) {
47
+            $emitter->listen($scope, $method, $callback);
48
+        }
49
+    }
50 50
 
51
-	/**
52
-	 * @param \OC\Hooks\Emitter $emitter
53
-	 */
54
-	protected function forward(Emitter $emitter) {
55
-		$this->forwardEmitters[] = $emitter;
51
+    /**
52
+     * @param \OC\Hooks\Emitter $emitter
53
+     */
54
+    protected function forward(Emitter $emitter) {
55
+        $this->forwardEmitters[] = $emitter;
56 56
 
57
-		//forward all previously connected hooks
58
-		foreach ($this->listeners as $key => $listeners) {
59
-			list($scope, $method) = explode('::', $key, 2);
60
-			foreach ($listeners as $listener) {
61
-				$emitter->listen($scope, $method, $listener);
62
-			}
63
-		}
64
-	}
57
+        //forward all previously connected hooks
58
+        foreach ($this->listeners as $key => $listeners) {
59
+            list($scope, $method) = explode('::', $key, 2);
60
+            foreach ($listeners as $listener) {
61
+                $emitter->listen($scope, $method, $listener);
62
+            }
63
+        }
64
+    }
65 65
 }
Please login to merge, or discard this patch.
lib/private/Hooks/EmitterTrait.php 1 patch
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -24,80 +24,80 @@
 block discarded – undo
24 24
 
25 25
 trait EmitterTrait {
26 26
 
27
-	/**
28
-	 * @var (callable[])[] $listeners
29
-	 */
30
-	protected $listeners = array();
27
+    /**
28
+     * @var (callable[])[] $listeners
29
+     */
30
+    protected $listeners = array();
31 31
 
32
-	/**
33
-	 * @param string $scope
34
-	 * @param string $method
35
-	 * @param callable $callback
36
-	 */
37
-	public function listen($scope, $method, callable $callback) {
38
-		$eventName = $scope . '::' . $method;
39
-		if (!isset($this->listeners[$eventName])) {
40
-			$this->listeners[$eventName] = array();
41
-		}
42
-		if (array_search($callback, $this->listeners[$eventName], true) === false) {
43
-			$this->listeners[$eventName][] = $callback;
44
-		}
45
-	}
32
+    /**
33
+     * @param string $scope
34
+     * @param string $method
35
+     * @param callable $callback
36
+     */
37
+    public function listen($scope, $method, callable $callback) {
38
+        $eventName = $scope . '::' . $method;
39
+        if (!isset($this->listeners[$eventName])) {
40
+            $this->listeners[$eventName] = array();
41
+        }
42
+        if (array_search($callback, $this->listeners[$eventName], true) === false) {
43
+            $this->listeners[$eventName][] = $callback;
44
+        }
45
+    }
46 46
 
47
-	/**
48
-	 * @param string $scope optional
49
-	 * @param string $method optional
50
-	 * @param callable $callback optional
51
-	 */
52
-	public function removeListener($scope = null, $method = null, callable $callback = null) {
53
-		$names = array();
54
-		$allNames = array_keys($this->listeners);
55
-		if ($scope and $method) {
56
-			$name = $scope . '::' . $method;
57
-			if (isset($this->listeners[$name])) {
58
-				$names[] = $name;
59
-			}
60
-		} elseif ($scope) {
61
-			foreach ($allNames as $name) {
62
-				$parts = explode('::', $name, 2);
63
-				if ($parts[0] == $scope) {
64
-					$names[] = $name;
65
-				}
66
-			}
67
-		} elseif ($method) {
68
-			foreach ($allNames as $name) {
69
-				$parts = explode('::', $name, 2);
70
-				if ($parts[1] == $method) {
71
-					$names[] = $name;
72
-				}
73
-			}
74
-		} else {
75
-			$names = $allNames;
76
-		}
47
+    /**
48
+     * @param string $scope optional
49
+     * @param string $method optional
50
+     * @param callable $callback optional
51
+     */
52
+    public function removeListener($scope = null, $method = null, callable $callback = null) {
53
+        $names = array();
54
+        $allNames = array_keys($this->listeners);
55
+        if ($scope and $method) {
56
+            $name = $scope . '::' . $method;
57
+            if (isset($this->listeners[$name])) {
58
+                $names[] = $name;
59
+            }
60
+        } elseif ($scope) {
61
+            foreach ($allNames as $name) {
62
+                $parts = explode('::', $name, 2);
63
+                if ($parts[0] == $scope) {
64
+                    $names[] = $name;
65
+                }
66
+            }
67
+        } elseif ($method) {
68
+            foreach ($allNames as $name) {
69
+                $parts = explode('::', $name, 2);
70
+                if ($parts[1] == $method) {
71
+                    $names[] = $name;
72
+                }
73
+            }
74
+        } else {
75
+            $names = $allNames;
76
+        }
77 77
 
78
-		foreach ($names as $name) {
79
-			if ($callback) {
80
-				$index = array_search($callback, $this->listeners[$name], true);
81
-				if ($index !== false) {
82
-					unset($this->listeners[$name][$index]);
83
-				}
84
-			} else {
85
-				$this->listeners[$name] = array();
86
-			}
87
-		}
88
-	}
78
+        foreach ($names as $name) {
79
+            if ($callback) {
80
+                $index = array_search($callback, $this->listeners[$name], true);
81
+                if ($index !== false) {
82
+                    unset($this->listeners[$name][$index]);
83
+                }
84
+            } else {
85
+                $this->listeners[$name] = array();
86
+            }
87
+        }
88
+    }
89 89
 
90
-	/**
91
-	 * @param string $scope
92
-	 * @param string $method
93
-	 * @param array $arguments optional
94
-	 */
95
-	protected function emit($scope, $method, array $arguments = array()) {
96
-		$eventName = $scope . '::' . $method;
97
-		if (isset($this->listeners[$eventName])) {
98
-			foreach ($this->listeners[$eventName] as $callback) {
99
-				call_user_func_array($callback, $arguments);
100
-			}
101
-		}
102
-	}
90
+    /**
91
+     * @param string $scope
92
+     * @param string $method
93
+     * @param array $arguments optional
94
+     */
95
+    protected function emit($scope, $method, array $arguments = array()) {
96
+        $eventName = $scope . '::' . $method;
97
+        if (isset($this->listeners[$eventName])) {
98
+            foreach ($this->listeners[$eventName] as $callback) {
99
+                call_user_func_array($callback, $arguments);
100
+            }
101
+        }
102
+    }
103 103
 }
Please login to merge, or discard this patch.
lib/private/HTTPHelper.php 1 patch
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -34,87 +34,87 @@
 block discarded – undo
34 34
  * @deprecated Use \OCP\Http\Client\IClientService
35 35
  */
36 36
 class HTTPHelper {
37
-	const USER_AGENT = 'ownCloud Server Crawler';
37
+    const USER_AGENT = 'ownCloud Server Crawler';
38 38
 
39
-	/** @var \OCP\IConfig */
40
-	private $config;
41
-	/** @var IClientService  */
42
-	private $clientService;
39
+    /** @var \OCP\IConfig */
40
+    private $config;
41
+    /** @var IClientService  */
42
+    private $clientService;
43 43
 
44
-	/**
45
-	 * @param IConfig $config
46
-	 * @param IClientService $clientService
47
-	 */
48
-	public function __construct(IConfig $config,
49
-								IClientService $clientService) {
50
-		$this->config = $config;
51
-		$this->clientService = $clientService;
52
-	}
44
+    /**
45
+     * @param IConfig $config
46
+     * @param IClientService $clientService
47
+     */
48
+    public function __construct(IConfig $config,
49
+                                IClientService $clientService) {
50
+        $this->config = $config;
51
+        $this->clientService = $clientService;
52
+    }
53 53
 
54
-	/**
55
-	 * Get URL content
56
-	 * @param string $url Url to get content
57
-	 * @throws \Exception If the URL does not start with http:// or https://
58
-	 * @return string of the response or false on error
59
-	 * This function get the content of a page via curl, if curl is enabled.
60
-	 * If not, file_get_contents is used.
61
-	 * @deprecated Use \OCP\Http\Client\IClientService
62
-	 */
63
-	public function getUrlContent($url) {
64
-		try {
65
-			$client = $this->clientService->newClient();
66
-			$response = $client->get($url);
67
-			return $response->getBody();
68
-		} catch (\Exception $e) {
69
-			return false;
70
-		}
71
-	}
54
+    /**
55
+     * Get URL content
56
+     * @param string $url Url to get content
57
+     * @throws \Exception If the URL does not start with http:// or https://
58
+     * @return string of the response or false on error
59
+     * This function get the content of a page via curl, if curl is enabled.
60
+     * If not, file_get_contents is used.
61
+     * @deprecated Use \OCP\Http\Client\IClientService
62
+     */
63
+    public function getUrlContent($url) {
64
+        try {
65
+            $client = $this->clientService->newClient();
66
+            $response = $client->get($url);
67
+            return $response->getBody();
68
+        } catch (\Exception $e) {
69
+            return false;
70
+        }
71
+    }
72 72
 
73
-	/**
74
-	 * Returns the response headers of a HTTP URL without following redirects
75
-	 * @param string $location Needs to be a HTTPS or HTTP URL
76
-	 * @return array
77
-	 * @deprecated Use \OCP\Http\Client\IClientService
78
-	 */
79
-	public function getHeaders($location) {
80
-		$client = $this->clientService->newClient();
81
-		$response = $client->get($location);
82
-		return $response->getHeaders();
83
-	}
73
+    /**
74
+     * Returns the response headers of a HTTP URL without following redirects
75
+     * @param string $location Needs to be a HTTPS or HTTP URL
76
+     * @return array
77
+     * @deprecated Use \OCP\Http\Client\IClientService
78
+     */
79
+    public function getHeaders($location) {
80
+        $client = $this->clientService->newClient();
81
+        $response = $client->get($location);
82
+        return $response->getHeaders();
83
+    }
84 84
 
85
-	/**
86
-	 * Checks whether the supplied URL begins with HTTPS:// or HTTP:// (case insensitive)
87
-	 * @param string $url
88
-	 * @return bool
89
-	 */
90
-	public function isHTTPURL($url) {
91
-		return stripos($url, 'https://') === 0 || stripos($url, 'http://') === 0;
92
-	}
85
+    /**
86
+     * Checks whether the supplied URL begins with HTTPS:// or HTTP:// (case insensitive)
87
+     * @param string $url
88
+     * @return bool
89
+     */
90
+    public function isHTTPURL($url) {
91
+        return stripos($url, 'https://') === 0 || stripos($url, 'http://') === 0;
92
+    }
93 93
 
94
-	/**
95
-	 * send http post request
96
-	 *
97
-	 * @param string $url
98
-	 * @param array $fields data send by the request
99
-	 * @return array
100
-	 * @deprecated Use \OCP\Http\Client\IClientService
101
-	 */
102
-	public function post($url, array $fields) {
103
-		$client = $this->clientService->newClient();
94
+    /**
95
+     * send http post request
96
+     *
97
+     * @param string $url
98
+     * @param array $fields data send by the request
99
+     * @return array
100
+     * @deprecated Use \OCP\Http\Client\IClientService
101
+     */
102
+    public function post($url, array $fields) {
103
+        $client = $this->clientService->newClient();
104 104
 
105
-		try {
106
-			$response = $client->post(
107
-				$url,
108
-				[
109
-					'body' => $fields,
110
-					'connect_timeout' => 10,
111
-				]
112
-			);
113
-		} catch (\Exception $e) {
114
-			return ['success' => false, 'result' => $e->getMessage()];
115
-		}
105
+        try {
106
+            $response = $client->post(
107
+                $url,
108
+                [
109
+                    'body' => $fields,
110
+                    'connect_timeout' => 10,
111
+                ]
112
+            );
113
+        } catch (\Exception $e) {
114
+            return ['success' => false, 'result' => $e->getMessage()];
115
+        }
116 116
 
117
-		return ['success' => true, 'result' => $response->getBody()];
118
-	}
117
+        return ['success' => true, 'result' => $response->getBody()];
118
+    }
119 119
 
120 120
 }
Please login to merge, or discard this patch.
lib/private/legacy/filechunking.php 1 patch
Indentation   +152 added lines, -152 removed lines patch added patch discarded remove patch
@@ -30,156 +30,156 @@
 block discarded – undo
30 30
 
31 31
 
32 32
 class OC_FileChunking {
33
-	protected $info;
34
-	protected $cache;
35
-
36
-	/**
37
-	 * TTL of chunks
38
-	 *
39
-	 * @var int
40
-	 */
41
-	protected $ttl;
42
-
43
-	static public function decodeName($name) {
44
-		preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
45
-		return $matches;
46
-	}
47
-
48
-	/**
49
-	 * @param string[] $info
50
-	 */
51
-	public function __construct($info) {
52
-		$this->info = $info;
53
-		$this->ttl = \OC::$server->getConfig()->getSystemValue('cache_chunk_gc_ttl', 86400);
54
-	}
55
-
56
-	public function getPrefix() {
57
-		$name = $this->info['name'];
58
-		$transferid = $this->info['transferid'];
59
-
60
-		return $name.'-chunking-'.$transferid.'-';
61
-	}
62
-
63
-	protected function getCache() {
64
-		if (!isset($this->cache)) {
65
-			$this->cache = new \OC\Cache\File();
66
-		}
67
-		return $this->cache;
68
-	}
69
-
70
-	/**
71
-	 * Stores the given $data under the given $key - the number of stored bytes is returned
72
-	 *
73
-	 * @param string $index
74
-	 * @param resource $data
75
-	 * @return int
76
-	 */
77
-	public function store($index, $data) {
78
-		$cache = $this->getCache();
79
-		$name = $this->getPrefix().$index;
80
-		$cache->set($name, $data, $this->ttl);
81
-
82
-		return $cache->size($name);
83
-	}
84
-
85
-	public function isComplete() {
86
-		$prefix = $this->getPrefix();
87
-		$cache = $this->getCache();
88
-		$chunkcount = (int)$this->info['chunkcount'];
89
-
90
-		for($i=($chunkcount-1); $i >= 0; $i--) {
91
-			if (!$cache->hasKey($prefix.$i)) {
92
-				return false;
93
-			}
94
-		}
95
-
96
-		return true;
97
-	}
98
-
99
-	/**
100
-	 * Assembles the chunks into the file specified by the path.
101
-	 * Chunks are deleted afterwards.
102
-	 *
103
-	 * @param resource $f target path
104
-	 *
105
-	 * @return integer assembled file size
106
-	 *
107
-	 * @throws \OC\InsufficientStorageException when file could not be fully
108
-	 * assembled due to lack of free space
109
-	 */
110
-	public function assemble($f) {
111
-		$cache = $this->getCache();
112
-		$prefix = $this->getPrefix();
113
-		$count = 0;
114
-		for ($i = 0; $i < $this->info['chunkcount']; $i++) {
115
-			$chunk = $cache->get($prefix.$i);
116
-			// remove after reading to directly save space
117
-			$cache->remove($prefix.$i);
118
-			$count += fwrite($f, $chunk);
119
-			// let php release the memory to work around memory exhausted error with php 5.6
120
-			$chunk = null;
121
-		}
122
-
123
-		return $count;
124
-	}
125
-
126
-	/**
127
-	 * Returns the size of the chunks already present
128
-	 * @return integer size in bytes
129
-	 */
130
-	public function getCurrentSize() {
131
-		$cache = $this->getCache();
132
-		$prefix = $this->getPrefix();
133
-		$total = 0;
134
-		for ($i = 0; $i < $this->info['chunkcount']; $i++) {
135
-			$total += $cache->size($prefix.$i);
136
-		}
137
-		return $total;
138
-	}
139
-
140
-	/**
141
-	 * Removes all chunks which belong to this transmission
142
-	 */
143
-	public function cleanup() {
144
-		$cache = $this->getCache();
145
-		$prefix = $this->getPrefix();
146
-		for($i=0; $i < $this->info['chunkcount']; $i++) {
147
-			$cache->remove($prefix.$i);
148
-		}
149
-	}
150
-
151
-	/**
152
-	 * Removes one specific chunk
153
-	 * @param string $index
154
-	 */
155
-	public function remove($index) {
156
-		$cache = $this->getCache();
157
-		$prefix = $this->getPrefix();
158
-		$cache->remove($prefix.$index);
159
-	}
160
-
161
-	/**
162
-	 * Assembles the chunks into the file specified by the path.
163
-	 * Also triggers the relevant hooks and proxies.
164
-	 *
165
-	 * @param \OC\Files\Storage\Storage $storage storage
166
-	 * @param string $path target path relative to the storage
167
-	 * @return bool true on success or false if file could not be created
168
-	 *
169
-	 * @throws \OC\ServerNotAvailableException
170
-	 */
171
-	public function file_assemble($storage, $path) {
172
-		// use file_put_contents as method because that best matches what this function does
173
-		if (\OC\Files\Filesystem::isValidPath($path)) {
174
-			$target = $storage->fopen($path, 'w');
175
-			if ($target) {
176
-				$count = $this->assemble($target);
177
-				fclose($target);
178
-				return $count > 0;
179
-			} else {
180
-				return false;
181
-			}
182
-		}
183
-		return false;
184
-	}
33
+    protected $info;
34
+    protected $cache;
35
+
36
+    /**
37
+     * TTL of chunks
38
+     *
39
+     * @var int
40
+     */
41
+    protected $ttl;
42
+
43
+    static public function decodeName($name) {
44
+        preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
45
+        return $matches;
46
+    }
47
+
48
+    /**
49
+     * @param string[] $info
50
+     */
51
+    public function __construct($info) {
52
+        $this->info = $info;
53
+        $this->ttl = \OC::$server->getConfig()->getSystemValue('cache_chunk_gc_ttl', 86400);
54
+    }
55
+
56
+    public function getPrefix() {
57
+        $name = $this->info['name'];
58
+        $transferid = $this->info['transferid'];
59
+
60
+        return $name.'-chunking-'.$transferid.'-';
61
+    }
62
+
63
+    protected function getCache() {
64
+        if (!isset($this->cache)) {
65
+            $this->cache = new \OC\Cache\File();
66
+        }
67
+        return $this->cache;
68
+    }
69
+
70
+    /**
71
+     * Stores the given $data under the given $key - the number of stored bytes is returned
72
+     *
73
+     * @param string $index
74
+     * @param resource $data
75
+     * @return int
76
+     */
77
+    public function store($index, $data) {
78
+        $cache = $this->getCache();
79
+        $name = $this->getPrefix().$index;
80
+        $cache->set($name, $data, $this->ttl);
81
+
82
+        return $cache->size($name);
83
+    }
84
+
85
+    public function isComplete() {
86
+        $prefix = $this->getPrefix();
87
+        $cache = $this->getCache();
88
+        $chunkcount = (int)$this->info['chunkcount'];
89
+
90
+        for($i=($chunkcount-1); $i >= 0; $i--) {
91
+            if (!$cache->hasKey($prefix.$i)) {
92
+                return false;
93
+            }
94
+        }
95
+
96
+        return true;
97
+    }
98
+
99
+    /**
100
+     * Assembles the chunks into the file specified by the path.
101
+     * Chunks are deleted afterwards.
102
+     *
103
+     * @param resource $f target path
104
+     *
105
+     * @return integer assembled file size
106
+     *
107
+     * @throws \OC\InsufficientStorageException when file could not be fully
108
+     * assembled due to lack of free space
109
+     */
110
+    public function assemble($f) {
111
+        $cache = $this->getCache();
112
+        $prefix = $this->getPrefix();
113
+        $count = 0;
114
+        for ($i = 0; $i < $this->info['chunkcount']; $i++) {
115
+            $chunk = $cache->get($prefix.$i);
116
+            // remove after reading to directly save space
117
+            $cache->remove($prefix.$i);
118
+            $count += fwrite($f, $chunk);
119
+            // let php release the memory to work around memory exhausted error with php 5.6
120
+            $chunk = null;
121
+        }
122
+
123
+        return $count;
124
+    }
125
+
126
+    /**
127
+     * Returns the size of the chunks already present
128
+     * @return integer size in bytes
129
+     */
130
+    public function getCurrentSize() {
131
+        $cache = $this->getCache();
132
+        $prefix = $this->getPrefix();
133
+        $total = 0;
134
+        for ($i = 0; $i < $this->info['chunkcount']; $i++) {
135
+            $total += $cache->size($prefix.$i);
136
+        }
137
+        return $total;
138
+    }
139
+
140
+    /**
141
+     * Removes all chunks which belong to this transmission
142
+     */
143
+    public function cleanup() {
144
+        $cache = $this->getCache();
145
+        $prefix = $this->getPrefix();
146
+        for($i=0; $i < $this->info['chunkcount']; $i++) {
147
+            $cache->remove($prefix.$i);
148
+        }
149
+    }
150
+
151
+    /**
152
+     * Removes one specific chunk
153
+     * @param string $index
154
+     */
155
+    public function remove($index) {
156
+        $cache = $this->getCache();
157
+        $prefix = $this->getPrefix();
158
+        $cache->remove($prefix.$index);
159
+    }
160
+
161
+    /**
162
+     * Assembles the chunks into the file specified by the path.
163
+     * Also triggers the relevant hooks and proxies.
164
+     *
165
+     * @param \OC\Files\Storage\Storage $storage storage
166
+     * @param string $path target path relative to the storage
167
+     * @return bool true on success or false if file could not be created
168
+     *
169
+     * @throws \OC\ServerNotAvailableException
170
+     */
171
+    public function file_assemble($storage, $path) {
172
+        // use file_put_contents as method because that best matches what this function does
173
+        if (\OC\Files\Filesystem::isValidPath($path)) {
174
+            $target = $storage->fopen($path, 'w');
175
+            if ($target) {
176
+                $count = $this->assemble($target);
177
+                fclose($target);
178
+                return $count > 0;
179
+            } else {
180
+                return false;
181
+            }
182
+        }
183
+        return false;
184
+    }
185 185
 }
Please login to merge, or discard this patch.