react-native-theoplayer
Version:
A THEOplayer video component for react-native.
84 lines (83 loc) • 2.72 kB
JavaScript
"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