feature(cloudcmd) add ability to show progress on move (#157)

This commit is contained in:
coderaiser 2018-05-08 10:57:41 +03:00
parent c793082ec8
commit 697df5846f
4 changed files with 20 additions and 46 deletions

View file

@ -118,6 +118,11 @@ function OperationProto(operation, data) {
.then(setListeners(callback));
};
moveFn = (data, callback) => {
operator.move(data.from, data.to, data.names)
.then(setListeners(callback));
};
extractFn = (data, callback) => {
operator.extract(data.from, data.to)
.then(setListeners({noContinue: true}, callback));

View file

@ -110,7 +110,8 @@
},
"subdomain": "cloudcmd",
"dependencies": {
"@cloudcmd/fileop": "^1.0.1",
"@cloudcmd/fileop": "^1.1.0",
"@cloudcmd/move-files": "^1.0.0",
"@cloudcmd/read-files-sync": "^1.0.0",
"apart": "^1.0.1",
"chalk": "^2.0.1",

View file

@ -18,7 +18,7 @@ const json = require('jonny/legacy');
const ponse = require('ponse');
const copymitter = require('copymitter');
const moveFiles = require('./move-files');
const moveFiles = require('@cloudcmd/move-files');
const swap = wraptile((fn, a, b) => fn(b, a));
const isWin32 = process.platform === 'win32';
@ -182,7 +182,18 @@ function onPUT(name, body, callback) {
const to = root(files.to);
const names = files.names;
moveFiles({from, to, names}, fn);
if (names)
return moveFiles(from, to, names)
.on('error', fn)
.on('end', fn);
const dirname = path.dirname;
const basename = path.basename;
moveFiles(dirname(from), dirname(to), [basename(to)])
.on('error', fn)
.on('end', fn);
break;
} case 'cp':
if (!files.from || !files.names || !files.to)

View file

@ -1,43 +0,0 @@
'use strict';
const path = require('path');
const flop = require('flop');
const promisify = require('es6-promisify').promisify;
const move = promisify(flop.move);
module.exports = (files, callback) => {
check(files, callback);
if (!files.names)
return move(files.from, files.to)
.then(callback)
.catch(callback);
const names = files.names.slice();
const iterate = () => {
const isLast = !names.length;
if (isLast)
return callback();
const name = names.shift();
const from = path.join(files.from, name);
const to = path.join(files.to, name);
move(from, to)
.then(iterate)
.catch(callback);
};
iterate();
};
function check(files, callback) {
if (typeof files !== 'object')
throw Error('files should be an object!');
if (typeof callback !== 'function')
throw Error('callback should be a function!');
}