diff --git a/src/phoenix/fslib.js b/src/phoenix/fslib.js index fb67728377..1e7b674bde 100644 --- a/src/phoenix/fslib.js +++ b/src/phoenix/fslib.js @@ -116,6 +116,11 @@ const fileSystemLib = { return filerLib.fs.rename(...args); }, unlink: function (path, cb) { + if(Mounts.isMountPath(path)) { + throw new Errors.EPERM('Mount root directory cannot be deleted.'); + } else if(Mounts.isMountSubPath(path)) { + return NativeFS.unlink(path, cb); + } return filerShell.rm(path, { recursive: true }, cb); }, showSaveDialog: function () { diff --git a/src/phoenix/fslib_native.js b/src/phoenix/fslib_native.js index 34e9def951..e0ce3c6c54 100644 --- a/src/phoenix/fslib_native.js +++ b/src/phoenix/fslib_native.js @@ -194,6 +194,28 @@ function writeFile (path, data, options, callback) { }); } +async function _deleteEntry(dirHandle, entryNameToDelete, callback, recursive=true){ + try { + await dirHandle.removeEntry(entryNameToDelete, { recursive: recursive }); + callback(); + } catch (err) { + callback(err); + } +} + +async function unlink(path, callback) { + path = window.path.normalize(path); + let dirPath= window.path.dirname(path); + let baseName= window.path.basename(path); + Mounts.getHandleFromPath(dirPath, async (err, dirHandle) => { + if(err){ + callback(err); + } else { + _deleteEntry(dirHandle, baseName, callback); + } + }); +} + function mountNativeFolder(...args) { Mounts.mountNativeFolder(...args); } @@ -209,7 +231,8 @@ const NativeFS = { readdir, stat, readFile, - writeFile + writeFile, + unlink }; export default NativeFS;