mirror of
https://github.com/zoriya/react-native-video.git
synced 2026-05-26 08:01:57 +00:00
chore: cleanup events code
This commit is contained in:
@@ -56,8 +56,8 @@ class VideoPlayer extends VideoPlayerEvents implements VideoPlayerBase {
|
||||
const parsedError = tryParseNativeVideoError(error);
|
||||
|
||||
if (
|
||||
parsedError instanceof VideoRuntimeError
|
||||
&& this.triggerEvent('onError', parsedError)
|
||||
parsedError instanceof VideoRuntimeError &&
|
||||
this.triggerEvent('onError', parsedError)
|
||||
) {
|
||||
// We don't throw errors if onError is provided
|
||||
return;
|
||||
|
||||
@@ -1,35 +1,21 @@
|
||||
import type { VideoPlayerEventEmitter } from '../spec/nitro/VideoPlayerEventEmitter.nitro';
|
||||
import type { AllPlayerEvents as PlayerEvents } from './types/Events';
|
||||
import {
|
||||
ALL_PLAYER_EVENTS,
|
||||
type AllPlayerEvents as PlayerEvents,
|
||||
} from './types/Events';
|
||||
|
||||
export class VideoPlayerEvents {
|
||||
protected eventEmitter: VideoPlayerEventEmitter;
|
||||
protected eventListeners: Partial<Record<keyof PlayerEvents, Set<(...params: any[]) => void>>> = {};
|
||||
protected eventListeners: Partial<
|
||||
Record<keyof PlayerEvents, Set<(...params: any[]) => void>>
|
||||
> = {};
|
||||
|
||||
protected readonly supportedEvents: (keyof PlayerEvents)[] = [
|
||||
'onAudioBecomingNoisy',
|
||||
'onAudioFocusChange',
|
||||
'onBandwidthUpdate',
|
||||
'onBuffer',
|
||||
'onControlsVisibleChange',
|
||||
'onEnd',
|
||||
'onExternalPlaybackChange',
|
||||
'onLoad',
|
||||
'onLoadStart',
|
||||
'onPlaybackRateChange',
|
||||
'onPlaybackStateChange',
|
||||
'onProgress',
|
||||
'onReadyToDisplay',
|
||||
'onSeek',
|
||||
'onStatusChange',
|
||||
'onTextTrackDataChanged',
|
||||
'onTimedMetadata',
|
||||
'onTrackChange',
|
||||
'onVolumeChange',
|
||||
];
|
||||
protected readonly supportedEvents: (keyof PlayerEvents)[] =
|
||||
ALL_PLAYER_EVENTS;
|
||||
|
||||
constructor(eventEmitter: VideoPlayerEventEmitter) {
|
||||
this.eventEmitter = eventEmitter;
|
||||
for (let event of this.supportedEvents){
|
||||
for (let event of this.supportedEvents) {
|
||||
// @ts-expect-error we narrow the type of the event
|
||||
this.eventEmitter[event] = this.triggerEvent.bind(this, event);
|
||||
}
|
||||
@@ -39,8 +25,7 @@ export class VideoPlayerEvents {
|
||||
event: Event,
|
||||
...params: Parameters<PlayerEvents[Event]>
|
||||
): boolean {
|
||||
if (!this.eventListeners[event]?.size)
|
||||
return false;
|
||||
if (!this.eventListeners[event]?.size) return false;
|
||||
for (let fn of this.eventListeners[event]) {
|
||||
fn(...params);
|
||||
}
|
||||
@@ -59,7 +44,7 @@ export class VideoPlayerEvents {
|
||||
event: Event,
|
||||
callback: PlayerEvents[Event]
|
||||
) {
|
||||
this.eventListeners[event]!.delete(callback);
|
||||
this.eventListeners[event]?.delete(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,5 @@ export const useEvent = <T extends keyof AllPlayerEvents>(
|
||||
player.addEventListener(event, callback);
|
||||
|
||||
return () => player.removeEventListener(event, callback);
|
||||
;
|
||||
}, [player, event, callback]);
|
||||
};
|
||||
|
||||
@@ -97,7 +97,6 @@ export interface AllPlayerEvents extends VideoPlayerEvents {
|
||||
onError: (error: VideoRuntimeError) => void;
|
||||
}
|
||||
|
||||
|
||||
export interface VideoViewEvents {
|
||||
/**
|
||||
* Called when the video view's picture in picture state changes.
|
||||
@@ -226,3 +225,42 @@ export interface onVolumeChangeData {
|
||||
*/
|
||||
muted: boolean;
|
||||
}
|
||||
|
||||
type CheckAllAndOnly<T, A extends readonly (keyof T)[]> =
|
||||
// Missing keys?
|
||||
Exclude<keyof T, A[number]> extends never
|
||||
? // Extra keys?
|
||||
Exclude<A[number], keyof T> extends never
|
||||
? A
|
||||
: ['Extra keys', Exclude<A[number], keyof T>]
|
||||
: ['Missing keys', Exclude<keyof T, A[number]>];
|
||||
|
||||
function allKeysOf<T>() {
|
||||
return <A extends readonly (keyof T)[]>(...arr: A): CheckAllAndOnly<T, A> => {
|
||||
return arr as CheckAllAndOnly<T, A>;
|
||||
};
|
||||
}
|
||||
|
||||
export const ALL_PLAYER_EVENTS: (keyof AllPlayerEvents)[] =
|
||||
allKeysOf<AllPlayerEvents>()(
|
||||
'onAudioBecomingNoisy',
|
||||
'onAudioFocusChange',
|
||||
'onBandwidthUpdate',
|
||||
'onBuffer',
|
||||
'onControlsVisibleChange',
|
||||
'onEnd',
|
||||
'onError',
|
||||
'onExternalPlaybackChange',
|
||||
'onLoad',
|
||||
'onLoadStart',
|
||||
'onPlaybackStateChange',
|
||||
'onPlaybackRateChange',
|
||||
'onProgress',
|
||||
'onReadyToDisplay',
|
||||
'onSeek',
|
||||
'onTimedMetadata',
|
||||
'onTextTrackDataChanged',
|
||||
'onTrackChange',
|
||||
'onVolumeChange',
|
||||
'onStatusChange'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user