UNPKG

react-native-theoplayer

Version:

A THEOplayer video component for react-native.

122 lines (119 loc) 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NativeMediaCache = exports.MediaCache = void 0; var _MediaCacheAPI = require("../../api/cache/MediaCacheAPI"); var _DefaultEventDispatcher = require("../adapter/event/DefaultEventDispatcher"); var _CacheEvent = require("../../api/cache/events/CacheEvent"); var _reactNativeTheoplayer = require("react-native-theoplayer"); var _reactNative = require("react-native"); var _NativeCachingTaskAdapter = require("./NativeCachingTaskAdapter"); var _NativeCachingTaskParametersAdapter = require("./NativeCachingTaskParametersAdapter"); const TAG = 'NativeMediaCache'; const NativeCacheModule = _reactNative.NativeModules.THEORCTCacheModule; class NativeMediaCache extends _DefaultEventDispatcher.DefaultEventDispatcher { _emitter = new _reactNative.NativeEventEmitter(NativeCacheModule); _status = _MediaCacheAPI.CacheStatus.uninitialised; _tasks = []; constructor() { super(); this._emitter.addListener('onCacheStatusChange', this.onCacheStatusChange); this._emitter.addListener('onAddCachingTaskEvent', this.onAddCachingTaskEvent); this._emitter.addListener('onRemoveCachingTaskEvent', this.onRemoveCachingTaskEvent); this._emitter.addListener('onCachingTaskProgressEvent', this.onCachingTaskProgressEvent); this._emitter.addListener('onCachingTaskStatusChangeEvent', this.onCachingTaskStatusChangeEvent); void this.initialize(); } async createTask(source, parameters) { return NativeCacheModule.createTask(source, (0, _NativeCachingTaskParametersAdapter.toNativeCachingTaskParameters)(parameters)); } get status() { return this._status; } get tasks() { return this._tasks; } async initialize() { await this.getInitialState(); // Dispatch status change event here if (this._status === _MediaCacheAPI.CacheStatus.initialised) { await this.onCacheStatusChange({ status: this._status }); } } async getInitialState() { const initialState = await NativeCacheModule.getInitialState(); this._status = initialState.status; this._tasks = initialState.tasks.map(task => new _NativeCachingTaskAdapter.NativeCachingTaskAdapter(task)); } onCacheStatusChange = async event => { if (this._status === _MediaCacheAPI.CacheStatus.uninitialised) { await this.getInitialState(); } this._status = event.status; this.dispatchEvent({ type: _CacheEvent.CacheEventType.statechange, date: new Date() }); }; onAddCachingTaskEvent = event => { const task = new _NativeCachingTaskAdapter.NativeCachingTaskAdapter(event.task); this._tasks.push(task); this.dispatchEvent({ type: _CacheEvent.CacheEventType.addtask, task, date: new Date() }); }; onRemoveCachingTaskEvent = event => { const task = this.taskById(event.task.id); if (task) { this._tasks = this._tasks.filter(task => task.id !== event.task.id); this.dispatchEvent({ type: _CacheEvent.CacheEventType.removetask, task, date: new Date() }); } else { console.warn(TAG, `onRemoveCachingTaskEvent: CachingTask with id ${event.task.id} not found.`); } }; onCachingTaskProgressEvent = event => { const task = this.taskById(event.id); if (task) { Object.assign(task, { ...event.progress }); task.dispatchEvent({ type: _reactNativeTheoplayer.CachingTaskEventType.progress, date: new Date() }); } }; onCachingTaskStatusChangeEvent = event => { const task = this.taskById(event.id); if (task) { Object.assign(task, { ...event }); task.dispatchEvent({ type: _reactNativeTheoplayer.CachingTaskEventType.statechange, date: new Date() }); } }; taskById(id) { return this._tasks.find(task => task.id === id); } } /** * The media cache API. * * @category Caching * @public */ exports.NativeMediaCache = NativeMediaCache; const MediaCache = exports.MediaCache = new NativeMediaCache(); //# sourceMappingURL=MediaCache.js.map