123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
- var _playlistJs = require('./playlist.js');
- /**
- * Returns a function that acts as the Enable/disable playlist function.
- *
- * @param {PlaylistLoader} loader - The master playlist loader
- * @param {String} playlistUri - uri of the playlist
- * @param {Function} changePlaylistFn - A function to be called after a
- * playlist's enabled-state has been changed. Will NOT be called if a
- * playlist's enabled-state is unchanged
- * @param {Boolean=} enable - Value to set the playlist enabled-state to
- * or if undefined returns the current enabled-state for the playlist
- * @return {Function} Function for setting/getting enabled
- */
- var enableFunction = function enableFunction(loader, playlistUri, changePlaylistFn) {
- return function (enable) {
- var playlist = loader.master.playlists[playlistUri];
- var incompatible = (0, _playlistJs.isIncompatible)(playlist);
- var currentlyEnabled = (0, _playlistJs.isEnabled)(playlist);
- if (typeof enable === 'undefined') {
- return currentlyEnabled;
- }
- if (enable) {
- delete playlist.disabled;
- } else {
- playlist.disabled = true;
- }
- if (enable !== currentlyEnabled && !incompatible) {
- // Ensure the outside world knows about our changes
- changePlaylistFn();
- if (enable) {
- loader.trigger('renditionenabled');
- } else {
- loader.trigger('renditiondisabled');
- }
- }
- return enable;
- };
- };
- /**
- * The representation object encapsulates the publicly visible information
- * in a media playlist along with a setter/getter-type function (enabled)
- * for changing the enabled-state of a particular playlist entry
- *
- * @class Representation
- */
- var Representation = function Representation(hlsHandler, playlist, id) {
- _classCallCheck(this, Representation);
- // Get a reference to a bound version of fastQualityChange_
- var fastChangeFunction = hlsHandler.masterPlaylistController_.fastQualityChange_.bind(hlsHandler.masterPlaylistController_);
- // some playlist attributes are optional
- if (playlist.attributes.RESOLUTION) {
- var resolution = playlist.attributes.RESOLUTION;
- this.width = resolution.width;
- this.height = resolution.height;
- }
- this.bandwidth = playlist.attributes.BANDWIDTH;
- // The id is simply the ordinality of the media playlist
- // within the master playlist
- this.id = id;
- // Partially-apply the enableFunction to create a playlist-
- // specific variant
- this.enabled = enableFunction(hlsHandler.playlists, playlist.uri, fastChangeFunction);
- }
- /**
- * A mixin function that adds the `representations` api to an instance
- * of the HlsHandler class
- * @param {HlsHandler} hlsHandler - An instance of HlsHandler to add the
- * representation API into
- */
- ;
- var renditionSelectionMixin = function renditionSelectionMixin(hlsHandler) {
- var playlists = hlsHandler.playlists;
- // Add a single API-specific function to the HlsHandler instance
- hlsHandler.representations = function () {
- return playlists.master.playlists.filter(function (media) {
- return !(0, _playlistJs.isIncompatible)(media);
- }).map(function (e, i) {
- return new Representation(hlsHandler, e, e.uri);
- });
- };
- };
- exports['default'] = renditionSelectionMixin;
- module.exports = exports['default'];
|