From 74d3654515ff662096148416b03acd110004ee53 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 29 Aug 2026 16:21:18 -0400 Subject: [PATCH] feat: implement attachment preview Signed-off-by: Sebastian --- src/components/reader/ReaderHeader.vue | 2 +- src/stores/mailOperationsStore.ts | 15 +++++++++++++++ src/stores/mailUiStore.ts | 7 ++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/components/reader/ReaderHeader.vue b/src/components/reader/ReaderHeader.vue index 0c7a826..95ba05b 100644 --- a/src/components/reader/ReaderHeader.vue +++ b/src/components/reader/ReaderHeader.vue @@ -61,7 +61,7 @@ const handleAttachmentClick = (attachment: MessagePartInterface, index: number): const handleViewerRetrieve = (item: AttachmentItem): Promise => { if (!props.entity) return Promise.reject(new Error('No message selected')) - return mailUiStore.attachmentBlob(props.entity, item.meta.attachment) + return mailUiStore.attachmentPreviewBlob(props.entity, item.meta.attachment) } // Format date for display diff --git a/src/stores/mailOperationsStore.ts b/src/stores/mailOperationsStore.ts index 64da36b..0c33d0c 100644 --- a/src/stores/mailOperationsStore.ts +++ b/src/stores/mailOperationsStore.ts @@ -640,6 +640,20 @@ export const useMailOperationsStore = defineStore('mailOperationsStore', () => { return blob } + async function attachmentPreviewBlob(entity: EntityObject, part: MessagePartInterface): Promise { + return entitiesStore.preview({ + target: entity.identifier, + part: { + blobId: part.blobId ?? undefined, + partId: part.partId ?? undefined, + cid: part.cid ?? undefined, + type: part.type || 'application/octet-stream', + size: part.size ?? null, + }, + variant: 'popover', + }) + } + // ── Exports ─────────────────────────────────────────────────────────────── return { @@ -681,6 +695,7 @@ export const useMailOperationsStore = defineStore('mailOperationsStore', () => { moveMessages, downloadMessage, attachmentBlob, + attachmentPreviewBlob, moveFolder, renameFolder, isServiceFolderLoading, diff --git a/src/stores/mailUiStore.ts b/src/stores/mailUiStore.ts index f0be7bc..c8b178b 100644 --- a/src/stores/mailUiStore.ts +++ b/src/stores/mailUiStore.ts @@ -714,6 +714,10 @@ export const useMailUiStore = defineStore('mailUiStore', () => { return mailOperationsStore.attachmentBlob(entity, part) } + function attachmentPreviewBlob(entity: EntityObject, part: Parameters[1]) { + return mailOperationsStore.attachmentPreviewBlob(entity, part) + } + return { sidebarVisible, settingsDialogVisible, @@ -763,6 +767,7 @@ export const useMailUiStore = defineStore('mailUiStore', () => { moveMessages, downloadMessage, attachmentBlob, + attachmentPreviewBlob, messageSelectionModeActivate, messageSelectionModeDeactivate, messageSelectionToggleOne, @@ -788,4 +793,4 @@ export const useMailUiStore = defineStore('mailUiStore', () => { confirmDeleteFolder, flagSelectedMessages, } -}) \ No newline at end of file +})