diff --git a/ts/jobs/AttachmentDownloadManager.preload.ts b/ts/jobs/AttachmentDownloadManager.preload.ts index 5749409899..c66e55d028 100644 --- a/ts/jobs/AttachmentDownloadManager.preload.ts +++ b/ts/jobs/AttachmentDownloadManager.preload.ts @@ -1059,7 +1059,13 @@ function _markAttachmentAsTransientlyErrored( type AttachmentDataToBeReused = WithRequiredProperties< Pick< AttachmentType, - 'path' | 'localKey' | 'version' | 'thumbnail' | 'screenshot' + | 'path' + | 'localKey' + | 'version' + | 'thumbnail' + | 'screenshot' + | 'width' + | 'height' >, 'path' | 'localKey' | 'version' >; @@ -1107,6 +1113,8 @@ async function getExistingAttachmentDataForReuse({ path: existingAttachmentData.path, localKey: existingAttachmentData.localKey, version: existingAttachmentData.version, + width: existingAttachmentData.width ?? undefined, + height: existingAttachmentData.height ?? undefined, }; const { thumbnailPath, thumbnailSize, thumbnailContentType } = existingAttachmentData; diff --git a/ts/sql/Interface.std.ts b/ts/sql/Interface.std.ts index 760ecb9f18..4ae8037430 100644 --- a/ts/sql/Interface.std.ts +++ b/ts/sql/Interface.std.ts @@ -809,6 +809,8 @@ export type ExistingAttachmentData = Pick< | 'version' | 'path' | 'localKey' + | 'width' + | 'height' | 'thumbnailPath' | 'thumbnailLocalKey' | 'thumbnailVersion' diff --git a/ts/sql/Server.node.ts b/ts/sql/Server.node.ts index 673c56cde3..7296e14879 100644 --- a/ts/sql/Server.node.ts +++ b/ts/sql/Server.node.ts @@ -2951,6 +2951,8 @@ function getAndProtectExistingAttachmentPath( path, version, localKey, + width, + height, thumbnailPath, thumbnailLocalKey, thumbnailVersion, diff --git a/ts/test-electron/services/AttachmentDownloadManager_test.preload.ts b/ts/test-electron/services/AttachmentDownloadManager_test.preload.ts index 1cb969665c..5c5fca2313 100644 --- a/ts/test-electron/services/AttachmentDownloadManager_test.preload.ts +++ b/ts/test-electron/services/AttachmentDownloadManager_test.preload.ts @@ -1228,6 +1228,8 @@ describe('AttachmentDownloadManager.runDownloadAttachmentJobInner', () => { size: 128, contentType: MIME.VIDEO_MP4, version: 2, + width: 1123, + height: 5811, plaintextHash: testPlaintextHash(), path: 'existingPath', localKey: testAttachmentLocalKey(), @@ -1353,6 +1355,8 @@ describe('AttachmentDownloadManager.runDownloadAttachmentJobInner', () => { 'path', 'localKey', 'version', + 'width', + 'height', 'thumbnail.path', 'thumbnail.localKey', 'thumbnail.size', @@ -1366,6 +1370,7 @@ describe('AttachmentDownloadManager.runDownloadAttachmentJobInner', () => { ]; assert.strictEqual(attachment?.path, existingAttachment.path); + assert.strictEqual(attachment?.width, existingAttachment.width); assert.deepStrictEqual( pick(attachment, propsThatShouldBeTransferred), pick(existingAttachment, propsThatShouldBeTransferred) diff --git a/ts/util/captureDimensionsAndScreenshot.dom.ts b/ts/util/captureDimensionsAndScreenshot.dom.ts index 61a32baba8..9ed61a53f3 100644 --- a/ts/util/captureDimensionsAndScreenshot.dom.ts +++ b/ts/util/captureDimensionsAndScreenshot.dom.ts @@ -81,8 +81,7 @@ export async function captureDimensionsAndScreenshot( const localUrl = getLocalAttachmentUrl(attachment); if (isImageTypeSupported(contentType)) { - if (attachment.thumbnail?.path) { - // Already generated thumbnail / width / height + if (attachment.height && attachment.width && attachment.thumbnail?.path) { return attachment; } @@ -133,8 +132,7 @@ export async function captureDimensionsAndScreenshot( strictAssert(isVideoTypeSupported(contentType), 'enforced by early return'); - if (attachment.screenshot?.path) { - // Already generated screenshot / width / height + if (attachment.height && attachment.width && attachment.screenshot?.path) { return attachment; }