Convert transport_stream.js to use ES6 classes

This commit is contained in:
Jonas Jenwald 2019-05-16 08:55:52 +02:00
parent c8c937c257
commit 737705264b

View File

@ -12,12 +12,13 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* eslint no-var: error */
import { assert, createPromiseCapability } from '../shared/util'; import { assert, createPromiseCapability } from '../shared/util';
/** @implements {IPDFStream} */ /** @implements {IPDFStream} */
var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { class PDFDataTransportStream {
function PDFDataTransportStream(params, pdfDataRangeTransport) { constructor(params, pdfDataRangeTransport) {
assert(pdfDataRangeTransport); assert(pdfDataRangeTransport);
this._queuedChunks = []; this._queuedChunks = [];
@ -25,7 +26,7 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
const initialData = params.initialData; const initialData = params.initialData;
if (initialData && initialData.length > 0) { if (initialData && initialData.length > 0) {
let buffer = new Uint8Array(initialData).buffer; const buffer = new Uint8Array(initialData).buffer;
this._queuedChunks.push(buffer); this._queuedChunks.push(buffer);
} }
@ -55,9 +56,9 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
this._pdfDataRangeTransport.transportReady(); this._pdfDataRangeTransport.transportReady();
} }
PDFDataTransportStream.prototype = {
_onReceiveData: function PDFDataTransportStream_onReceiveData(args) { _onReceiveData(args) {
let buffer = new Uint8Array(args.chunk).buffer; const buffer = new Uint8Array(args.chunk).buffer;
if (args.begin === undefined) { if (args.begin === undefined) {
if (this._fullRequestReader) { if (this._fullRequestReader) {
this._fullRequestReader._enqueue(buffer); this._fullRequestReader._enqueue(buffer);
@ -65,7 +66,7 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
this._queuedChunks.push(buffer); this._queuedChunks.push(buffer);
} }
} else { } else {
var found = this._rangeReaders.some(function (rangeReader) { const found = this._rangeReaders.some(function(rangeReader) {
if (rangeReader._begin !== args.begin) { if (rangeReader._begin !== args.begin) {
return false; return false;
} }
@ -74,76 +75,74 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
}); });
assert(found); assert(found);
} }
}, }
get _progressiveDataLength() { get _progressiveDataLength() {
return (this._fullRequestReader ? this._fullRequestReader._loaded : 0); return (this._fullRequestReader ? this._fullRequestReader._loaded : 0);
}, }
_onProgress: function PDFDataTransportStream_onDataProgress(evt) { _onProgress(evt) {
if (evt.total === undefined) { if (evt.total === undefined) {
// Reporting to first range reader, if it exists. // Reporting to first range reader, if it exists.
let firstReader = this._rangeReaders[0]; const firstReader = this._rangeReaders[0];
if (firstReader && firstReader.onProgress) { if (firstReader && firstReader.onProgress) {
firstReader.onProgress({ loaded: evt.loaded, }); firstReader.onProgress({ loaded: evt.loaded, });
} }
} else { } else {
let fullReader = this._fullRequestReader; const fullReader = this._fullRequestReader;
if (fullReader && fullReader.onProgress) { if (fullReader && fullReader.onProgress) {
fullReader.onProgress({ loaded: evt.loaded, total: evt.total, }); fullReader.onProgress({ loaded: evt.loaded, total: evt.total, });
} }
} }
}, }
_onProgressiveDone() { _onProgressiveDone() {
if (this._fullRequestReader) { if (this._fullRequestReader) {
this._fullRequestReader.progressiveDone(); this._fullRequestReader.progressiveDone();
} }
this._progressiveDone = true; this._progressiveDone = true;
}, }
_removeRangeReader: _removeRangeReader(reader) {
function PDFDataTransportStream_removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader);
var i = this._rangeReaders.indexOf(reader);
if (i >= 0) { if (i >= 0) {
this._rangeReaders.splice(i, 1); this._rangeReaders.splice(i, 1);
} }
}, }
getFullReader: function PDFDataTransportStream_getFullReader() { getFullReader() {
assert(!this._fullRequestReader); assert(!this._fullRequestReader);
var queuedChunks = this._queuedChunks; const queuedChunks = this._queuedChunks;
this._queuedChunks = null; this._queuedChunks = null;
return new PDFDataTransportStreamReader(this, queuedChunks, return new PDFDataTransportStreamReader(this, queuedChunks,
this._progressiveDone); this._progressiveDone);
}, }
getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) { getRangeReader(begin, end) {
if (end <= this._progressiveDataLength) { if (end <= this._progressiveDataLength) {
return null; return null;
} }
var reader = new PDFDataTransportStreamRangeReader(this, begin, end); const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
this._pdfDataRangeTransport.requestDataRange(begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end);
this._rangeReaders.push(reader); this._rangeReaders.push(reader);
return reader; return reader;
}, }
cancelAllRequests: cancelAllRequests(reason) {
function PDFDataTransportStream_cancelAllRequests(reason) {
if (this._fullRequestReader) { if (this._fullRequestReader) {
this._fullRequestReader.cancel(reason); this._fullRequestReader.cancel(reason);
} }
var readers = this._rangeReaders.slice(0); const readers = this._rangeReaders.slice(0);
readers.forEach(function(rangeReader) { readers.forEach(function(rangeReader) {
rangeReader.cancel(reason); rangeReader.cancel(reason);
}); });
this._pdfDataRangeTransport.abort(); this._pdfDataRangeTransport.abort();
}, }
}; }
/** @implements {IPDFStreamReader} */ /** @implements {IPDFStreamReader} */
function PDFDataTransportStreamReader(stream, queuedChunks, class PDFDataTransportStreamReader {
progressiveDone = false) { constructor(stream, queuedChunks, progressiveDone = false) {
this._stream = stream; this._stream = stream;
this._done = progressiveDone || false; this._done = progressiveDone || false;
this._filename = null; this._filename = null;
@ -156,73 +155,74 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
this._headersReady = Promise.resolve(); this._headersReady = Promise.resolve();
stream._fullRequestReader = this; stream._fullRequestReader = this;
this.onProgress = null; // not used this.onProgress = null;
} }
PDFDataTransportStreamReader.prototype = {
_enqueue: function PDFDataTransportStreamReader_enqueue(chunk) { _enqueue(chunk) {
if (this._done) { if (this._done) {
return; // ignore new data return; // Ignore new data.
} }
if (this._requests.length > 0) { if (this._requests.length > 0) {
var requestCapability = this._requests.shift(); const requestCapability = this._requests.shift();
requestCapability.resolve({ value: chunk, done: false, }); requestCapability.resolve({ value: chunk, done: false, });
} else { } else {
this._queuedChunks.push(chunk); this._queuedChunks.push(chunk);
} }
this._loaded += chunk.byteLength; this._loaded += chunk.byteLength;
}, }
get headersReady() { get headersReady() {
return this._headersReady; return this._headersReady;
}, }
get filename() { get filename() {
return this._filename; return this._filename;
}, }
get isRangeSupported() { get isRangeSupported() {
return this._stream._isRangeSupported; return this._stream._isRangeSupported;
}, }
get isStreamingSupported() { get isStreamingSupported() {
return this._stream._isStreamingSupported; return this._stream._isStreamingSupported;
}, }
get contentLength() { get contentLength() {
return this._stream._contentLength; return this._stream._contentLength;
}, }
async read() { async read() {
if (this._queuedChunks.length > 0) { if (this._queuedChunks.length > 0) {
var chunk = this._queuedChunks.shift(); const chunk = this._queuedChunks.shift();
return { value: chunk, done: false, }; return { value: chunk, done: false, };
} }
if (this._done) { if (this._done) {
return { value: undefined, done: true, }; return { value: undefined, done: true, };
} }
var requestCapability = createPromiseCapability(); const requestCapability = createPromiseCapability();
this._requests.push(requestCapability); this._requests.push(requestCapability);
return requestCapability.promise; return requestCapability.promise;
}, }
cancel: function PDFDataTransportStreamReader_cancel(reason) { cancel(reason) {
this._done = true; this._done = true;
this._requests.forEach(function(requestCapability) { this._requests.forEach(function(requestCapability) {
requestCapability.resolve({ value: undefined, done: true, }); requestCapability.resolve({ value: undefined, done: true, });
}); });
this._requests = []; this._requests = [];
}, }
progressiveDone() { progressiveDone() {
if (this._done) { if (this._done) {
return; return;
} }
this._done = true; this._done = true;
}, }
}; }
/** @implements {IPDFStreamRangeReader} */ /** @implements {IPDFStreamRangeReader} */
function PDFDataTransportStreamRangeReader(stream, begin, end) { class PDFDataTransportStreamRangeReader {
constructor(stream, begin, end) {
this._stream = stream; this._stream = stream;
this._begin = begin; this._begin = begin;
this._end = end; this._end = end;
@ -232,15 +232,15 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
this.onProgress = null; this.onProgress = null;
} }
PDFDataTransportStreamRangeReader.prototype = {
_enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) { _enqueue(chunk) {
if (this._done) { if (this._done) {
return; // ignore new data return; // ignore new data
} }
if (this._requests.length === 0) { if (this._requests.length === 0) {
this._queuedChunk = chunk; this._queuedChunk = chunk;
} else { } else {
var requestsCapability = this._requests.shift(); const requestsCapability = this._requests.shift();
requestsCapability.resolve({ value: chunk, done: false, }); requestsCapability.resolve({ value: chunk, done: false, });
this._requests.forEach(function(requestCapability) { this._requests.forEach(function(requestCapability) {
requestCapability.resolve({ value: undefined, done: true, }); requestCapability.resolve({ value: undefined, done: true, });
@ -249,38 +249,35 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() {
} }
this._done = true; this._done = true;
this._stream._removeRangeReader(this); this._stream._removeRangeReader(this);
}, }
get isStreamingSupported() { get isStreamingSupported() {
return false; return false;
}, }
async read() { async read() {
if (this._queuedChunk) { if (this._queuedChunk) {
let chunk = this._queuedChunk; const chunk = this._queuedChunk;
this._queuedChunk = null; this._queuedChunk = null;
return { value: chunk, done: false, }; return { value: chunk, done: false, };
} }
if (this._done) { if (this._done) {
return { value: undefined, done: true, }; return { value: undefined, done: true, };
} }
var requestCapability = createPromiseCapability(); const requestCapability = createPromiseCapability();
this._requests.push(requestCapability); this._requests.push(requestCapability);
return requestCapability.promise; return requestCapability.promise;
}, }
cancel: function PDFDataTransportStreamRangeReader_cancel(reason) { cancel(reason) {
this._done = true; this._done = true;
this._requests.forEach(function(requestCapability) { this._requests.forEach(function(requestCapability) {
requestCapability.resolve({ value: undefined, done: true, }); requestCapability.resolve({ value: undefined, done: true, });
}); });
this._requests = []; this._requests = [];
this._stream._removeRangeReader(this); this._stream._removeRangeReader(this);
}, }
}; }
return PDFDataTransportStream;
})();
export { export {
PDFDataTransportStream, PDFDataTransportStream,