]> 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)
committerThomas Mueller <thomas.mueller@tmit.eu>
Thu, 20 Jun 2013 09:59:43 +0000 (11:59 +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 5b84536695fd9394846d96ccfef1b0df75eb29bb..27e36eda3b875ad1e4815a3023e41bd99ef220eb 100644 (file)
@@ -797,7 +797,7 @@ $(document).ready(function() {
        }
 });
 
-function scanFiles(force, dir){
+function scanFiles(force, dir, users){
        if (!OC.currentUser) {
                return;
        }
@@ -807,7 +807,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')
@@ -819,6 +830,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;