Browse Source

Update loading bar during onprogress of range requests

Mack Duan 12 years ago
parent
commit
c5084d9e8a
  1. 6
      extensions/firefox/components/PdfStreamConverter.js
  2. 8
      src/api.js
  3. 13
      src/chunked_stream.js
  4. 28
      web/viewer.js

6
extensions/firefox/components/PdfStreamConverter.js

@ -479,6 +479,12 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { @@ -479,6 +479,12 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
begin: args.begin,
chunk: args.chunk
}, '*');
},
onProgress: function RangedChromeActions_onProgress(evt) {
domWindow.postMessage({
pdfjsLoadAction: 'rangeProgress',
loaded: evt.loaded,
}, '*');
}
});
};

8
src/api.js

@ -561,13 +561,19 @@ var WorkerTransport = (function WorkerTransportClosure() { @@ -561,13 +561,19 @@ var WorkerTransport = (function WorkerTransportClosure() {
var pdfDataRangeTransport = this.pdfDataRangeTransport;
if (pdfDataRangeTransport) {
pdfDataRangeTransport.addListener(function(begin, chunk) {
pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
messageHandler.send('OnDataRange', {
begin: begin,
chunk: chunk
});
});
pdfDataRangeTransport.addProgressListener(function(loaded) {
messageHandler.send('OnDataProgress', {
loaded: loaded
});
});
messageHandler.on('RequestDataRange',
function transportDataRange(data) {
pdfDataRangeTransport.requestDataRange(data.begin, data.end);

13
src/chunked_stream.js

@ -194,6 +194,7 @@ var ChunkedStream = (function ChunkedStreamClosure() { @@ -194,6 +194,7 @@ var ChunkedStream = (function ChunkedStreamClosure() {
var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
function ChunkedStreamManager(length, chunkSize, url, args) {
var self = this;
this.stream = new ChunkedStream(length, chunkSize);
this.length = length;
this.chunkSize = chunkSize;
@ -203,6 +204,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() { @@ -203,6 +204,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
if (args.chunkedViewerLoading) {
msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
msgHandler.on('OnDataProgress', this.onProgress.bind(this));
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
msgHandler.send('RequestDataRange', { begin: begin, end: end });
};
@ -219,10 +221,10 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() { @@ -219,10 +221,10 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
getXhr: getXhr,
httpHeaders: args.httpHeaders
});
var self = this;
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
this.networkManager.requestRange(begin, end, {
onDone: this.onReceiveData.bind(this),
onProgress: this.onProgress.bind(this)
});
};
}
@ -347,6 +349,15 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() { @@ -347,6 +349,15 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
return groupedChunks;
},
onProgress: function ChunkedStreamManager_onProgress(args) {
var bytesLoaded = this.stream.numChunksLoaded * this.chunkSize +
args.loaded;
this.msgHandler.send('DocProgress', {
loaded: bytesLoaded,
total: this.length
});
},
onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
var chunk = args.chunk;
var begin = args.begin;

28
web/viewer.js

@ -941,15 +941,30 @@ var PDFView = { @@ -941,15 +941,30 @@ var PDFView = {
}
var pdfDataRangeTransport = {
listeners: [],
rangeListeners: [],
progressListeners: [],
addListener: function PdfDataRangeTransport_addListener(listener) {
this.listeners.push(listener);
addRangeListener: function PdfDataRangeTransport_addRangeListener(
listener) {
this.rangeListeners.push(listener);
},
addProgressListener: function PdfDataRangeTransport_addProgressListener(
listener) {
this.progressListeners.push(listener);
},
onDataRange: function PdfDataRangeTransport_onDataRange(begin, chunk) {
for (var i = 0, n = this.listeners.length; i < n; ++i) {
this.listeners[i](begin, chunk);
var listeners = this.rangeListeners;
for (var i = 0, n = listeners.length; i < n; ++i) {
listeners[i](begin, chunk);
}
},
onDataProgress: function PdfDataRangeTransport_onDataProgress(loaded) {
var listeners = this.progressListeners;
for (var i = 0, n = listeners.length; i < n; ++i) {
listeners[i](loaded);
}
},
@ -973,6 +988,9 @@ var PDFView = { @@ -973,6 +988,9 @@ var PDFView = {
case 'range':
pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
break;
case 'rangeProgress':
pdfDataRangeTransport.onDataProgress(args.loaded);
break;
case 'progress':
PDFView.progress(args.loaded / args.total);
break;

Loading…
Cancel
Save