From 3861af50d147de9dab7bfe8345f450a5eebe8681 Mon Sep 17 00:00:00 2001 From: windingwind <33902321+windingwind@users.noreply.github.com> Date: Tue, 3 Sep 2024 04:16:17 +0000 Subject: [PATCH] Fix attachment box preview discard fix: #4659 --- .../content/zotero/elements/attachmentBox.js | 63 ++++++++++--------- .../content/zotero/elements/attachmentsBox.js | 10 +-- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/chrome/content/zotero/elements/attachmentBox.js b/chrome/content/zotero/elements/attachmentBox.js index ba5aa85f48..2927670ec9 100644 --- a/chrome/content/zotero/elements/attachmentBox.js +++ b/chrome/content/zotero/elements/attachmentBox.js @@ -320,12 +320,45 @@ this._previewDiscarded = false; this.previewElem.render(); } - this._lastPreviewRenderTime = Date.now(); + this._lastPreviewRenderId = `${Date.now()}-${Math.random()}`; return; } Zotero.debug('Refreshing attachment box'); this._asyncRendering = true; + + await this.renderAttachmentInfo(); + + if (this.usePreview) { + this.previewElem.item = this.item; + await this.previewElem.render(); + } + + this._asyncRendering = false; + + this._lastPreviewRenderId = `${Date.now()}-${Math.random()}`; + } + + discard() { + if (!this._preview) return; + let lastPreviewRenderId = this._lastPreviewRenderId; + setTimeout(() => { + if (!this._asyncRendering && this._lastPreviewRenderId === lastPreviewRenderId) { + this._preview?.discard(); + this._previewDiscarded = true; + } + }, this._discardPreviewTimeout); + } + + onViewClick(event) { + ZoteroPane_Local.viewAttachment(this.item.id, event, !this.editable); + } + + onShowClick(event) { + ZoteroPane_Local.showAttachmentInFilesystem(this.item.id, event.originalTarget, !this.editable); + } + + async renderAttachmentInfo() { // Cancel editing filename when refreshing this._isEditingFilename = false; @@ -469,34 +502,6 @@ else { selectButton.hidden = true; } - - if (this.usePreview) { - this.previewElem.item = this.item; - await this.previewElem.render(); - } - - this._asyncRendering = false; - - this._lastPreviewRenderTime = `${Date.now()}-${Math.random()}`; - } - - discard() { - if (!this._preview) return; - let lastRenderTime = this._lastPreviewRenderId; - setTimeout(() => { - if (!this._asyncRendering && this._lastPreviewRenderId === lastRenderTime) { - this._preview?.discard(); - this._previewDiscarded = true; - } - }, this._discardPreviewTimeout); - } - - onViewClick(event) { - ZoteroPane_Local.viewAttachment(this.item.id, event, !this.editable); - } - - onShowClick(event) { - ZoteroPane_Local.showAttachmentInFilesystem(this.item.id, event.originalTarget, !this.editable); } updateItemIndexedState() { diff --git a/chrome/content/zotero/elements/attachmentsBox.js b/chrome/content/zotero/elements/attachmentsBox.js index dad27cb107..4e39e26ef4 100644 --- a/chrome/content/zotero/elements/attachmentsBox.js +++ b/chrome/content/zotero/elements/attachmentsBox.js @@ -48,7 +48,7 @@ _preview = null; - _lastPreviewRenderTime = ""; + _lastPreviewRenderId = ""; _discardPreviewTimeout = 60000; @@ -189,7 +189,7 @@ this._previewDiscarded = false; this.previewElem.render(); } - this._lastPreviewRenderTime = `${Date.now()}-${Math.random()}`; + this._lastPreviewRenderId = `${Date.now()}-${Math.random()}`; return; } this._renderStage = "final"; @@ -209,9 +209,9 @@ discard() { if (!this._preview) return; - let lastRenderTime = this._lastPreviewRenderTime; + let lastPreviewRenderId = this._lastPreviewRenderId; setTimeout(() => { - if (!this._asyncRendering && this._lastPreviewRenderTime === lastRenderTime) { + if (!this._asyncRendering && this._lastPreviewRenderId === lastPreviewRenderId) { this._preview?.discard(); this._previewDiscarded = true; } @@ -246,7 +246,7 @@ } this.previewElem.item = attachment; await this.previewElem.render(); - this._lastPreviewRenderTime = `${Date.now()}-${Math.random()}`; + this._lastPreviewRenderId = `${Date.now()}-${Math.random()}`; } async _getPreviewAttachment() {