use json to encode the file list, should work better with filenames containing non-ascii characters

This commit is contained in:
Robin Appelman 2010-09-06 23:09:14 +02:00
parent b0dbb2ac9d
commit 5da12fcfa1
2 changed files with 30 additions and 13 deletions

View File

@ -53,7 +53,10 @@ if($arguments['action']){
OC_FILES::get($arguments['dir'],$arguments['file']); OC_FILES::get($arguments['dir'],$arguments['file']);
break; break;
case 'getfiles': case 'getfiles':
echo json_encode(OC_FILES::getdirectorycontent($arguments['dir'])); $max_upload=min(return_bytes(ini_get('post_max_size')),return_bytes(ini_get('upload_max_filesize')));
$files=OC_FILES::getdirectorycontent($arguments['dir']);
$files['__max_upload']=$max_upload;
echo json_encode($files);
break; break;
case 'gettree': case 'gettree':
echo json_encode(OC_FILES::getTree($arguments['dir'])); echo json_encode(OC_FILES::getTree($arguments['dir']));
@ -80,4 +83,19 @@ if($arguments['action']){
} }
} }
?> function return_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last) {
// The 'G' modifier is available since PHP 5.1.0
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $val;
}
?>

View File

@ -41,18 +41,16 @@ OC_FILES.xmlloader=new OCXMLLoader();
OC_FILES.getdirectorycontent_parse=function(req){ OC_FILES.getdirectorycontent_parse=function(req){
var files=new Array(); var files=new Array();
var response=req.responseXML; var json=eval('('+req.responseText+')');
OC_FILES.cache.files=Array(); OC_FILES.cache.files=Array();
if(response){ if(json){
var dir=response.getElementsByTagName('dir').item(0); for(var name in json){
var fileElements=response.getElementsByTagName('file'); if(name!='__max_upload'){
if(fileElements.length>0){
for(index=0;index<fileElements.length;index++){
var file=new Array(); var file=new Array();
var attributes=Array('size','name','type','directory','date','mime'); var attributes=Array('size','name','type','directory','date','mime');
for(i in attributes){ for(var i in attributes){
var name=attributes[i]; var attributeName=attributes[i];
file[name]=fileElements.item(index).getAttribute(name); file[attributeName]=json[name][attributeName];
} }
files[file.name]=file; files[file.name]=file;
} }
@ -61,7 +59,7 @@ OC_FILES.getdirectorycontent_parse=function(req){
if(OC_FILES.cache.incomplete[OC_FILES.dir]){ if(OC_FILES.cache.incomplete[OC_FILES.dir]){
files=arrayMerge(files,OC_FILES.cache.incomplete[OC_FILES.dir]); files=arrayMerge(files,OC_FILES.cache.incomplete[OC_FILES.dir]);
} }
files['max_upload']=dir.getAttribute('max_upload'); files['max_upload']=json['__max_upload'];
if(OC_FILES.getdirectorycontent_callback){ if(OC_FILES.getdirectorycontent_callback){
OC_FILES.getdirectorycontent_callback(files); OC_FILES.getdirectorycontent_callback(files);
} }
@ -75,7 +73,8 @@ OC_FILES.getdirectorycontent=function(dir,callback,refresh){
OC_FILES.getdirectorycontent_callback=callback; OC_FILES.getdirectorycontent_callback=callback;
} }
OC_FILES.xmlloader.setCallBack(OC_FILES.getdirectorycontent_parse); OC_FILES.xmlloader.setCallBack(OC_FILES.getdirectorycontent_parse);
OC_FILES.xmlloader.load('files/get_files.php?dir='+encodeURIComponent(dir)); // OC_FILES.xmlloader.load('files/get_files.php?dir='+encodeURIComponent(dir));
OC_FILES.xmlloader.load('files/api.php?action=getfiles&dir='+encodeURIComponent(dir));
}else{ }else{
var files=OC_FILES.cache.files var files=OC_FILES.cache.files
if(OC_FILES.cache.incomplete[OC_FILES.dir]){ if(OC_FILES.cache.incomplete[OC_FILES.dir]){