@@ -376,15 +376,26 @@ const vfsActionFactory = (core, proc, win, dialog, state) => {
376
376
const uploadFileAndFolderList = async ( list ) => {
377
377
const files = list . map ( ( { file} ) => file ) . filter ( ( file ) => file ) ;
378
378
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 ) ;
380
387
try {
381
388
let uploaded = 0 ;
382
389
for ( let { dirPath, file} of list ) {
390
+ if ( isCancelled ) {
391
+ return ;
392
+ }
383
393
if ( file ) {
384
394
// upload file
385
395
await vfs . writefile ( {
386
396
path : pathJoin ( state . currentPath . path , dirPath , file . name )
387
397
} , file , {
398
+ signal : abortController . signal ,
388
399
pid : proc . pid ,
389
400
onProgress : ( ev , progress ) => {
390
401
d . setProgress ( Math . round ( ( uploaded + progress * file . size / 100 ) * 100 / totalSize ) ) ;
@@ -555,10 +566,10 @@ const dialogFactory = (core, proc, win) => {
555
566
action ( ( ) => vfs . unlink ( file , { pid : proc . pid } ) , true , __ ( 'MSG_DELETE_ERROR' ) ) ;
556
567
} ) ) ;
557
568
558
- const progressDialog = ( name ) => dialog ( 'progress' , {
569
+ const progressDialog = ( name , cb = ( ( ) => { } ) ) => dialog ( 'progress' , {
559
570
message : __ ( 'DIALOG_PROGRESS_MESSAGE' , name ) ,
560
571
buttons : [ ]
561
- } , ( ) => { } , false ) ;
572
+ } , cb , false ) ;
562
573
563
574
const errorDialog = ( error , message ) => dialog ( 'alert' , {
564
575
type : 'error' ,
0 commit comments