summaryrefslogtreecommitdiffstats
path: root/lib/private/files/utils
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-09-25 13:36:30 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2013-09-30 16:36:59 +0200
commit9c9dc276b7a1d2592c4fb0a887888632dc1f1e29 (patch)
treebbe3aed3e09c31c68806bdb8acffef70ba08f51c /lib/private/files/utils
parenta711399e62d5a9f14d4b748efe4354ee37e61f13 (diff)
downloadnextcloud-server-9c9dc276b7a1d2592c4fb0a887888632dc1f1e29.tar.gz
nextcloud-server-9c9dc276b7a1d2592c4fb0a887888632dc1f1e29.zip
move the private namespace OC into lib/private - OCP will stay in lib/public
Conflicts: lib/private/vcategories.php
Diffstat (limited to 'lib/private/files/utils')
-rw-r--r--lib/private/files/utils/scanner.php96
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/private/files/utils/scanner.php b/lib/private/files/utils/scanner.php
new file mode 100644
index 00000000000..2cad7dd77bd
--- /dev/null
+++ b/lib/private/files/utils/scanner.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Utils;
+
+use OC\Files\Filesystem;
+use OC\Hooks\PublicEmitter;
+
+/**
+ * Class Scanner
+ *
+ * Hooks available in scope \OC\Utils\Scanner
+ * - scanFile(string $absolutePath)
+ * - scanFolder(string $absolutePath)
+ *
+ * @package OC\Files\Utils
+ */
+class Scanner extends PublicEmitter {
+ /**
+ * @var string $user
+ */
+ private $user;
+
+ /**
+ * @param string $user
+ */
+ public function __construct($user) {
+ $this->user = $user;
+ }
+
+ /**
+ * get all storages for $dir
+ *
+ * @param string $dir
+ * @return \OC\Files\Mount\Mount[]
+ */
+ protected function getMounts($dir) {
+ //TODO: move to the node based fileapi once that's done
+ \OC_Util::tearDownFS();
+ \OC_Util::setupFS($this->user);
+ $absolutePath = Filesystem::getView()->getAbsolutePath($dir);
+
+ $mountManager = Filesystem::getMountManager();
+ $mounts = $mountManager->findIn($absolutePath);
+ $mounts[] = $mountManager->find($absolutePath);
+ $mounts = array_reverse($mounts); //start with the mount of $dir
+
+ return $mounts;
+ }
+
+ /**
+ * attach listeners to the scanner
+ *
+ * @param \OC\Files\Mount\Mount $mount
+ */
+ protected function attachListener($mount) {
+ $scanner = $mount->getStorage()->getScanner();
+ $emitter = $this;
+ $scanner->listen('\OC\Files\Cache\Scanner', 'scanFile', function ($path) use ($mount, $emitter) {
+ $emitter->emit('\OC\Files\Utils\Scanner', 'scanFile', array($mount->getMountPoint() . $path));
+ });
+ $scanner->listen('\OC\Files\Cache\Scanner', 'scanFolder', function ($path) use ($mount, $emitter) {
+ $emitter->emit('\OC\Files\Utils\Scanner', 'scanFolder', array($mount->getMountPoint() . $path));
+ });
+ }
+
+ public function backgroundScan($dir) {
+ $mounts = $this->getMounts($dir);
+ foreach ($mounts as $mount) {
+ if (is_null($mount->getStorage())) {
+ continue;
+ }
+ $scanner = $mount->getStorage()->getScanner();
+ $this->attachListener($mount);
+ $scanner->backgroundScan();
+ }
+ }
+
+ public function scan($dir) {
+ $mounts = $this->getMounts($dir);
+ foreach ($mounts as $mount) {
+ if (is_null($mount->getStorage())) {
+ continue;
+ }
+ $scanner = $mount->getStorage()->getScanner();
+ $this->attachListener($mount);
+ $scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG);
+ }
+ }
+}
+