UNPKG

react-native-theoplayer

Version:

A THEOplayer video component for react-native.

302 lines (301 loc) 17.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebEventForwarder = void 0; var _reactNativeTheoplayer = require("react-native-theoplayer"); var _BaseEvent = require("./event/BaseEvent"); var _PlayerEvents = require("./event/PlayerEvents"); var _TrackUtils = require("./web/TrackUtils"); class WebEventForwarder { constructor(player, facade) { this._player = player; this._facade = facade; this.addEventListeners(); } addEventListeners() { this._player.addEventListener('sourcechange', this.onSourceChange); this._player.addEventListener('loadstart', this.onLoadStart); this._player.addEventListener('loadeddata', this.onLoadedData); this._player.addEventListener('loadedmetadata', this.onLoadedMetadata); this._player.addEventListener('error', this.onError); this._player.addEventListener('progress', this.onProgress); this._player.addEventListener('play', this.onPlay); this._player.addEventListener('canplay', this.onCanPlay); this._player.addEventListener('playing', this.onPlaying); this._player.addEventListener('pause', this.onPause); this._player.addEventListener('seeking', this.onSeeking); this._player.addEventListener('seeked', this.onSeeked); this._player.addEventListener('ended', this.onEnded); this._player.addEventListener('waiting', this.onWaiting); this._player.addEventListener('readystatechange', this.onReadyStateChanged); this._player.addEventListener('timeupdate', this.onTimeUpdate); this._player.addEventListener('durationchange', this.onDurationChange); this._player.addEventListener('ratechange', this.onPlaybackRateChange); this._player.addEventListener('segmentnotfound', this.onSegmentNotFound); this._player.addEventListener('volumechange', this.onVolumeChangeEvent); this._player.addEventListener('dimensionchange', this.onDimensionChange); this._player.textTracks.addEventListener('addtrack', this.onAddTextTrack); this._player.textTracks.addEventListener('removetrack', this.onRemoveTextTrack); this._player.textTracks.addEventListener('change', this.onChangeTextTrack); this._player.audioTracks.addEventListener('addtrack', this.onAddAudioTrack); this._player.audioTracks.addEventListener('removetrack', this.onRemoveAudioTrack); this._player.audioTracks.addEventListener('change', this.onChangeAudioTrack); this._player.videoTracks.addEventListener('addtrack', this.onAddVideoTrack); this._player.videoTracks.addEventListener('removetrack', this.onRemoveVideoTrack); this._player.videoTracks.addEventListener('change', this.onChangeVideoTrack); this._player.cast?.chromecast?.addEventListener('statechange', this.onChromecastStateChange); this._player.cast?.chromecast?.addEventListener('error', this.onChromecastError); this._player.cast?.airplay?.addEventListener('statechange', this.onAirplayStateChange); this._player.ads?.addEventListener(FORWARDED_AD_EVENTS, this.onAdEvent); this._player.theoads?.addEventListener(FORWARDED_THEOADS_EVENTS, this.onTheoAdsEvent); this._player.theoLive?.addEventListener(FORWARDED_THEOLIVE_EVENTS, this.onTheoLiveEvent); } unload() { this.removeEventListeners(); } removeEventListeners() { this._player.removeEventListener('sourcechange', this.onSourceChange); this._player.removeEventListener('loadstart', this.onLoadStart); this._player.removeEventListener('loadeddata', this.onLoadedData); this._player.removeEventListener('loadedmetadata', this.onLoadedMetadata); this._player.removeEventListener('error', this.onError); this._player.removeEventListener('progress', this.onProgress); this._player.removeEventListener('canplay', this.onCanPlay); this._player.removeEventListener('play', this.onPlay); this._player.removeEventListener('playing', this.onPlaying); this._player.removeEventListener('pause', this.onPause); this._player.removeEventListener('seeking', this.onSeeking); this._player.removeEventListener('seeked', this.onSeeked); this._player.removeEventListener('ended', this.onEnded); this._player.removeEventListener('waiting', this.onWaiting); this._player.removeEventListener('readystatechange', this.onReadyStateChanged); this._player.removeEventListener('timeupdate', this.onTimeUpdate); this._player.removeEventListener('durationchange', this.onDurationChange); this._player.removeEventListener('ratechange', this.onPlaybackRateChange); this._player.removeEventListener('segmentnotfound', this.onSegmentNotFound); this._player.removeEventListener('volumechange', this.onVolumeChangeEvent); this._player.textTracks.removeEventListener('addtrack', this.onAddTextTrack); this._player.textTracks.removeEventListener('removetrack', this.onRemoveTextTrack); this._player.textTracks.removeEventListener('change', this.onChangeTextTrack); this._player.audioTracks.removeEventListener('addtrack', this.onAddAudioTrack); this._player.audioTracks.removeEventListener('removetrack', this.onRemoveAudioTrack); this._player.audioTracks.removeEventListener('change', this.onChangeAudioTrack); this._player.videoTracks.removeEventListener('addtrack', this.onAddVideoTrack); this._player.videoTracks.removeEventListener('removetrack', this.onRemoveVideoTrack); this._player.videoTracks.removeEventListener('change', this.onChangeVideoTrack); this._player.cast?.chromecast?.removeEventListener('statechange', this.onChromecastStateChange); this._player.cast?.chromecast?.removeEventListener('error', this.onChromecastError); this._player.cast?.airplay?.removeEventListener('statechange', this.onAirplayStateChange); this._player.ads?.removeEventListener(FORWARDED_AD_EVENTS, this.onAdEvent); this._player.theoads?.removeEventListener(FORWARDED_THEOADS_EVENTS, this.onTheoAdsEvent); this._player.theoLive?.removeEventListener(FORWARDED_THEOLIVE_EVENTS, this.onTheoLiveEvent); } onSourceChange = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.SOURCE_CHANGE)); }; onLoadStart = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.LOAD_START)); }; onLoadedData = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.LOADED_DATA)); }; onLoadedMetadata = () => { this._facade.dispatchEvent(new _PlayerEvents.DefaultLoadedMetadataEvent(this._player.textTracks.map(textTrack => (0, _TrackUtils.fromNativeTextTrack)(textTrack)), this._player.audioTracks.map(audioTrack => (0, _TrackUtils.fromNativeMediaTrack)(audioTrack)), this._player.videoTracks.map(videoTrack => (0, _TrackUtils.fromNativeMediaTrack)(videoTrack)), 1e3 * this._player.duration, this._player.textTracks.find(track => track.mode === 'showing')?.uid, this._player.videoTracks.find(track => track.enabled)?.uid, this._player.audioTracks.find(track => track.enabled)?.uid)); }; onError = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultErrorEvent({ errorCode: event.errorObject.code.toString(), errorMessage: event.errorObject.message })); }; onProgress = () => { this._facade.dispatchEvent(new _PlayerEvents.DefaultProgressEvent(fromTimeRanges(this._player.seekable), fromTimeRanges(this._player.buffered))); }; onCanPlay = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.CANPLAY)); }; onPlay = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PLAY)); }; onPlaying = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PLAYING)); }; onPause = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PAUSE)); }; onSeeking = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultSeekingEvent(event.currentTime * 1e3)); }; onSeeked = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultSeekedEvent(event.currentTime * 1e3)); }; onEnded = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.ENDED)); }; onWaiting = () => { this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.WAITING)); }; onReadyStateChanged = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultReadyStateChangeEvent(event.readyState)); }; onTimeUpdate = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultTimeupdateEvent(event.currentTime * 1e3, event.currentProgramDateTime?.getTime())); }; onDurationChange = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultDurationChangeEvent(event.duration * 1e3)); }; onPlaybackRateChange = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultRateChangeEvent(event.playbackRate)); }; onSegmentNotFound = () => { this._facade.dispatchEvent(new _PlayerEvents.DefaultSegmentNotFoundEvent(0, 'Segment not found', -1)); }; onVolumeChangeEvent = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultVolumeChangeEvent(event.volume, this._player.muted)); }; onDimensionChange = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultResizeEvent(event.width, event.height)); }; onAddTextTrack = event => { const track = event.track; if (track.kind === _reactNativeTheoplayer.TextTrackKind.metadata) { track.mode = _reactNativeTheoplayer.TextTrackMode.hidden; } track.addEventListener('addcue', this.onAddTextTrackCue(track)); track.addEventListener('removecue', this.onRemoveTextTrackCue(track)); track.addEventListener('entercue', this.onEnterTextTrackCue(track)); track.addEventListener('exitcue', this.onExitTextTrackCue(track)); this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.ADD_TRACK, (0, _TrackUtils.fromNativeTextTrack)(track))); }; onRemoveTextTrack = event => { const track = event.track; track.removeEventListener('addcue', this.onAddTextTrackCue(track)); track.removeEventListener('removecue', this.onRemoveTextTrackCue(track)); track.removeEventListener('entercue', this.onEnterTextTrackCue(track)); track.removeEventListener('exitcue', this.onExitTextTrackCue(track)); this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.REMOVE_TRACK, (0, _TrackUtils.fromNativeTextTrack)(track))); }; onChangeTextTrack = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.CHANGE_TRACK, (0, _TrackUtils.fromNativeTextTrack)(event.track))); }; onAddAudioTrack = event => { this.onAddMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO); }; onAddVideoTrack = event => { this.onAddMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO); }; onAddMediaTrack = (event, trackType) => { const track = event.track; track.addEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track)); this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.ADD_TRACK, trackType, track)); }; onRemoveAudioTrack = event => { this.onRemoveMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO); }; onRemoveVideoTrack = event => { this.onRemoveMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO); }; onRemoveMediaTrack = (event, trackType) => { const track = event.track; track.removeEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track)); this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.REMOVE_TRACK, trackType, track)); }; onChangeAudioTrack = event => { this.onChangeMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO); }; onChangeVideoTrack = event => { this.onChangeMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO); }; onChangeMediaTrack = (event, trackType) => { const track = event.track; this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.CHANGE_TRACK, trackType, track)); }; onChromecastStateChange = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultChromecastChangeEvent(event.state)); }; onChromecastError = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultChromecastErrorEvent(event.error)); }; onAirplayStateChange = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultAirplayStateChangeEvent(event.state)); }; onAdEvent = event => { const castedEvent = event; this._facade.dispatchEvent(new _PlayerEvents.DefaultAdEvent(event.type, castedEvent.ad)); }; onTheoAdsEvent = event => { this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoAdsEvent(event.type, event.interstitial)); }; onTheoLiveEvent = event => { if (event.type === _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_LOAD_START || event.type === _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_OFFLINE) { const { distributionId } = event; this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveDistributionEvent(event.type, distributionId)); } else if (event.type === _reactNativeTheoplayer.TheoLiveEventType.ENDPOINT_LOADED) { const { endpoint } = event; this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveEndpointLoadedEvent(event.type, endpoint)); } else if (event.type === _reactNativeTheoplayer.TheoLiveEventType.INTENT_TO_FALLBACK) { const { reason } = event; this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveIntentToFallbackEvent(event.type, reason)); } else { this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveEvent(event.type)); } }; onAddTextTrackCue = track => event => { const { cue } = event; if (cue) { this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.ADD_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue))); } }; onRemoveTextTrackCue = track => event => { const { cue } = event; if (cue) { this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.REMOVE_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue))); } }; onEnterTextTrackCue = track => event => { const { cue } = event; if (cue) { this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.ENTER_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue))); } }; onExitTextTrackCue = track => event => { const { cue } = event; if (cue) { this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.EXIT_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue))); } }; onActiveQualityChanged = (trackType, track) => () => { const quality = track.activeQuality; this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackEvent(_reactNativeTheoplayer.MediaTrackEventType.ACTIVE_QUALITY_CHANGED, trackType, track.uid, quality ? [quality] : undefined)); }; } exports.WebEventForwarder = WebEventForwarder; const FORWARDED_AD_EVENTS = [_reactNativeTheoplayer.AdEventType.ADD_AD_BREAK, _reactNativeTheoplayer.AdEventType.REMOVE_AD_BREAK, _reactNativeTheoplayer.AdEventType.AD_LOADED, _reactNativeTheoplayer.AdEventType.AD_BREAK_BEGIN, _reactNativeTheoplayer.AdEventType.AD_BREAK_END, _reactNativeTheoplayer.AdEventType.AD_BREAK_CHANGE, _reactNativeTheoplayer.AdEventType.UPDATE_AD_BREAK, _reactNativeTheoplayer.AdEventType.ADD_AD, _reactNativeTheoplayer.AdEventType.AD_BEGIN, _reactNativeTheoplayer.AdEventType.AD_END, _reactNativeTheoplayer.AdEventType.UPDATE_AD, _reactNativeTheoplayer.AdEventType.AD_FIRST_QUARTILE, _reactNativeTheoplayer.AdEventType.AD_MIDPOINT, _reactNativeTheoplayer.AdEventType.AD_THIRD_QUARTILE, _reactNativeTheoplayer.AdEventType.AD_SKIP, _reactNativeTheoplayer.AdEventType.AD_IMPRESSION, _reactNativeTheoplayer.AdEventType.AD_ERROR, _reactNativeTheoplayer.AdEventType.AD_METADATA, _reactNativeTheoplayer.AdEventType.AD_BUFFERING]; const FORWARDED_THEOADS_EVENTS = [_reactNativeTheoplayer.TheoAdsEventType.ADD_INTERSTITIAL, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_BEGIN, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_END, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_UPDATE, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_ERROR]; const FORWARDED_THEOLIVE_EVENTS = [_reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_LOAD_START, _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_OFFLINE, _reactNativeTheoplayer.TheoLiveEventType.ENDPOINT_LOADED, _reactNativeTheoplayer.TheoLiveEventType.INTENT_TO_FALLBACK]; function fromTimeRanges(timeRanges) { const result = []; for (let i = 0; i < timeRanges.length; i++) { result.push({ start: timeRanges.start(i) * 1e3, end: timeRanges.end(i) * 1e3 }); } return result; } //# sourceMappingURL=WebEventForwarder.js.map