@@ -1350,19 +1350,9 @@ var fileCompressed = function(path, _realPath = false) {
1350
1350
1351
1351
if ( this . rar ) return this . rar ;
1352
1352
1353
- if ( unrar === false ) unrar = require ( 'unrar' ) ;
1353
+ if ( unrar === false ) unrar = require ( 'node- unrar-js ' ) ;
1354
1354
1355
- let bin = false ;
1356
-
1357
- if ( process . platform == 'win32' || process . platform == 'win64' )
1358
- bin = asarToAsarUnpacked ( p . join ( appDir , 'unrar/UnRAR.exe' ) ) ;
1359
- else if ( process . platform == 'darwin' )
1360
- bin = asarToAsarUnpacked ( p . join ( appDir , 'unrar/unrar_MacOSX_10.13.2_64bit' ) ) ;
1361
-
1362
- this . rar = new unrar ( {
1363
- path : this . realPath ,
1364
- bin : bin ,
1365
- } ) ;
1355
+ this . rar = await unrar . createExtractorFromFile ( { filepath : this . realPath , targetPath : this . tmp } ) ;
1366
1356
1367
1357
return this . rar ;
1368
1358
@@ -1375,36 +1365,30 @@ var fileCompressed = function(path, _realPath = false) {
1375
1365
console . time ( 'readRar' ) ;
1376
1366
let _this = this ;
1377
1367
1378
- let rar = await this . openRar ( ) ;
1379
-
1380
- return new Promise ( function ( resolve , reject ) {
1381
-
1382
- rar . list ( async function ( error , entries ) {
1383
-
1384
- if ( ! error )
1385
- {
1386
- for ( let i = 0 , len = entries . length ; i < len ; i ++ )
1387
- {
1388
- let entry = entries [ i ] ;
1389
- let name = _this . removeTmp ( p . normalize ( entry . name ) ) ;
1390
-
1391
- files . push ( { name : name , path : p . join ( _this . path , name ) , folder : ( entry . type === 'Directory' ? true : false ) } ) ;
1392
- _this . setFileStatus ( name , { extracted : false } ) ;
1393
- }
1368
+ try
1369
+ {
1370
+ let rar = await this . openRar ( ) ;
1371
+ let list = rar . getFileList ( ) ;
1372
+ list = [ ...list . fileHeaders ] ;
1394
1373
1395
- console . timeEnd ( 'readRar' ) ;
1374
+ for ( let i = 0 , len = list . length ; i < len ; i ++ )
1375
+ {
1376
+ let file = list [ i ] ;
1377
+ let name = _this . removeTmp ( p . normalize ( file . name ) ) ;
1396
1378
1397
- _this . files = _this . filesToMultidimension ( files ) ;
1398
- resolve ( _this . files ) ;
1399
- }
1400
- else
1401
- {
1402
- resolve ( _this . readIfTypeFromBinaryIsDifferent ( error ) ) ;
1403
- }
1379
+ files . push ( { name : name , path : p . join ( _this . path , name ) , folder : ! ! file . flags . directory } ) ;
1380
+ _this . setFileStatus ( name , { extracted : false } ) ;
1381
+ }
1404
1382
1405
- } ) ;
1383
+ console . timeEnd ( 'readRar' ) ;
1406
1384
1407
- } ) ;
1385
+ _this . files = _this . filesToMultidimension ( files ) ;
1386
+ return _this . files ;
1387
+ }
1388
+ catch ( error )
1389
+ {
1390
+ return _this . readIfTypeFromBinaryIsDifferent ( error ) ;
1391
+ }
1408
1392
1409
1393
}
1410
1394
@@ -1417,68 +1401,38 @@ var fileCompressed = function(path, _realPath = false) {
1417
1401
let only = this . config . only ;
1418
1402
let _this = this ;
1419
1403
1420
- let rar = await this . openRar ( ) ;
1421
-
1422
- return new Promise ( function ( resolve , reject ) {
1423
-
1424
- rar . list ( async function ( error , entries ) {
1425
-
1426
- if ( ! error )
1427
- {
1428
- for ( let i = 0 , len = entries . length ; i < len ; i ++ )
1429
- {
1430
- let entry = entries [ i ] ;
1431
- let name = p . normalize ( entry . name ) ;
1432
- let extract = ! only || only [ name ] ? true : false ;
1433
-
1434
- if ( extract )
1435
- {
1436
- let path = p . join ( _this . tmp , name ) ;
1437
- let virtualPath = p . join ( _this . path , name ) ;
1438
-
1439
- if ( entry . type === 'Directory' )
1440
- {
1441
- if ( ! fs . existsSync ( path ) )
1442
- fs . mkdirSync ( path ) ;
1443
- }
1444
- else
1445
- {
1446
- let folderPath = _this . folderPath ( path ) ;
1447
-
1448
- if ( ! fs . existsSync ( folderPath ) )
1449
- fs . mkdirSync ( folderPath , { recursive : true } ) ;
1450
-
1451
- _this . setFileStatus ( name , { extracted : true } ) ;
1404
+ try
1405
+ {
1406
+ let rar = await this . openRar ( ) ;
1452
1407
1453
- await new Promise ( function ( resolve , reject ) {
1454
- rar . stream ( name ) . on ( 'error' , reject ) . on ( 'end' , function ( ) {
1408
+ let regexp = new RegExp ( pregQuote ( p . sep , '/' ) , 'g' ) ;
1455
1409
1456
- _this . setProgress ( _this . progressIndex ++ / len ) ;
1457
- _this . whenExtractFile ( virtualPath ) ;
1410
+ for ( let i = 0 , len = this . config . _only . length ; i < len ; i ++ )
1411
+ {
1412
+ let _name = this . config . _only [ i ] ;
1458
1413
1459
- resolve ( ) ;
1414
+ let extracted = rar . extract ( { files : [ _name . replace ( regexp , '/' ) ] } ) ;
1415
+ extracted = [ ...extracted . files ] ;
1460
1416
1461
- } ) . pipe ( fs . createWriteStream ( path ) ) ;
1462
- } ) ;
1463
- }
1464
- }
1465
- }
1417
+ await app . setImmediate ( ) ;
1466
1418
1467
- _this . setProgress ( 1 ) ;
1419
+ let virtualPath = p . join ( this . path , _name ) ;
1468
1420
1469
- console . timeEnd ( 'extractRar' ) ;
1421
+ this . setProgress ( _this . progressIndex ++ / len ) ;
1422
+ this . setFileStatus ( _name , { extracted : true } ) ;
1423
+ this . whenExtractFile ( virtualPath ) ;
1424
+ }
1470
1425
1471
- resolve ( ) ;
1472
- }
1473
- else
1474
- {
1475
- resolve ( _this . extractIfTypeFromBinaryIsDifferent ( error ) ) ;
1476
- }
1426
+ _this . setProgress ( 1 ) ;
1477
1427
1478
- } ) ;
1428
+ console . timeEnd ( 'extractRar' ) ;
1479
1429
1480
- } ) ;
1481
-
1430
+ return ;
1431
+ }
1432
+ catch ( error )
1433
+ {
1434
+ return _this . readIfTypeFromBinaryIsDifferent ( error ) ;
1435
+ }
1482
1436
}
1483
1437
1484
1438
0 commit comments