Refactors GetAnnotationsRequest and GetPageRequest

This commit is contained in:
Yury Delendik 2014-05-08 15:02:53 -05:00
parent 2008f74185
commit cc9643cf32
3 changed files with 31 additions and 52 deletions

View File

@ -258,23 +258,19 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
}, onFailure); }, onFailure);
}); });
handler.on('GetPageRequest', function wphSetupGetPage(data) { handler.on('GetPage', function wphSetupGetPage(data) {
var pageIndex = data.pageIndex; return pdfManager.getPage(data.pageIndex).then(function(page) {
pdfManager.getPage(pageIndex).then(function(page) {
var rotatePromise = pdfManager.ensure(page, 'rotate'); var rotatePromise = pdfManager.ensure(page, 'rotate');
var refPromise = pdfManager.ensure(page, 'ref'); var refPromise = pdfManager.ensure(page, 'ref');
var viewPromise = pdfManager.ensure(page, 'view'); var viewPromise = pdfManager.ensure(page, 'view');
Promise.all([rotatePromise, refPromise, viewPromise]).then( return Promise.all([rotatePromise, refPromise, viewPromise]).then(
function(results) { function(results) {
var page = { return {
pageIndex: data.pageIndex,
rotate: results[0], rotate: results[0],
ref: results[1], ref: results[1],
view: results[2] view: results[2]
}; };
handler.send('GetPage', { pageInfo: page });
}); });
}); });
}); });
@ -327,16 +323,9 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
pdfManager.updatePassword(data); pdfManager.updatePassword(data);
}); });
handler.on('GetAnnotationsRequest', function wphSetupGetAnnotations(data) { handler.on('GetAnnotations', function wphSetupGetAnnotations(data) {
pdfManager.getPage(data.pageIndex).then(function(page) { return pdfManager.getPage(data.pageIndex).then(function(page) {
pdfManager.ensure(page, 'getAnnotationsData', []).then( return pdfManager.ensure(page, 'getAnnotationsData', []);
function(annotationsData) {
handler.send('GetAnnotations', {
pageIndex: data.pageIndex,
annotations: annotationsData
});
}
);
}); });
}); });

View File

