Merge pull request #12613 from Snuffleupagus/isPageCached
Trigger cleanup, once rendering has finished, in `PDFThumbnailView.draw`
This commit is contained in:
commit
59b35600be
@ -115,6 +115,10 @@ function PDFPageViewBuffer(size) {
|
||||
data.shift().destroy();
|
||||
}
|
||||
};
|
||||
|
||||
this.has = function (view) {
|
||||
return data.includes(view);
|
||||
};
|
||||
}
|
||||
|
||||
function isSameScale(oldScale, newScale) {
|
||||
@ -1096,9 +1100,15 @@ class BaseViewer {
|
||||
if (!this.pdfDocument) {
|
||||
return false;
|
||||
}
|
||||
if (pageNumber < 1 || pageNumber > this.pagesCount) {
|
||||
if (
|
||||
!(
|
||||
Number.isInteger(pageNumber) &&
|
||||
pageNumber > 0 &&
|
||||
pageNumber <= this.pagesCount
|
||||
)
|
||||
) {
|
||||
console.error(
|
||||
`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`
|
||||
`${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
@ -1107,6 +1117,32 @@ class BaseViewer {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} pageNumber
|
||||
*/
|
||||
isPageCached(pageNumber) {
|
||||
if (!this.pdfDocument || !this._buffer) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
!(
|
||||
Number.isInteger(pageNumber) &&
|
||||
pageNumber > 0 &&
|
||||
pageNumber <= this.pagesCount
|
||||
)
|
||||
) {
|
||||
console.error(
|
||||
`${this._name}.isPageCached: "${pageNumber}" is not a valid page.`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
const pageView = this._pages[pageNumber - 1];
|
||||
if (!pageView) {
|
||||
return false;
|
||||
}
|
||||
return this._buffer.has(pageView);
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
for (let i = 0, ii = this._pages.length; i < ii; i++) {
|
||||
if (
|
||||
|
@ -95,6 +95,11 @@ class IPDFLinkService {
|
||||
* @param {number} pageNumber
|
||||
*/
|
||||
isPageVisible(pageNumber) {}
|
||||
|
||||
/**
|
||||
* @param {number} pageNumber
|
||||
*/
|
||||
isPageCached(pageNumber) {}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -458,6 +458,13 @@ class PDFLinkService {
|
||||
isPageVisible(pageNumber) {
|
||||
return this.pdfViewer.isPageVisible(pageNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} pageNumber
|
||||
*/
|
||||
isPageCached(pageNumber) {
|
||||
return this.pdfViewer.isPageCached(pageNumber);
|
||||
}
|
||||
}
|
||||
|
||||
function isValidExplicitDestination(dest) {
|
||||
@ -609,6 +616,13 @@ class SimpleLinkService {
|
||||
isPageVisible(pageNumber) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} pageNumber
|
||||
*/
|
||||
isPageCached(pageNumber) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export { PDFLinkService, SimpleLinkService };
|
||||
|
@ -363,6 +363,16 @@ class PDFThumbnailView {
|
||||
finishRenderTask(error);
|
||||
}
|
||||
);
|
||||
// Only trigger cleanup, once rendering has finished, when the current
|
||||
// pageView is *not* cached on the `BaseViewer`-instance.
|
||||
resultPromise.finally(() => {
|
||||
const pageCached = this.linkService.isPageCached(this.id);
|
||||
if (pageCached) {
|
||||
return;
|
||||
}
|
||||
this.pdfPage?.cleanup();
|
||||
});
|
||||
|
||||
return resultPromise;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user