]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add missing smb files
authorRobin Appelman <robin@icewind.nl>
Fri, 6 Jan 2017 14:10:50 +0000 (15:10 +0100)
committerRobin Appelman <robin@icewind.nl>
Fri, 27 Jan 2017 09:44:29 +0000 (10:44 +0100)
Signed-off-by: Robin Appelman <robin@icewind.nl>
3rdparty
apps/files_external/3rdparty/icewind/smb/src/Change.php [new file with mode: 0644]
apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php [new file with mode: 0644]
apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php [new file with mode: 0644]
apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php [new file with mode: 0644]

index f2d8ba7bfebb769835b637f01eaa602e36cdcca0..204e4842df5d63c759f9c2d110c1a14036900e24 160000 (submodule)
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit f2d8ba7bfebb769835b637f01eaa602e36cdcca0
+Subproject commit 204e4842df5d63c759f9c2d110c1a14036900e24
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Change.php b/apps/files_external/3rdparty/icewind/smb/src/Change.php
new file mode 100644 (file)
index 0000000..9dfd57b
--- /dev/null
@@ -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;
+       }
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/DependencyException.php
new file mode 100644 (file)
index 0000000..3973557
--- /dev/null
@@ -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 {
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/INotifyHandler.php
new file mode 100644 (file)
index 0000000..1ee59b2
--- /dev/null
@@ -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();
+}
diff --git a/apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/NotifyHandler.php
new file mode 100644 (file)
index 0000000..194e848
--- /dev/null
@@ -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();
+       }
+}