@ -387,7 +387,8 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
* @class * @class
*/ */
var PDFPageProxy = (function PDFPageProxyClosure() { var PDFPageProxy = (function PDFPageProxyClosure() {
function PDFPageProxy(pageInfo, transport) { function PDFPageProxy(pageIndex, pageInfo, transport) {
this.pageIndex = pageIndex;
this.pageInfo = pageInfo; this.pageInfo = pageInfo;
this.transport = transport; this.transport = transport;
this.stats = new StatTimer(); this.stats = new StatTimer();
@ -403,7 +404,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
* @return {number} Page number of the page. First page is 1. * @return {number} Page number of the page. First page is 1.
*/ */
get pageNumber() { get pageNumber() {
return this.pageInfo.pageIndex + 1; return this.pageIndex + 1;
}, },
/** /**
* @return {number} The number of degrees the page is rotated clockwise. * @return {number} The number of degrees the page is rotated clockwise.
@ -443,14 +444,13 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
* annotation objects. * annotation objects.
*/ */
getAnnotations: function PDFPageProxy_getAnnotations() { getAnnotations: function PDFPageProxy_getAnnotations() {
if (this.annotationsCapability) { if (this.annotationsPromise) {
return this.annotationsCapability.promise; return this.annotationsPromise;
} }
var capability = createPromiseCapability(); var promise = this.transport.getAnnotations(this.pageIndex);
this.annotationsCapability = capability; this.annotationsPromise = promise;
this.transport.getAnnotations(this.pageInfo.pageIndex); return promise;
return capability.promise;
}, },
/** /**
* Begins the process of rendering a page to the desired context. * Begins the process of rendering a page to the desired context.
@ -576,6 +576,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
delete this.intentStates[intent]; delete this.intentStates[intent];
}, this); }, this);
this.objs.clear(); this.objs.clear();
this.annotationsPromise = null;
this.pendingDestroy = false; this.pendingDestroy = false;
}, },
/** /**
@ -631,7 +632,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.commonObjs = new PDFObjects(); this.commonObjs = new PDFObjects();
this.pageCache = []; this.pageCache = [];
this.pageCapabilities = []; this.pagePromises = [];
this.downloadInfoCapability = createPromiseCapability(); this.downloadInfoCapability = createPromiseCapability();
this.passwordCallback = null; this.passwordCallback = null;
@ -699,7 +700,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
WorkerTransport.prototype = { WorkerTransport.prototype = {
destroy: function WorkerTransport_destroy() { destroy: function WorkerTransport_destroy() {
this.pageCache = []; this.pageCache = [];
this.pageCapabilities = []; this.pagePromises = [];
var self = this; var self = this;
this.messageHandler.sendWithPromise('Terminate', null).then(function () { this.messageHandler.sendWithPromise('Terminate', null).then(function () {
FontLoader.clear(); FontLoader.clear();
@ -821,20 +822,6 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.downloadInfoCapability.resolve(data); this.downloadInfoCapability.resolve(data);
}, this); }, this);
messageHandler.on('GetPage', function transportPage(data) {
var pageInfo = data.pageInfo;
var page = new PDFPageProxy(pageInfo, this);
this.pageCache[pageInfo.pageIndex] = page;
var promise = this.pageCapabilities[pageInfo.pageIndex];
promise.resolve(page);
}, this);
messageHandler.on('GetAnnotations', function transportAnnotations(data) {
var annotations = data.annotations;
var promise = this.pageCache[data.pageIndex].annotationsCapability;
promise.resolve(annotations);
}, this);
messageHandler.on('StartRenderPage', function transportRender(data) { messageHandler.on('StartRenderPage', function transportRender(data) {
var page = this.pageCache[data.pageIndex]; var page = this.pageCache[data.pageIndex];
@ -943,7 +930,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
var components = data[1]; var components = data[1];
if (components != 3 && components != 1) { if (components != 3 && components != 1) {
return Promise.reject( return Promise.reject(
new Error('Only 3 component or 1 component can be returned')); new Error('Only 3 components or 1 component can be returned'));
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
@ -978,7 +965,6 @@ var WorkerTransport = (function WorkerTransportClosure() {
}; };
img.src = imageUrl; img.src = imageUrl;
}); });
}); });
}, },
@ -1010,13 +996,18 @@ var WorkerTransport = (function WorkerTransportClosure() {
} }
var pageIndex = pageNumber - 1; var pageIndex = pageNumber - 1;
if (pageIndex in this.pageCapabilities) { if (pageIndex in this.pagePromises) {
return this.pageCapabilities[pageIndex].promise; return this.pagePromises[pageIndex];
} }
capability = createPromiseCapability(); var promise = this.messageHandler.sendWithPromise('GetPage', {
this.pageCapabilities[pageIndex] = capability; pageIndex: pageIndex
this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex }); }).then(function (pageInfo) {
return capability.promise; var page = new PDFPageProxy(pageIndex, pageInfo, this);
this.pageCache[pageIndex] = page;
return page;
}.bind(this));
this.pagePromises[pageIndex] = promise;
return promise;
}, },
getPageIndex: function WorkerTransport_getPageIndexByRef(ref) { getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {
@ -1024,7 +1015,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
}, },
getAnnotations: function WorkerTransport_getAnnotations(pageIndex) { getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {
this.messageHandler.send('GetAnnotationsRequest', return this.messageHandler.sendWithPromise('GetAnnotations',
{ pageIndex: pageIndex }); { pageIndex: pageIndex });
}, },

View File

@ -1448,7 +1448,6 @@ MessageHandler.prototype = {
* @param {String} actionName Action to call. * @param {String} actionName Action to call.
* @param {JSON} data JSON data to send. * @param {JSON} data JSON data to send.
* @param {Array} [transfers] Optional list of transfers/ArrayBuffers. * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.
* @param {boolean} withPromise true if response if expected.
* @returns {Promise} Promise to be resolved with response data. * @returns {Promise} Promise to be resolved with response data.
*/ */
sendWithPromise: sendWithPromise: