Merge pull request #4131 from owncloud/scanner-split
Remove scanner logic from ajax file and place it in it's own classremotes/origin/stable6
commit
37a731bcad
@ -0,0 +1,89 @@
|
|||||||
|
<?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\Hooks\BasicEmitter;
|
||||||
|
use OC\Files\Filesystem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Scanner
|
||||||
|
*
|
||||||
|
* Hooks available in scope \OC\Utils\Scanner
|
||||||
|
* - scanFile(string $absolutePath)
|
||||||
|
* - scanFolder(string $absolutePath)
|
||||||
|
*
|
||||||
|
* @package OC\Files\Utils
|
||||||
|
*/
|
||||||
|
class Scanner extends BasicEmitter {
|
||||||
|
/**
|
||||||
|
* @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();
|
||||||
|
$scanner->listen('\OC\Files\Cache\Scanner', 'scanFile', function ($path) use ($mount) {
|
||||||
|
$this->emit('\OC\Files\Utils\Scanner', 'scanFile', array($mount->getMountPoint() . $path));
|
||||||
|
});
|
||||||
|
$scanner->listen('\OC\Files\Cache\Scanner', 'scanFolder', function ($path) use ($mount) {
|
||||||
|
$this->emit('\OC\Files\Utils\Scanner', 'scanFolder', array($mount->getMountPoint() . $path));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function backgroundScan($dir) {
|
||||||
|
$mounts = $this->getMounts($dir);
|
||||||
|
foreach ($mounts as $mount) {
|
||||||
|
$scanner = $mount->getStorage()->getScanner();
|
||||||
|
$this->attachListener($mount);
|
||||||
|
$scanner->backgroundScan();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scan($dir) {
|
||||||
|
$mounts = $this->getMounts($dir);
|
||||||
|
foreach ($mounts as $mount) {
|
||||||
|
$scanner = $mount->getStorage()->getScanner();
|
||||||
|
$this->attachListener($mount);
|
||||||
|
$scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue