Files
2026-03-25 17:28:35 +01:00

58 lines
2.2 KiB
JavaScript

"use strict";
import { ALL_PLAYER_EVENTS } from "../types/Events.js";
export class VideoPlayerEventsBase {
jsEventListeners = {};
supportedEvents = ALL_PLAYER_EVENTS;
constructor(eventEmitter) {
this.eventEmitter = eventEmitter;
}
triggerJSEvent(event, ...params) {
if (!this.jsEventListeners[event]) return false;
this.jsEventListeners[event]?.forEach(fn => fn(...params));
return true;
}
addEventListener(event, callback) {
switch (event) {
// ----------------- JS Events -----------------
case 'onError':
this.jsEventListeners.onError ??= new Set();
this.jsEventListeners.onError.add(callback);
return {
remove: () => this.jsEventListeners.onError?.delete(callback)
};
// ----------------- Shared Events -----------------
case 'onBuffer':
return this.eventEmitter.addOnBufferListener(callback);
case 'onEnd':
return this.eventEmitter.addOnEndListener(callback);
case 'onLoad':
return this.eventEmitter.addOnLoadListener(callback);
case 'onLoadStart':
return this.eventEmitter.addOnLoadStartListener(callback);
case 'onPlaybackStateChange':
return this.eventEmitter.addOnPlaybackStateChangeListener(callback);
case 'onPlaybackRateChange':
return this.eventEmitter.addOnPlaybackRateChangeListener(callback);
case 'onProgress':
return this.eventEmitter.addOnProgressListener(callback);
case 'onReadyToDisplay':
return this.eventEmitter.addOnReadyToDisplayListener(callback);
case 'onSeek':
return this.eventEmitter.addOnSeekListener(callback);
case 'onTrackChange':
return this.eventEmitter.addOnTrackChangeListener(callback);
case 'onVolumeChange':
return this.eventEmitter.addOnVolumeChangeListener(callback);
case 'onStatusChange':
return this.eventEmitter.addOnStatusChangeListener(callback);
default:
throw new Error(`[React Native Video] Unsupported event: ${event}`);
}
}
clearAllEvents() {
this.jsEventListeners = {};
this.eventEmitter.clearAllListeners();
}
}
//# sourceMappingURL=VideoPlayerEventsBase.js.map