UNPKG

rx-player

Version:
123 lines (122 loc) 3.79 kB
import log from "../../log"; import { CancellationError } from "../../utils/task_canceller"; /** * Implementation of an `ITextDisplayerInterface` for the Core, that can run in * a WebWorker (so, in a different thread than the `ITextDisplayer`). * * @class CoreTextDisplayerInterface */ export default class CoreTextDisplayerInterface { /** * @param {string} contentId * @param {Object} messageSender */ constructor(contentId, messageSender) { this._contentId = contentId; this._messageSender = messageSender; this._queues = { pushTextData: [], remove: [] }; } /** * @see ITextDisplayerInterface */ pushTextData(infos) { return new Promise((resolve, reject) => { this._queues.pushTextData.push({ resolve, reject }); this._messageSender({ type: "push-text-data" /* CoreMessageType.PushTextData */, contentId: this._contentId, value: infos, }); }); } /** * @see ITextDisplayerInterface */ remove(start, end) { return new Promise((resolve, reject) => { this._queues.remove.push({ resolve, reject }); this._messageSender({ type: "remove-text-data" /* CoreMessageType.RemoveTextData */, contentId: this._contentId, value: { start, end }, }); }); } /** * @see ITextDisplayerInterface */ reset() { this._messageSender({ type: "reset-text-displayer" /* CoreMessageType.ResetTextDisplayer */, contentId: this._contentId, value: null, }); this._resetCurrentQueue("WorkerTextDisplayerInterface reset"); } /** * @see ITextDisplayerInterface */ stop(reason) { this._messageSender({ type: "stop-text-displayer" /* CoreMessageType.StopTextDisplayer */, contentId: this._contentId, value: null, }); this._resetCurrentQueue(reason); } _resetCurrentQueue(reason) { const error = new CancellationError("WorkerTextDisplayerInterface queue", reason !== null && reason !== void 0 ? reason : "reset"); this._queues.pushTextData.forEach((elt) => { elt.reject(error); }); this._queues.pushTextData.length = 0; this._queues.remove.forEach((elt) => { elt.reject(error); }); this._queues.remove.length = 0; } /** * @param {Array.<Object>} ranges */ onPushedTrackSuccess(ranges) { const element = this._queues.pushTextData.shift(); if (element === undefined) { log.error("text", "pushTextData success for inexistant operation"); return; } element.resolve(ranges); } /** * @param {unknown} err */ onPushedTrackError(err) { const element = this._queues.pushTextData.shift(); if (element === undefined) { log.error("text", "pushTextData error for inexistant operation"); return; } element.reject(err); } /** * @param {Array.<Object>} ranges */ onRemoveSuccess(ranges) { const element = this._queues.remove.shift(); if (element === undefined) { log.error("text", "remove success for inexistant operation"); return; } element.resolve(ranges); } /** * @param {unknown} err */ onRemoveError(err) { const element = this._queues.remove.shift(); if (element === undefined) { log.error("text", "remove error for inexistant operation"); return; } element.reject(err); } }