@@ -3,7 +3,7 @@ import { program, InvalidArgumentError } from 'commander';
3
3
import { download2mp3 } from './src/download2mp3.js' ;
4
4
import { getDataByUrl } from './src/getDataByUrl.js' ;
5
5
import { createRequire } from 'module' ;
6
- import { chunk } from 'lodash-es ' ;
6
+ import { sleep } from './src/utils.js ' ;
7
7
8
8
const require = createRequire ( import . meta. url ) ;
9
9
const pkg = require ( './package.json' ) ;
@@ -57,7 +57,7 @@ const argv = program.opts();
57
57
58
58
for ( let url of urls ) {
59
59
url = url . trim ( ) ;
60
- console . log ( `fetching pages for ${ url } ` ) ;
60
+ console . log ( `Fetching pages for:` , url ) ;
61
61
const data = await getDataByUrl ( url ) ;
62
62
// console.log(data);
63
63
// console.log(`total threads: ${data.videoData.pages.length}`);
@@ -85,9 +85,19 @@ const argv = program.opts();
85
85
( typeof argv . to === 'number' && index > argv . to )
86
86
)
87
87
) ;
88
+ // console.log('Pages:', pages);
88
89
89
- const pageChunks = chunk ( pages , argv . threads || 5 ) ;
90
- for ( const c of pageChunks ) {
91
- await Promise . all ( c . map ( download2mp3 ) ) ;
90
+ let maxThreads = argv . threads ;
91
+ let currentThreads = 0 ;
92
+
93
+ for ( const page of pages ) {
94
+ while ( currentThreads === maxThreads ) {
95
+ // wait for available thread
96
+ await sleep ( 100 ) ;
97
+ }
98
+ currentThreads += 1 ;
99
+ download2mp3 ( page ) . finally ( ( ) => {
100
+ currentThreads -= 1 ;
101
+ } ) ;
92
102
}
93
103
} ) ( ) ;
0 commit comments