mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-04-09 23:04:02 +02:00
[api-minor] Change PDFDataRangeTransport to use a single (internal) listener
The `PDFDataTransportStream` constructor has always registered exactly one listener for each type of data that an `PDFDataRangeTransport` instance can receive. Given that an end-user of the `PDFDataRangeTransport` class will supply data through its `onData...` methods, it's also somewhat difficult to understand why additional end-user registered listeners would be needed (since the data is already, by definition, available to the user). Furthermore, since TypedArray data is being transferred nowadays it's not even clear that multiple listeners (of the same kind) would generally work. All in all, let's simplify this old code a little bit by using *a single* (internal) listener in the `PDFDataRangeTransport` class.
This commit is contained in:
parent
1bd4c4fbde
commit
f3a2ca08d0
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user