Merge pull request #3124 from mduan/issue3118-1
Update loading bar during onprogress of range requests
This commit is contained in:
commit
a081c2d0f1
@ -479,6 +479,12 @@ var RangedChromeActions = (function RangedChromeActionsClosure() {
|
|||||||
begin: args.begin,
|
begin: args.begin,
|
||||||
chunk: args.chunk
|
chunk: args.chunk
|
||||||
}, '*');
|
}, '*');
|
||||||
|
},
|
||||||
|
onProgress: function RangedChromeActions_onProgress(evt) {
|
||||||
|
domWindow.postMessage({
|
||||||
|
pdfjsLoadAction: 'rangeProgress',
|
||||||
|
loaded: evt.loaded,
|
||||||
|
}, '*');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -561,13 +561,19 @@ var WorkerTransport = (function WorkerTransportClosure() {
|
|||||||
|
|
||||||
var pdfDataRangeTransport = this.pdfDataRangeTransport;
|
var pdfDataRangeTransport = this.pdfDataRangeTransport;
|
||||||
if (pdfDataRangeTransport) {
|
if (pdfDataRangeTransport) {
|
||||||
pdfDataRangeTransport.addListener(function(begin, chunk) {
|
pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
|
||||||
messageHandler.send('OnDataRange', {
|
messageHandler.send('OnDataRange', {
|
||||||
begin: begin,
|
begin: begin,
|
||||||
chunk: chunk
|
chunk: chunk
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
pdfDataRangeTransport.addProgressListener(function(loaded) {
|
||||||
|
messageHandler.send('OnDataProgress', {
|
||||||
|
loaded: loaded
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
messageHandler.on('RequestDataRange',
|
messageHandler.on('RequestDataRange',
|
||||||
function transportDataRange(data) {
|
function transportDataRange(data) {
|
||||||
pdfDataRangeTransport.requestDataRange(data.begin, data.end);
|
pdfDataRangeTransport.requestDataRange(data.begin, data.end);
|
||||||
|
@ -194,6 +194,7 @@ var ChunkedStream = (function ChunkedStreamClosure() {
|
|||||||
var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
||||||
|
|
||||||
function ChunkedStreamManager(length, chunkSize, url, args) {
|
function ChunkedStreamManager(length, chunkSize, url, args) {
|
||||||
|
var self = this;
|
||||||
this.stream = new ChunkedStream(length, chunkSize);
|
this.stream = new ChunkedStream(length, chunkSize);
|
||||||
this.length = length;
|
this.length = length;
|
||||||
this.chunkSize = chunkSize;
|
this.chunkSize = chunkSize;
|
||||||
@ -203,6 +204,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|||||||
|
|
||||||
if (args.chunkedViewerLoading) {
|
if (args.chunkedViewerLoading) {
|
||||||
msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
|
msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
|
||||||
|
msgHandler.on('OnDataProgress', this.onProgress.bind(this));
|
||||||
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
|
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
|
||||||
msgHandler.send('RequestDataRange', { begin: begin, end: end });
|
msgHandler.send('RequestDataRange', { begin: begin, end: end });
|
||||||
};
|
};
|
||||||
@ -219,10 +221,10 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|||||||
getXhr: getXhr,
|
getXhr: getXhr,
|
||||||
httpHeaders: args.httpHeaders
|
httpHeaders: args.httpHeaders
|
||||||
});
|
});
|
||||||
var self = this;
|
|
||||||
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
|
this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
|
||||||
this.networkManager.requestRange(begin, end, {
|
this.networkManager.requestRange(begin, end, {
|
||||||
onDone: this.onReceiveData.bind(this),
|
onDone: this.onReceiveData.bind(this),
|
||||||
|
onProgress: this.onProgress.bind(this)
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -347,6 +349,15 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|||||||
return groupedChunks;
|
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) {
|
onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
|
||||||
var chunk = args.chunk;
|
var chunk = args.chunk;
|
||||||
var begin = args.begin;
|
var begin = args.begin;
|
||||||
|
@ -110,6 +110,7 @@ var ProgressBar = (function ProgressBarClosure() {
|
|||||||
|
|
||||||
// Initialize heights
|
// Initialize heights
|
||||||
this.div.style.height = this.height + this.units;
|
this.div.style.height = this.height + this.units;
|
||||||
|
this.percent = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressBar.prototype = {
|
ProgressBar.prototype = {
|
||||||
@ -942,15 +943,30 @@ var PDFView = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var pdfDataRangeTransport = {
|
var pdfDataRangeTransport = {
|
||||||
listeners: [],
|
rangeListeners: [],
|
||||||
|
progressListeners: [],
|
||||||
|
|
||||||
addListener: function PdfDataRangeTransport_addListener(listener) {
|
addRangeListener: function PdfDataRangeTransport_addRangeListener(
|
||||||
this.listeners.push(listener);
|
listener) {
|
||||||
|
this.rangeListeners.push(listener);
|
||||||
|
},
|
||||||
|
|
||||||
|
addProgressListener: function PdfDataRangeTransport_addProgressListener(
|
||||||
|
listener) {
|
||||||
|
this.progressListeners.push(listener);
|
||||||
},
|
},
|
||||||
|
|
||||||
onDataRange: function PdfDataRangeTransport_onDataRange(begin, chunk) {
|
onDataRange: function PdfDataRangeTransport_onDataRange(begin, chunk) {
|
||||||
for (var i = 0, n = this.listeners.length; i < n; ++i) {
|
var listeners = this.rangeListeners;
|
||||||
this.listeners[i](begin, chunk);
|
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);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -974,6 +990,9 @@ var PDFView = {
|
|||||||
case 'range':
|
case 'range':
|
||||||
pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
|
pdfDataRangeTransport.onDataRange(args.begin, args.chunk);
|
||||||
break;
|
break;
|
||||||
|
case 'rangeProgress':
|
||||||
|
pdfDataRangeTransport.onDataProgress(args.loaded);
|
||||||
|
break;
|
||||||
case 'progress':
|
case 'progress':
|
||||||
PDFView.progress(args.loaded / args.total);
|
PDFView.progress(args.loaded / args.total);
|
||||||
break;
|
break;
|
||||||
@ -1324,7 +1343,13 @@ var PDFView = {
|
|||||||
|
|
||||||
progress: function pdfViewProgress(level) {
|
progress: function pdfViewProgress(level) {
|
||||||
var percent = Math.round(level * 100);
|
var percent = Math.round(level * 100);
|
||||||
PDFView.loadingBar.percent = percent;
|
// When we transition from full request to range requests, it's possible
|
||||||
|
// that we discard some of the loaded data. This can cause the loading
|
||||||
|
// bar to move backwards. So prevent this by only updating the bar if it
|
||||||
|
// increases.
|
||||||
|
if (percent > PDFView.loadingBar.percent) {
|
||||||
|
PDFView.loadingBar.percent = percent;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
load: function pdfViewLoad(pdfDocument, scale) {
|
load: function pdfViewLoad(pdfDocument, scale) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user