UNPKG

react-native-theoplayer

Version:

A THEOplayer video component for react-native.

84 lines (83 loc) 2.72 kB
"use strict"; import { addTextTrackCue, addTrack, findTextTrackByUid, PlayerEventType, removeTextTrackCue, removeTrack, TextTrackEventType, TextTrackMode, TrackListEventType } from 'react-native-theoplayer'; export class DefaultTextTrackState { _textTracks = []; constructor(_player) { this._player = _player; _player.addEventListener(PlayerEventType.LOADED_METADATA, this.onLoadedMetadata); _player.addEventListener(PlayerEventType.TEXT_TRACK, this.onTextTrack); _player.addEventListener(PlayerEventType.TEXT_TRACK_LIST, this.onTextTrackList); } destroy() { this._player.removeEventListener(PlayerEventType.LOADED_METADATA, this.onLoadedMetadata); this._player.removeEventListener(PlayerEventType.TEXT_TRACK, this.onTextTrack); this._player.removeEventListener(PlayerEventType.TEXT_TRACK_LIST, this.onTextTrackList); } get textTracks() { return this._textTracks; } set textTracks(tracks) { this._textTracks = tracks; } onLoadedMetadata = event => { this._textTracks = event.textTracks; this._selectedTextTrack = event.selectedTextTrack; }; onTextTrack = event => { const { subType, cue, trackUid } = event; const track = findTextTrackByUid(this.textTracks, trackUid); switch (subType) { case TextTrackEventType.ADD_CUE: addTextTrackCue(track, cue); break; case TextTrackEventType.REMOVE_CUE: removeTextTrackCue(track, cue); break; } }; onTextTrackList = event => { const { subType, track } = event; switch (subType) { case TrackListEventType.ADD_TRACK: this._textTracks = addTrack(this._textTracks, track); break; case TrackListEventType.REMOVE_TRACK: this._textTracks = removeTrack(this._textTracks, track); break; case TrackListEventType.CHANGE_TRACK: this._textTracks = removeTrack(this._textTracks, track); this._textTracks = addTrack(this._textTracks, track); if (event.track.mode === TextTrackMode.showing) { this._selectedTextTrack = event.track.uid; } break; } }; get selectedTextTrack() { return this._selectedTextTrack; } set selectedTextTrack(trackUid) { if (!this.hasValidSource()) { return; } this._selectedTextTrack = trackUid; this.textTracks.forEach(track => { if (track.uid === trackUid) { track.mode = TextTrackMode.showing; } else if (track.mode === TextTrackMode.showing) { track.mode = TextTrackMode.disabled; } }); } hasValidSource() { return this._player?.source !== undefined; } } //# sourceMappingURL=DefaultTextTrackState.js.map