diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php index 6659cd459c..d58fd69b9f 100644 --- a/apps/files/ajax/scan.php +++ b/apps/files/ajax/scan.php @@ -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 = explode(',', $_GET['users']); + } +} else { + $users = array(OC_User::getUser()); +} $eventSource = new OC_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_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) { - $storage = \OC\Files\Filesystem::getStorage($mountPoint); - if ($storage) { - ScanListener::$mountPoints[$storage->getId()] = $mountPoint; - $scanner = $storage->getScanner(); - if ($force) { - $scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG); - } else { - $scanner->backgroundScan(); + $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; + $scanner = $storage->getScanner(); + if ($force) { + $scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG); + } else { + $scanner->backgroundScan(); + } } } } diff --git a/apps/files/js/files.js b/apps/files/js/files.js index a79d34c9b2..ee0d7187ca 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -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 = users.join(','); + } + 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;