Merge pull request #3784 from owncloud/rescan-all

Give admins the ability to rescan the filesystem for multiple users at once
This commit is contained in:
Thomas Müller 2013-06-20 01:41:49 -07:00
commit 5aaf807366
2 changed files with 45 additions and 15 deletions

View File

@ -4,6 +4,16 @@ session_write_close();
$force = (isset($_GET['force']) and ($_GET['force'] === 'true')); $force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
$dir = isset($_GET['dir']) ? $_GET['dir'] : ''; $dir = isset($_GET['dir']) ? $_GET['dir'] : '';
if (isset($_GET['users'])) {
OC_JSON::checkAdminUser();
if ($_GET['users'] === 'all') {
$users = OC_User::getUsers();
} else {
$users = json_decode($_GET['users']);
}
} else {
$users = array(OC_User::getUser());
}
$eventSource = new OC_EventSource(); $eventSource = new OC_EventSource();
ScanListener::$eventSource = $eventSource; ScanListener::$eventSource = $eventSource;
@ -12,21 +22,27 @@ ScanListener::$view = \OC\Files\Filesystem::getView();
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder'); OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_folder', 'ScanListener', 'folder');
OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file'); OC_Hook::connect('\OC\Files\Cache\Scanner', 'scan_file', 'ScanListener', 'file');
$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir); foreach ($users as $user) {
$eventSource->send('user', $user);
OC_Util::tearDownFS();
OC_Util::setupFS($user);
$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath); $absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
foreach ($mountPoints as $mountPoint) { $mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
$storage = \OC\Files\Filesystem::getStorage($mountPoint); $mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
if ($storage) { $mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
$scanner = $storage->getScanner(); foreach ($mountPoints as $mountPoint) {
if ($force) { $storage = \OC\Files\Filesystem::getStorage($mountPoint);
$scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG); if ($storage) {
} else { ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
$scanner->backgroundScan(); $scanner = $storage->getScanner();
if ($force) {
$scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG);
} else {
$scanner->backgroundScan();
}
} }
} }
} }

View File

@ -695,7 +695,7 @@ $(document).ready(function() {
} }
}); });
function scanFiles(force, dir){ function scanFiles(force, dir, users){
if (!OC.currentUser) { if (!OC.currentUser) {
return; return;
} }
@ -705,7 +705,18 @@ function scanFiles(force, dir){
} }
force = !!force; //cast to bool force = !!force; //cast to bool
scanFiles.scanning = true; scanFiles.scanning = true;
var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); var scannerEventSource;
if (users) {
var usersString;
if (users === 'all') {
usersString = users;
} else {
usersString = JSON.stringify(users);
}
scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force: force,dir: dir, users: usersString});
} else {
scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force: force,dir: dir});
}
scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource); scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource);
scannerEventSource.listen('count',function(count){ scannerEventSource.listen('count',function(count){
console.log(count + ' files scanned') console.log(count + ' files scanned')
@ -717,6 +728,9 @@ function scanFiles(force, dir){
scanFiles.scanning=false; scanFiles.scanning=false;
console.log('done after ' + count + ' files'); console.log('done after ' + count + ' files');
}); });
scannerEventSource.listen('user',function(user){
console.log('scanning files for ' + user);
});
} }
scanFiles.scanning=false; scanFiles.scanning=false;