Skip to content

Commit 4a102e1

Browse files
committed
feat: support cancelation
1 parent 70e9cc6 commit 4a102e1

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

index.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,15 +376,26 @@ const vfsActionFactory = (core, proc, win, dialog, state) => {
376376
const uploadFileAndFolderList = async (list) => {
377377
const files = list.map(({file}) => file).filter((file) => file);
378378
const totalSize = files.reduce((sum, {size}) => sum + size, 0);
379-
const d = dialog('progress', files.length === 1 ? files[0].name : 'multiple files');
379+
const dialogTitle = files.length === 1 ? files[0].name : 'multiple files';
380+
const abortController = new AbortController();
381+
let isCancelled = false;
382+
const onCancel = () => {
383+
isCancelled = false;
384+
abortController.abort();
385+
};
386+
const d = dialog('progress', dialogTitle, onCancel);
380387
try {
381388
let uploaded = 0;
382389
for (let {dirPath, file} of list) {
390+
if (isCancelled) {
391+
return;
392+
}
383393
if (file) {
384394
// upload file
385395
await vfs.writefile({
386396
path: pathJoin(state.currentPath.path, dirPath, file.name)
387397
}, file, {
398+
signal: abortController.signal,
388399
pid: proc.pid,
389400
onProgress: (ev, progress) => {
390401
d.setProgress(Math.round((uploaded + progress * file.size / 100) * 100 / totalSize));
@@ -555,10 +566,10 @@ const dialogFactory = (core, proc, win) => {
555566
action(() => vfs.unlink(file, {pid: proc.pid}), true, __('MSG_DELETE_ERROR'));
556567
}));
557568

558-
const progressDialog = (name) => dialog('progress', {
569+
const progressDialog = (name, cb = (() => {})) => dialog('progress', {
559570
message: __('DIALOG_PROGRESS_MESSAGE', name),
560571
buttons: []
561-
}, () => {}, false);
572+
}, cb, false);
562573

563574
const errorDialog = (error, message) => dialog('alert', {
564575
type: 'error',

0 commit comments

Comments
 (0)