Skip to content

Commit c5084d9

Browse files
committed
Update loading bar during onprogress of range requests
1 parent 8e4d9e9 commit c5084d9

File tree

4 files changed

+48
-7
lines changed

4 files changed

+48
-7
lines changed

extensions/firefox/components/PdfStreamConverter.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,12 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
479479
begin: args.begin,
480480
chunk: args.chunk
481481
}, '*');
482+
},
483+
onProgress: function RangedChromeActions_onProgress(evt) {
484+
domWindow.postMessage({
485+
pdfjsLoadAction: 'rangeProgress',
486+
loaded: evt.loaded,
487+
}, '*');
482488
}
483489
});
484490
};

src/api.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,13 +561,19 @@ var WorkerTransport = (function WorkerTransportClosure() {
561561

562562
var pdfDataRangeTransport = this.pdfDataRangeTransport;
563563
if (pdfDataRangeTransport) {
564-
pdfDataRangeTransport.addListener(function(begin, chunk) {
564+
pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
565565
messageHandler.send('OnDataRange', {
566566
begin: begin,
567567
chunk: chunk
568568
});
569569
});
570570

571+
pdfDataRangeTransport.addProgressListener(function(loaded) {
572+
messageHandler.send('OnDataProgress', {
573+
loaded: loaded
574+
});
575+
});
576+
571577
messageHandler.on('RequestDataRange',
572578
function transportDataRange(data) {
573579
pdfDataRangeTransport.requestDataRange(data.begin, data.end);

src/chunked_stream.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ var ChunkedStream = (function ChunkedStreamClosure() {
194194
var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
195195

196196
function ChunkedStreamManager(length, chunkSize, url, args) {
197+
var self = this;
197198
this.stream = new ChunkedStream(length, chunkSize);
198199
this.length = length;
199200
this.chunkSize = chunkSize;
@@ -203,6 +204,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
203204

204205
if (args.chunkedViewerLoading) {
205206
msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
207+
msgHandler.on('OnDataProgress', this.onProgress.bind(this));
206208
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
207209
msgHandler.send('RequestDataRange', { begin: begin, end: end });
208210
};
@@ -219,10 +221,10 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
219221
getXhr: getXhr,
220222
httpHeaders: args.httpHeaders
221223
});
222-
var self = this;
223224
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
224225
this.networkManager.requestRange(begin, end, {
225226
onDone: this.onReceiveData.bind(this),
227+
onProgress: this.onProgress.bind(this)
226228
});
227229
};
228230
}
@@ -347,6 +349,15 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
347349
return groupedChunks;
348350
},
349351

352+
onProgress: function ChunkedStreamManager_onProgress(args) {
353+
var bytesLoaded = this.stream.numChunksLoaded * this.chunkSize +
354+
args.loaded;
355+
this.msgHandler.send('DocProgress', {
356+
loaded: bytesLoaded,
357+
total: this.length
358+
});
359+
},
360+
350361
onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
351362
var chunk = args.chunk;
352363
var begin = args.begin;

web/viewer.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -941,15 +941,30 @@ var PDFView = {
941941
}
942942

943943
var pdfDataRangeTransport = {
944-
listeners: [],
944+
rangeListeners: [],
945+
progressListeners: [],
945946

946-
addListener: function PdfDataRangeTransport_addListener(listener) {
947-
this.listeners.push(listener);
947+
addRangeListener: function PdfDataRangeTransport_addRangeListener(
948+
listener) {
949+
this.rangeListeners.push(listener);
950+
},
951+
952+
addProgressListener: function PdfDataRangeTransport_addProgressListener(
953+
listener) {
954+
this.progressListeners.push(listener);
948955
},
949956

950957
onDataRange: function PdfDataRangeTransport_onDataRange(begin, chunk) {
951-
for (var i = 0, n = this.listeners.length; i < n; ++i) {
952-
this.listeners[i](begin, chunk);
958+
var listeners = this.rangeListeners;
959+
for (var i = 0, n = listeners.length; i < n; ++i) {
960+
listeners[i](begin, chunk);
961+
}
962+
},
963+
964+
onDataProgress: function PdfDataRangeTransport_onDataProgress(loaded) {
965+
var listeners = this.progressListeners;
966+
for (var i = 0, n = listeners.length; i < n; ++i) {
967+
listeners[i](loaded);
953968
}
954969
},
955970

@@ -973,6 +988,9 @@ var PDFView = {
973988
case 'range':
974989
pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
975990
break;
991+
case 'rangeProgress':
992+
pdfDataRangeTransport.onDataProgress(args.loaded);
993+
break;
976994
case 'progress':
977995
PDFView.progress(args.loaded / args.total);
978996
break;

0 commit comments

Comments
 (0)