No known key found for this signature in database
GPG Key ID: 50F2B59C6DEBBCFE
5 changed files with 186 additions and 1 deletions
-
23rdparty
-
40apps/files_external/3rdparty/icewind/smb/src/Change.php
-
11apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php
-
46apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
-
88apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php
@ -1 +1 @@ |
|||
Subproject commit f2d8ba7bfebb769835b637f01eaa602e36cdcca0 |
|||
Subproject commit 204e4842df5d63c759f9c2d110c1a14036900e24 |
|||
@ -0,0 +1,40 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl> |
|||
* This file is licensed under the Licensed under the MIT license: |
|||
* http://opensource.org/licenses/MIT |
|||
* |
|||
*/ |
|||
|
|||
namespace Icewind\SMB; |
|||
|
|||
class Change { |
|||
private $code; |
|||
|
|||
private $path; |
|||
|
|||
/** |
|||
* Change constructor. |
|||
* |
|||
* @param $code |
|||
* @param $path |
|||
*/ |
|||
public function __construct($code, $path) { |
|||
$this->code = $code; |
|||
$this->path = $path; |
|||
} |
|||
|
|||
/** |
|||
* @return integer |
|||
*/ |
|||
public function getCode() { |
|||
return $this->code; |
|||
} |
|||
|
|||
/** |
|||
* @return string |
|||
*/ |
|||
public function getPath() { |
|||
return $this->path; |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
<?php |
|||
/** |
|||
* Copyright (c) 2016 Robin Appelman <icewind@owncloud.com> |
|||
* This file is licensed under the Licensed under the MIT license: |
|||
* http://opensource.org/licenses/MIT |
|||
*/ |
|||
|
|||
namespace Icewind\SMB\Exception; |
|||
|
|||
class DependencyException extends Exception { |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl> |
|||
* This file is licensed under the Licensed under the MIT license: |
|||
* http://opensource.org/licenses/MIT |
|||
* |
|||
*/ |
|||
|
|||
namespace Icewind\SMB; |
|||
|
|||
|
|||
interface INotifyHandler { |
|||
// https://msdn.microsoft.com/en-us/library/dn392331.aspx
|
|||
const NOTIFY_ADDED = 1; |
|||
const NOTIFY_REMOVED = 2; |
|||
const NOTIFY_MODIFIED = 3; |
|||
const NOTIFY_RENAMED_OLD = 4; |
|||
const NOTIFY_RENAMED_NEW = 5; |
|||
const NOTIFY_ADDED_STREAM = 6; |
|||
const NOTIFY_REMOVED_STREAM = 7; |
|||
const NOTIFY_MODIFIED_STREAM = 8; |
|||
const NOTIFY_REMOVED_BY_DELETE = 9; |
|||
|
|||
/** |
|||
* Get all changes detected since the start of the notify process or the last call to getChanges |
|||
* |
|||
* @return Change[] |
|||
*/ |
|||
public function getChanges(); |
|||
|
|||
/** |
|||
* Listen actively to all incoming changes |
|||
* |
|||
* Note that this is a blocking process and will cause the process to block forever if not explicitly terminated |
|||
* |
|||
* @param callable $callback |
|||
*/ |
|||
public function listen($callback); |
|||
|
|||
/** |
|||
* Stop listening for changes |
|||
* |
|||
* Note that any pending changes will be discarded |
|||
*/ |
|||
public function stop(); |
|||
} |
|||
@ -0,0 +1,88 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl> |
|||
* This file is licensed under the Licensed under the MIT license: |
|||
* http://opensource.org/licenses/MIT |
|||
* |
|||
*/ |
|||
|
|||
namespace Icewind\SMB; |
|||
|
|||
|
|||
class NotifyHandler implements INotifyHandler { |
|||
/** |
|||
* @var Connection |
|||
*/ |
|||
private $connection; |
|||
|
|||
/** |
|||
* @var string |
|||
*/ |
|||
private $path; |
|||
|
|||
private $listening = true; |
|||
|
|||
/** |
|||
* @param Connection $connection |
|||
* @param string $path |
|||
*/ |
|||
public function __construct(Connection $connection, $path) { |
|||
$this->connection = $connection; |
|||
$this->path = $path; |
|||
} |
|||
|
|||
/** |
|||
* Get all changes detected since the start of the notify process or the last call to getChanges |
|||
* |
|||
* @return Change[] |
|||
*/ |
|||
public function getChanges() { |
|||
if (!$this->listening) { |
|||
return []; |
|||
} |
|||
stream_set_blocking($this->connection->getOutputStream(), 0); |
|||
$lines = []; |
|||
while (($line = $this->connection->readLine())) { |
|||
$lines[] = $line; |
|||
} |
|||
stream_set_blocking($this->connection->getOutputStream(), 1); |
|||
return array_values(array_filter(array_map([$this, 'parseChangeLine'], $lines))); |
|||
} |
|||
|
|||
/** |
|||
* Listen actively to all incoming changes |
|||
* |
|||
* Note that this is a blocking process and will cause the process to block forever if not explicitly terminated |
|||
* |
|||
* @param callable $callback |
|||
*/ |
|||
public function listen($callback) { |
|||
if ($this->listening) { |
|||
$this->connection->read(function ($line) use ($callback) { |
|||
return $callback($this->parseChangeLine($line)); |
|||
}); |
|||
} |
|||
} |
|||
|
|||
private function parseChangeLine($line) { |
|||
$code = (int)substr($line, 0, 4); |
|||
if ($code === 0) { |
|||
return null; |
|||
} |
|||
$subPath = str_replace('\\', '/', substr($line, 5)); |
|||
if ($this->path === '') { |
|||
return new Change($code, $subPath); |
|||
} else { |
|||
return new Change($code, $this->path . '/' . $subPath); |
|||
} |
|||
} |
|||
|
|||
public function stop() { |
|||
$this->listening = false; |
|||
$this->connection->close(); |
|||
} |
|||
|
|||
public function __destruct() { |
|||
$this->stop(); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue