[Filesystem] File.deleteDirectory JS part
authorPawel Kaczmarek <p.kaczmarek3@samsung.com>
Wed, 18 Feb 2015 10:33:46 +0000 (11:33 +0100)
committerPawel Kaczmarek <p.kaczmarek3@samsung.com>
Wed, 18 Feb 2015 14:17:11 +0000 (23:17 +0900)
[Verification]
var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i < files.length; i++) {
     if (files[i].isDirectory) {
       documentsDir.deleteDirectory(
           files[i].fullPath,
           false,
           function() {
             console.log("Directory Deleted");
           }, function(e) {
             console.log("Error" + e.message);
           });
     }
   }
 }

 function onerror(error) {
   console.log("The error " + error.message + " occurred when listing the files in the selected folder");
 }

 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir;
       dir.listFiles(onsuccess,onerror);
     }, function(e) {
       console.log("Error" + e.message);
     }, "rw"
 );

//should remove all directories from documents directory

[Depends on]
http://168.219.209.56/gerrit/#/c/20606/
http://168.219.209.56/gerrit/#/c/20616/ - needed for verification

Change-Id: I09ba7a2e3552b857e34e944758248a147977ad34
Signed-off-by: Pawel Kaczmarek <p.kaczmarek3@samsung.com>
src/filesystem/js/file.js

index dbb61fb4a243fd79a4402ed11e94119aa59439ec..df52e31fdef78ec3e2874b01fa1c2d219a68ecdc 100644 (file)
@@ -253,21 +253,59 @@ File.prototype.deleteDirectory = function(directoryPath, recursive, onsuccess, o
     {name: 'onerror', type: types_.FUNCTION, optional: true, nullable: true}
   ]);
 
-  var data = {
-    directoryPath: args.directoryPath,
-    recursive: args.recursive
-  };
-
-  var callback = function(result) {
-    if (native_.isFailure(result)) {
-      native_.callIfPossible(args.onerror, native_.getErrorObject(result));
-      return;
-    }
-    native_.callIfPossible(args.onsuccess);
-  };
-
-  native_.call('File_deleteDirectory', data, callback);
+  if (this.mode === 'r') {
+    setTimeout(function() {
+      native_.callIfPossible(args.onerror,
+          new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR,
+              'Invalid path or readonly access'));
+    }, 0);
+    return;
+  }
 
+  var _myPath = commonFS_.toRealPath(args.directoryPath);
+  var _result = native_.callSync('File_statSync', {location: _myPath});
+  var _statObj = native_.getResultObject(_result);
+  var _info = commonFS_.getFileInfo(_myPath, _statObj);
+  var _node = new File(_info);
+
+  if (!_node.isDirectory) {
+    setTimeout(function() {
+      native_.callIfPossible(args.onerror,
+          new tizen.WebAPIException(tizen.WebAPIException.INVALID_VALUES_ERR,
+          'It is file not directory'));
+    }, 0);
+    return;
+  } else {
+    _node.listFiles(
+        function(files) {
+          if (files.length > 0) {
+            if (!args.recursive) {
+              native_.callIfPossible(args.onerror,
+                  new tizen.WebAPIException(tizen.WebAPIException.IO_ERR,
+                  'Non empty folder ' + _myPath + ' passed for non recursive delete'));
+              return;
+            }
+          }
+          var data = {
+            pathToDelete: _myPath
+          };
+
+          var callback = function(result) {
+            if (native_.isFailure(result)) {
+              native_.callIfPossible(args.onerror, native_.getErrorObject(result));
+            }
+            native_.callIfPossible(args.onsuccess);
+          };
+
+          native_.call('File_removeDirectory', data, callback);
+        },
+        function() {
+          native_.callIfPossible(args.onerror,
+              new tizen.WebAPIException(tizen.WebAPIException.IO_ERR,
+              'List files failed for ' + _myPath));
+        }
+    );
+  }
 };
 
 File.prototype.deleteFile = function(filePath, onsuccess, onerror) {