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:
commit
5aaf807366
|
@ -4,6 +4,16 @@ session_write_close();
|
|||
|
||||
$force = (isset($_GET['force']) and ($_GET['force'] === 'true'));
|
||||
$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();
|
||||
ScanListener::$eventSource = $eventSource;
|
||||
|
@ -12,13 +22,18 @@ 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_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);
|
||||
$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
|
||||
$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
|
||||
$absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
|
||||
|
||||
foreach ($mountPoints as $mountPoint) {
|
||||
$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
|
||||
$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
|
||||
$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
|
||||
|
||||
foreach ($mountPoints as $mountPoint) {
|
||||
$storage = \OC\Files\Filesystem::getStorage($mountPoint);
|
||||
if ($storage) {
|
||||
ScanListener::$mountPoints[$storage->getId()] = $mountPoint;
|
||||
|
@ -29,6 +44,7 @@ foreach ($mountPoints as $mountPoint) {
|
|||
$scanner->backgroundScan();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$eventSource->send('done', ScanListener::$fileCount);
|
||||
|
|
|
@ -695,7 +695,7 @@ $(document).ready(function() {
|
|||
}
|
||||
});
|
||||
|
||||
function scanFiles(force, dir){
|
||||
function scanFiles(force, dir, users){
|
||||
if (!OC.currentUser) {
|
||||
return;
|
||||
}
|
||||
|
@ -705,7 +705,18 @@ function scanFiles(force, dir){
|
|||
}
|
||||
force = !!force; //cast to bool
|
||||
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);
|
||||
scannerEventSource.listen('count',function(count){
|
||||
console.log(count + ' files scanned')
|
||||
|
@ -717,6 +728,9 @@ function scanFiles(force, dir){
|
|||
scanFiles.scanning=false;
|
||||
console.log('done after ' + count + ' files');
|
||||
});
|
||||
scannerEventSource.listen('user',function(user){
|
||||
console.log('scanning files for ' + user);
|
||||
});
|
||||
}
|
||||
scanFiles.scanning=false;
|
||||
|
||||
|
|
Loading…
Reference in New Issue