diff --git a/src/display/api.js b/src/display/api.js index 314206ac8..553d8a3b5 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -607,11 +607,7 @@ class PDFDocumentLoadingTask { class PDFDataRangeTransport { #capability = Promise.withResolvers(); - #progressiveDoneListeners = []; - - #progressiveReadListeners = []; - - #rangeListeners = []; + #listener = null; /** * @param {number} length @@ -643,35 +639,12 @@ class PDFDataRangeTransport { } } - /** - * @param {function} listener - */ - addRangeListener(listener) { - this.#rangeListeners.push(listener); - } - - /** - * @param {function} listener - */ - addProgressiveReadListener(listener) { - this.#progressiveReadListeners.push(listener); - } - - /** - * @param {function} listener - */ - addProgressiveDoneListener(listener) { - this.#progressiveDoneListeners.push(listener); - } - /** * @param {number} begin * @param {Uint8Array|null} chunk */ onDataRange(begin, chunk) { - for (const listener of this.#rangeListeners) { - listener(begin, chunk); - } + this.#listener({ type: "range", begin, chunk }); } /** @@ -679,21 +652,18 @@ class PDFDataRangeTransport { */ onDataProgressiveRead(chunk) { this.#capability.promise.then(() => { - for (const listener of this.#progressiveReadListeners) { - listener(chunk); - } + this.#listener({ type: "progressiveRead", chunk }); }); } onDataProgressiveDone() { this.#capability.promise.then(() => { - for (const listener of this.#progressiveDoneListeners) { - listener(); - } + this.#listener({ type: "progressiveDone" }); }); } - transportReady() { + transportReady(listener) { + this.#listener = listener; this.#capability.resolve(); } diff --git a/src/display/transport_stream.js b/src/display/transport_stream.js index 9df04b57c..fd5f1b7b3 100644 --- a/src/display/transport_stream.js +++ b/src/display/transport_stream.js @@ -56,20 +56,19 @@ class PDFDataTransportStream extends BasePDFStream { } this._progressiveDone = progressiveDone; - pdfDataRangeTransport.addRangeListener((begin, chunk) => { - this.#onReceiveData(begin, chunk); - }); - - pdfDataRangeTransport.addProgressiveReadListener(chunk => { - this.#onReceiveData(/* begin = */ undefined, chunk); - }); - - pdfDataRangeTransport.addProgressiveDoneListener(() => { - this._fullReader?.progressiveDone(); - this._progressiveDone = true; - }); - - pdfDataRangeTransport.transportReady(); + const listener = args => { + switch (args.type) { + case "range": + case "progressiveRead": + this.#onReceiveData(args.begin, args.chunk); + break; + case "progressiveDone": + this._fullReader?.progressiveDone(); + this._progressiveDone = true; + break; + } + }; + pdfDataRangeTransport.transportReady(listener); } #onReceiveData(begin, chunk) {