Merge pull request #11676 from Snuffleupagus/BaseViewer-reset-PromiseCapability
Slightly improve the `BaseViewer.{firstPagePromise, onePageRendered, pagesPromise}` functionality
This commit is contained in:
commit
6dfa10fe97
@ -1057,9 +1057,7 @@ const PDFViewerApplication = {
|
|||||||
|
|
||||||
const pdfViewer = this.pdfViewer;
|
const pdfViewer = this.pdfViewer;
|
||||||
pdfViewer.setDocument(pdfDocument);
|
pdfViewer.setDocument(pdfDocument);
|
||||||
const firstPagePromise = pdfViewer.firstPagePromise;
|
const { firstPagePromise, onePageRendered, pagesPromise } = pdfViewer;
|
||||||
const pagesPromise = pdfViewer.pagesPromise;
|
|
||||||
const onePageRendered = pdfViewer.onePageRendered;
|
|
||||||
|
|
||||||
const pdfThumbnailViewer = this.pdfThumbnailViewer;
|
const pdfThumbnailViewer = this.pdfThumbnailViewer;
|
||||||
pdfThumbnailViewer.setDocument(pdfDocument);
|
pdfThumbnailViewer.setDocument(pdfDocument);
|
||||||
|
@ -198,13 +198,13 @@ class BaseViewer {
|
|||||||
* @type {boolean} - True if all {PDFPageView} objects are initialized.
|
* @type {boolean} - True if all {PDFPageView} objects are initialized.
|
||||||
*/
|
*/
|
||||||
get pageViewsReady() {
|
get pageViewsReady() {
|
||||||
if (!this._pageViewsReady) {
|
if (!this._pagesCapability.settled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Prevent printing errors when 'disableAutoFetch' is set, by ensuring
|
// Prevent printing errors when 'disableAutoFetch' is set, by ensuring
|
||||||
// that *all* pages have in fact been completely loaded.
|
// that *all* pages have in fact been completely loaded.
|
||||||
return this._pages.every(function(pageView) {
|
return this._pages.every(function(pageView) {
|
||||||
return !!(pageView && pageView.pdfPage);
|
return pageView && pageView.pdfPage;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,6 +376,21 @@ class BaseViewer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get firstPagePromise() {
|
||||||
|
return this.pdfDocument ? this._firstPageCapability.promise : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get onePageRendered() {
|
||||||
|
return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get pagesPromise() {
|
||||||
|
return this.pdfDocument ? this._pagesCapability.promise : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
get _setDocumentViewerElement() {
|
get _setDocumentViewerElement() {
|
||||||
// In most viewers, e.g. `PDFViewer`, this should return `this.viewer`.
|
// In most viewers, e.g. `PDFViewer`, this should return `this.viewer`.
|
||||||
throw new Error("Not implemented: _setDocumentViewerElement");
|
throw new Error("Not implemented: _setDocumentViewerElement");
|
||||||
@ -399,24 +414,15 @@ class BaseViewer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const pagesCount = pdfDocument.numPages;
|
const pagesCount = pdfDocument.numPages;
|
||||||
|
const firstPagePromise = pdfDocument.getPage(1);
|
||||||
|
|
||||||
const pagesCapability = createPromiseCapability();
|
this._pagesCapability.promise.then(() => {
|
||||||
this.pagesPromise = pagesCapability.promise;
|
|
||||||
|
|
||||||
pagesCapability.promise.then(() => {
|
|
||||||
this._pageViewsReady = true;
|
|
||||||
this.eventBus.dispatch("pagesloaded", {
|
this.eventBus.dispatch("pagesloaded", {
|
||||||
source: this,
|
source: this,
|
||||||
pagesCount,
|
pagesCount,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const onePageRenderedCapability = createPromiseCapability();
|
|
||||||
this.onePageRendered = onePageRenderedCapability.promise;
|
|
||||||
|
|
||||||
const firstPagePromise = pdfDocument.getPage(1);
|
|
||||||
this.firstPagePromise = firstPagePromise;
|
|
||||||
|
|
||||||
this._onBeforeDraw = evt => {
|
this._onBeforeDraw = evt => {
|
||||||
const pageView = this._pages[evt.pageNumber - 1];
|
const pageView = this._pages[evt.pageNumber - 1];
|
||||||
if (!pageView) {
|
if (!pageView) {
|
||||||
@ -429,10 +435,10 @@ class BaseViewer {
|
|||||||
this.eventBus._on("pagerender", this._onBeforeDraw);
|
this.eventBus._on("pagerender", this._onBeforeDraw);
|
||||||
|
|
||||||
this._onAfterDraw = evt => {
|
this._onAfterDraw = evt => {
|
||||||
if (evt.cssTransform || onePageRenderedCapability.settled) {
|
if (evt.cssTransform || this._onePageRenderedCapability.settled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onePageRenderedCapability.resolve();
|
this._onePageRenderedCapability.resolve();
|
||||||
|
|
||||||
this.eventBus._off("pagerendered", this._onAfterDraw);
|
this.eventBus._off("pagerendered", this._onAfterDraw);
|
||||||
this._onAfterDraw = null;
|
this._onAfterDraw = null;
|
||||||
@ -443,13 +449,14 @@ class BaseViewer {
|
|||||||
// viewport for all pages
|
// viewport for all pages
|
||||||
firstPagePromise
|
firstPagePromise
|
||||||
.then(firstPdfPage => {
|
.then(firstPdfPage => {
|
||||||
|
this._firstPageCapability.resolve(firstPdfPage);
|
||||||
|
|
||||||
const scale = this.currentScale;
|
const scale = this.currentScale;
|
||||||
const viewport = firstPdfPage.getViewport({ scale: scale * CSS_UNITS });
|
const viewport = firstPdfPage.getViewport({ scale: scale * CSS_UNITS });
|
||||||
|
const textLayerFactory =
|
||||||
|
this.textLayerMode !== TextLayerMode.DISABLE ? this : null;
|
||||||
|
|
||||||
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||||
let textLayerFactory = null;
|
|
||||||
if (this.textLayerMode !== TextLayerMode.DISABLE) {
|
|
||||||
textLayerFactory = this;
|
|
||||||
}
|
|
||||||
const pageView = new PDFPageView({
|
const pageView = new PDFPageView({
|
||||||
container: this._setDocumentViewerElement,
|
container: this._setDocumentViewerElement,
|
||||||
eventBus: this.eventBus,
|
eventBus: this.eventBus,
|
||||||
@ -485,7 +492,7 @@ class BaseViewer {
|
|||||||
// Fetch all the pages since the viewport is needed before printing
|
// Fetch all the pages since the viewport is needed before printing
|
||||||
// starts to create the correct size canvas. Wait until one page is
|
// starts to create the correct size canvas. Wait until one page is
|
||||||
// rendered so we don't tie up too many resources early on.
|
// rendered so we don't tie up too many resources early on.
|
||||||
onePageRenderedCapability.promise.then(() => {
|
this._onePageRenderedCapability.promise.then(() => {
|
||||||
if (this.findController) {
|
if (this.findController) {
|
||||||
this.findController.setDocument(pdfDocument); // Enable searching.
|
this.findController.setDocument(pdfDocument); // Enable searching.
|
||||||
}
|
}
|
||||||
@ -497,13 +504,13 @@ class BaseViewer {
|
|||||||
pagesCount > 7500
|
pagesCount > 7500
|
||||||
) {
|
) {
|
||||||
// XXX: Printing is semi-broken with auto fetch disabled.
|
// XXX: Printing is semi-broken with auto fetch disabled.
|
||||||
pagesCapability.resolve();
|
this._pagesCapability.resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let getPagesLeft = pagesCount - 1; // The first page was already loaded.
|
let getPagesLeft = pagesCount - 1; // The first page was already loaded.
|
||||||
|
|
||||||
if (getPagesLeft <= 0) {
|
if (getPagesLeft <= 0) {
|
||||||
pagesCapability.resolve();
|
this._pagesCapability.resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
|
for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
|
||||||
@ -515,7 +522,7 @@ class BaseViewer {
|
|||||||
}
|
}
|
||||||
this.linkService.cachePageRef(pageNum, pdfPage.ref);
|
this.linkService.cachePageRef(pageNum, pdfPage.ref);
|
||||||
if (--getPagesLeft === 0) {
|
if (--getPagesLeft === 0) {
|
||||||
pagesCapability.resolve();
|
this._pagesCapability.resolve();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reason => {
|
reason => {
|
||||||
@ -524,7 +531,7 @@ class BaseViewer {
|
|||||||
reason
|
reason
|
||||||
);
|
);
|
||||||
if (--getPagesLeft === 0) {
|
if (--getPagesLeft === 0) {
|
||||||
pagesCapability.resolve();
|
this._pagesCapability.resolve();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -577,7 +584,9 @@ class BaseViewer {
|
|||||||
this._location = null;
|
this._location = null;
|
||||||
this._pagesRotation = 0;
|
this._pagesRotation = 0;
|
||||||
this._pagesRequests = new WeakMap();
|
this._pagesRequests = new WeakMap();
|
||||||
this._pageViewsReady = false;
|
this._firstPageCapability = createPromiseCapability();
|
||||||
|
this._onePageRenderedCapability = createPromiseCapability();
|
||||||
|
this._pagesCapability = createPromiseCapability();
|
||||||
this._scrollMode = ScrollMode.VERTICAL;
|
this._scrollMode = ScrollMode.VERTICAL;
|
||||||
this._spreadMode = SpreadMode.NONE;
|
this._spreadMode = SpreadMode.NONE;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user