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