From ffecc3e4341102714a89ab6b5643c666c1feb0ee Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Mon, 30 Jan 2012 23:32:55 +0100
Subject: [PATCH] start of proper feedback during filessytem scan

---
 files/ajax/scan.php | 11 +++++++----
 files/js/files.js   | 12 ++++++++----
 lib/filecache.php   |  6 ++++--
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/files/ajax/scan.php b/files/ajax/scan.php
index dec949a819..01236c83da 100644
--- a/files/ajax/scan.php
+++ b/files/ajax/scan.php
@@ -2,15 +2,18 @@
 
 require_once '../../lib/base.php';
 
+$eventSource=new OC_EventSource();
+
 $force=isset($_GET['force']) and $_GET['force']=='true';
 $checkOnly=isset($_GET['checkonly']) and $_GET['checkonly']=='true';
 
 //create the file cache if necesary
 if($force or !OC_FileCache::inCache('')){
 	if(!$checkOnly){
-		OC_FileCache::scan('');
+		OC_FileCache::scan('',false,$eventSource);
 	}
-	OC_JSON::success(array("data" => array( "done" => true)));
+	$eventSource->send('success',true);
 }else{
-	OC_JSON::success(array("data" => array( "done" => false)));
-}
\ No newline at end of file
+	$eventSource->send('success',false);
+}
+$eventSource->close();
\ No newline at end of file
diff --git a/files/js/files.js b/files/js/files.js
index 649f193aa2..28259606ce 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -348,13 +348,17 @@ $(document).ready(function() {
 function scanFiles(force){
 	force=!!force; //cast to bool
 	$('#scanning-message').show();
-	$.get(OC.filePath('files','ajax','scan.php'),{force:force}, function(response) {
-		if(response && response.data && response.data.done){
+	var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force});
+	scannerEventSource.listen('scanned',function(file){
+		console.log(file);//TODO: make this into proper feedback
+	});
+	scannerEventSource.listen('success',function(success){
+		if(success){
 			window.location.reload();
 		}else{
-			alert('error')
+			alert('error while scanning');
 		}
-	}, "json");
+	});
 }
 
 function boolOperationFinished(data, callback) {
diff --git a/lib/filecache.php b/lib/filecache.php
index 928fc02e66..4e458ad929 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -288,8 +288,9 @@ class OC_FileCache{
 	 * recursively scan the filesystem and fill the cache
 	 * @param string $path
 	 * @param bool $onlyChilds
+	 * @param OC_EventSource $enventSource
 	 */
-	public static function scan($path,$onlyChilds=false){//PROBLEM due to the order things are added, all parents are -1
+	public static function scan($path,$onlyChilds,$eventSource){//PROBLEM due to the order things are added, all parents are -1
 		$dh=OC_Filesystem::opendir($path);
 		$stat=OC_Filesystem::stat($path);
 		$mimetype=OC_Filesystem::getMimeType($path);
@@ -305,12 +306,13 @@ class OC_FileCache{
 				if($filename != '.' and $filename != '..'){
 					$file=$path.'/'.$filename;
 					if(OC_Filesystem::is_dir($file)){
-						self::scan($file,true);
+						self::scan($file,true,$eventSource);
 					}else{
 						$stat=OC_Filesystem::stat($file);
 						$mimetype=OC_Filesystem::getMimeType($file);
 						$stat['mimetype']=$mimetype;
 						self::put($file,$stat);
+						$eventSource->send('scanned',$file);
 						$totalSize+=$stat['size'];
 					}
 				}
-- 
GitLab