]> source.dussan.org Git - nextcloud-server.git/commitdiff
allow scanning files for multiple users
authorRobin Appelman <icewind@owncloud.com>
Tue, 18 Jun 2013 23:26:08 +0000 (01:26 +0200)
committerRobin Appelman <icewind@owncloud.com>
Tue, 18 Jun 2013 23:26:08 +0000 (01:26 +0200)
apps/files/ajax/scan.php
apps/files/js/files.js

index 6659cd459c89f6dfbe208294fb40a85c6938faed..d58fd69b9f90f0cf664d15efe16dc0c79dbc363d 100644 (file)
@@ -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);
+
+       $absolutePath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir);
 
-$mountPoints = \OC\Files\Filesystem::getMountPoints($absolutePath);
-$mountPoints[] = \OC\Files\Filesystem::getMountPoint($absolutePath);
-$mountPoints = array_reverse($mountPoints); //start with the mount point of $dir
+       $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();
+       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();
+                       }
                }
        }
 }
index a79d34c9b23545ce3b9d042b0ebd529bd99a19a3..ee0d7187cabe689e1f17c90c22b4aa0066039359 100644 (file)
@@ -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;