Completed
Push — master ( 85c4a2...c508f5 )
by Roeland
16s queued 12s
created

CallbackReadDataWrapper::wrap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 0
cts 12
cp 0
rs 9.8666
c 0
b 0
f 0
cc 1
nc 1
nop 5
crap 2
1
<?php
2
3
namespace OCA\Files_Antivirus;
4
5
use Icewind\Streams\CallbackWrapper;
6
use Icewind\Streams\Wrapper;
7
8
class CallbackReadDataWrapper extends CallbackWrapper {
9
	/**
10
	 * @var callable
11
	 */
12
	protected $readDataCallback;
13
14
	/**
15
	 * Wraps a stream with the provided callbacks
16
	 *
17
	 * @param resource $source
18
	 * @param callable $readData (optional)
19
	 * @param callable $write (optional)
20
	 * @param callable $close (optional)
21
	 * @param callable $readDir (optional)
22
	 * @return resource
23
	 *
24
	 * @throws \BadMethodCallException
25
	 */
26
	public static function wrap($source, $readData = null, $write = null, $close = null, $readDir = null) {
27
		$context = stream_context_create(array(
28
			'callbackReadData' => array(
29
				'source' => $source,
30
				'readData' => $readData,
31
				'write' => $write,
32
				'close' => $close,
33
				'readDir' => $readDir
34
			)
35
		));
36
		return Wrapper::wrapSource($source, $context, 'callbackReadData', self::class);
37
	}
38
39
	protected function open() {
40
		$context = $this->loadContext('callbackReadData');
41
42
		$this->readDataCallback = $context['readData'];
43
		$this->writeCallback = $context['write'];
44
		$this->closeCallback = $context['close'];
45
		$this->readDirCallBack = $context['readDir'];
46
		return true;
47
	}
48
49
	public function stream_read($count) {
50
		$result = parent::stream_read($count);
51
		if (is_callable($this->readDataCallback)) {
52
			call_user_func($this->readDataCallback, $count, $result);
53
		}
54
		return $result;
55
	}
56
}
57