@@ -62,7 +62,7 @@ export default class ContentSteeringController
62
62
private updated : number = 0 ;
63
63
private started : boolean = false ;
64
64
private enabled : boolean = true ;
65
- private levels : Level [ ] | null = null ;
65
+ private _levels : Level [ ] | null = null ;
66
66
private audioTracks : MediaPlaylist [ ] | null = null ;
67
67
private subtitleTracks : MediaPlaylist [ ] | null = null ;
68
68
private penalizedPathways : { [ pathwayId : string ] : number } = { } ;
@@ -92,14 +92,25 @@ export default class ContentSteeringController
92
92
hls . off ( Events . ERROR , this . onError , this ) ;
93
93
}
94
94
95
- get pathwayPriority ( ) {
95
+ getPathwaysList ( levels : Level [ ] ) {
96
+ return levels . reduce ( ( pathways , level ) => {
97
+ if ( pathways . indexOf ( level . pathwayId ) === - 1 ) {
98
+ pathways . push ( level . pathwayId ) ;
99
+ }
100
+ return pathways ;
101
+ } , [ ] as string [ ] ) ;
102
+ }
103
+
104
+ get pathwayPriority ( ) : string [ ] | null {
96
105
return this . _pathwayPriority ;
97
106
}
98
107
99
- set pathwayPriority ( pathwayPriority ) {
100
- if ( pathwayPriority ) {
101
- this . updatePathwayPriority ( pathwayPriority ) ;
102
- }
108
+ set pathwayPriority ( pathwayPriority : string [ ] ) {
109
+ this . updatePathwayPriority ( pathwayPriority ) ;
110
+ }
111
+
112
+ get levels ( ) : Level [ ] {
113
+ return this . _levels || [ ] ;
103
114
}
104
115
105
116
startLoad ( ) {
@@ -138,13 +149,13 @@ export default class ContentSteeringController
138
149
this . stopLoad ( ) ;
139
150
// @ts -ignore
140
151
this . hls = null ;
141
- this . levels = this . audioTracks = this . subtitleTracks = null ;
152
+ this . _levels = this . audioTracks = this . subtitleTracks = null ;
142
153
}
143
154
144
155
removeLevel ( levelToRemove : Level ) {
145
- const levels = this . levels ;
156
+ const levels = this . _levels ;
146
157
if ( levels ) {
147
- this . levels = levels . filter ( ( level ) => level !== levelToRemove ) ;
158
+ this . _levels = levels . filter ( ( level ) => level !== levelToRemove ) ;
148
159
}
149
160
}
150
161
@@ -155,7 +166,7 @@ export default class ContentSteeringController
155
166
this . updated = 0 ;
156
167
this . uri = null ;
157
168
this . pathwayId = '.' ;
158
- this . levels = this . audioTracks = this . subtitleTracks = null ;
169
+ this . _levels = this . audioTracks = this . subtitleTracks = null ;
159
170
}
160
171
161
172
private onManifestLoaded (
@@ -187,7 +198,7 @@ export default class ContentSteeringController
187
198
errorAction ?. action === NetworkErrorAction . SendAlternateToPenaltyBox &&
188
199
errorAction . flags === ErrorActionFlags . MoveAllAlternatesMatchingHost
189
200
) {
190
- const levels = this . levels ;
201
+ const levels = this . _levels ;
191
202
let pathwayPriority = this . _pathwayPriority ;
192
203
let errorPathway = this . pathwayId ;
193
204
if ( data . context ) {
@@ -203,12 +214,7 @@ export default class ContentSteeringController
203
214
}
204
215
if ( ! pathwayPriority && levels ) {
205
216
// If PATHWAY-PRIORITY was not provided, list pathways for error handling
206
- pathwayPriority = levels . reduce ( ( pathways , level ) => {
207
- if ( pathways . indexOf ( level . pathwayId ) === - 1 ) {
208
- pathways . push ( level . pathwayId ) ;
209
- }
210
- return pathways ;
211
- } , [ ] as string [ ] ) ;
217
+ pathwayPriority = this . getPathwaysList ( levels ) ;
212
218
}
213
219
if ( pathwayPriority && pathwayPriority . length > 1 ) {
214
220
this . updatePathwayPriority ( pathwayPriority ) ;
@@ -230,7 +236,7 @@ export default class ContentSteeringController
230
236
231
237
public filterParsedLevels ( levels : Level [ ] ) : Level [ ] {
232
238
// Filter levels to only include those that are in the initial pathway
233
- this . levels = levels ;
239
+ this . _levels = levels ;
234
240
let pathwayLevels = this . getLevelsForPathway ( this . pathwayId ) ;
235
241
if ( pathwayLevels . length === 0 ) {
236
242
const pathwayId = levels [ 0 ] . pathwayId ;
@@ -250,10 +256,10 @@ export default class ContentSteeringController
250
256
}
251
257
252
258
private getLevelsForPathway ( pathwayId : string ) : Level [ ] {
253
- if ( this . levels === null ) {
259
+ if ( this . _levels === null ) {
254
260
return [ ] ;
255
261
}
256
- return this . levels . filter ( ( level ) => pathwayId === level . pathwayId ) ;
262
+ return this . _levels . filter ( ( level ) => pathwayId === level . pathwayId ) ;
257
263
}
258
264
259
265
private updatePathwayPriority ( pathwayPriority : string [ ] ) {
@@ -286,7 +292,7 @@ export default class ContentSteeringController
286
292
this . hls . trigger ( Events . LEVELS_UPDATED , { levels } ) ;
287
293
// Set LevelController's level to trigger LEVEL_SWITCHING which loads playlist if needed
288
294
const levelAfterChange = this . hls . levels [ selectedIndex ] ;
289
- if ( selectedLevel && levelAfterChange && this . levels ) {
295
+ if ( selectedLevel && levelAfterChange && this . _levels ) {
290
296
if (
291
297
levelAfterChange . attrs [ 'STABLE-VARIANT-ID' ] !==
292
298
selectedLevel . attrs [ 'STABLE-VARIANT-ID' ] &&
@@ -309,7 +315,7 @@ export default class ContentSteeringController
309
315
defaultPathway : string ,
310
316
) : string {
311
317
const levels = this . getLevelsForPathway ( defaultPathway ) . concat (
312
- this . levels || [ ] ,
318
+ this . _levels || [ ] ,
313
319
) ;
314
320
for ( let i = 0 ; i < levels . length ; i ++ ) {
315
321
if (
@@ -325,7 +331,7 @@ export default class ContentSteeringController
325
331
}
326
332
327
333
private clonePathways ( pathwayClones : PathwayClone [ ] ) {
328
- const levels = this . levels ;
334
+ const levels = this . _levels ;
329
335
if ( ! levels ) {
330
336
return ;
331
337
}
0 commit comments