1
1
import type { Range , RangeIndex } from './types'
2
- import { defaultSegmentStrategy } from './segmentStrategy'
3
- import { defaultSelectRangeStrategy } from './selectRangeStrategy'
4
2
5
3
export class RangeProvider {
6
- readonly contentLength : number
7
4
private readonly ranges : Readonly < Range [ ] >
8
5
private readonly downloaderCounter : Map < RangeIndex , number > = new Map ( )
9
6
private readonly controllers : Map < RangeIndex , AbortController > = new Map ( )
10
- private readonly segmentStrategy = defaultSegmentStrategy
11
- private readonly selectRangeStrategy = defaultSelectRangeStrategy
7
+ private readonly selectRangeStrategy
12
8
13
9
constructor (
14
10
contentLength : number ,
15
- segmentStrategy ? : ( contentLength : number ) => Range [ ] ,
16
- selectRangeStrategy ? : (
11
+ segmentStrategy : ( contentLength : number ) => Range [ ] ,
12
+ selectRangeStrategy : (
17
13
downloaderCounter : Map < RangeIndex , number >
18
14
) => RangeIndex
19
15
) {
20
- this . contentLength = contentLength
21
- if ( segmentStrategy != null ) {
22
- this . segmentStrategy = segmentStrategy
23
- }
24
- if ( selectRangeStrategy != null ) {
25
- this . selectRangeStrategy = selectRangeStrategy
26
- }
16
+ this . selectRangeStrategy = selectRangeStrategy
27
17
28
18
// Create the ranges
29
- this . ranges = this . segmentStrategy ( contentLength )
19
+ this . ranges = segmentStrategy ( contentLength )
30
20
// init downloader counter
31
21
for ( let i = 0 ; i < this . ranges . length ; i ++ ) {
32
22
this . downloaderCounter . set ( i , 0 )
@@ -45,6 +35,7 @@ export class RangeProvider {
45
35
controller . abort ( )
46
36
47
37
this . downloaderCounter . delete ( rangeIndex )
38
+ this . controllers . delete ( rangeIndex )
48
39
}
49
40
50
41
getRange ( ) : {
0 commit comments