Ver código fonte

delete file/folder now also works when the same file/folder is found in _Trash_ (which is overwritten)

Simon Van Mierlo 8 anos atrás
pai
commit
4d79030ce1
1 arquivos alterados com 54 adições e 28 exclusões
  1. 54 28
      httpwsd.js

+ 54 - 28
httpwsd.js

@@ -347,33 +347,59 @@ var httpserver = _http.createServer(
 			/*	delete specified file/folder */	
 			else if( req.method == 'DELETE' && url.pathname.match(/\.(file|folder)$/) )
 			{
-				var matches  = url.pathname.match(/^\/(.*?)\/(.*\/)?(.*)\.(file|folder)$/),
-					 username = matches[1],
-                     folder = matches[2] || '',
- 					 fname 	 = matches[3],
-					 userdir	 = './users/'+username+'/',
-					 ondelete = 
-						 function(err, stdout, stderr)
-						 {
-							 if( err )
-								 __respond(resp,500,String(err));
-							 else
-								 __respond(resp,200);
-						 },
-					 deletef  = 
-						 function(response)
-						 {
-                             _fspp.mv(userdir+folder+fname,userdir+'_Trash_/'+folder,ondelete);
-						 };
-				_fs.exists(userdir+'_Trash_/'+folder,
-					function(exists)
-					{
-						if( ! exists )
-							_fspp.mkdirs(userdir+'_Trash_/'+folder,deletef);
-                        else {
-                            deletef();
-                        }
-					});
+                if (url.pathname.match('_Trash_')) {
+                    __respond(resp,500,"cannot remove trash!");
+                } else {
+                    var matches  = url.pathname.match(/^\/(.*?)\/(.*\/)?(.*)\.(file|folder)$/),
+                         username = matches[1],
+                         folder = matches[2] || '',
+                         fname 	 = matches[3],
+                         userdir	 = './users/'+username+'/',
+                         ondelete = 
+                             function(err, stdout, stderr)
+                             {
+                                 if( err )
+                                     __respond(resp,500,String(err));
+                                 else
+                                     __respond(resp,200);
+                             },
+                         deletef  = 
+                             function(response)
+                             {
+                                 var newname = userdir+'_Trash_/'+folder+fname;
+                                 if (_fs.existsSync(newname)) {
+                                     if (url.pathname.match(/\.folder$/)) {
+                                         // http://stackoverflow.com/questions/18052762/remove-directory-which-is-not-empty
+                                         var deleteFolderRecursive = function(path) {
+                                            if( _fs.existsSync(path) ) {
+                                                _fs.readdirSync(path).forEach(function(file,index){
+                                                    var curPath = path + "/" + file;
+                                                    if(_fs.lstatSync(curPath).isDirectory()) { // recurse
+                                                        deleteFolderRecursive(curPath);
+                                                    } else { // delete file
+                                                        _fs.unlinkSync(curPath);
+                                                    }
+                                                });
+                                                _fs.rmdirSync(path);
+                                            }
+                                         };
+                                         deleteFolderRecursive(newname);
+                                     } else {
+                                         _fs.unlink(newname);
+                                     }
+                                 }
+                                 _fspp.mv(userdir+folder+fname,userdir+'_Trash_/'+folder,ondelete);
+                             };
+                    _fs.exists(userdir+'_Trash_/'+folder,
+                        function(exists)
+                        {
+                            if( ! exists )
+                                _fspp.mkdirs(userdir+'_Trash_/'+folder,deletef);
+                            else {
+                                deletef();
+                            }
+                        });
+                }
 			}
 
 
@@ -432,7 +458,7 @@ var httpserver = _http.createServer(
                                      };
                             _fspp.mv(userdir+"/"+folder+fname,userdir+data,onmove)
                         } else {
-                            //rename
+                            // rename
                             var matches  = url.pathname.match(/^\/(.*?)\/(.*\/)?(.*)\.(file|folder)$/),
                                 username = matches[1],
                                 folder = matches[2] || '',