diff --git a/src/components/MessageReader.vue b/src/components/MessageReader.vue index fbfff3c..56f782e 100644 --- a/src/components/MessageReader.vue +++ b/src/components/MessageReader.vue @@ -3,6 +3,7 @@ import { computed, ref, watch } from 'vue' import { useUser } from '@KTXC' import type { EntityObject, MessageObject } from '@MailManager/models' import { SecurityLevel } from '@/utile/emailSanitizer' +import { useMailStore } from '@/stores/mailStore' import ReaderEmpty from './reader/ReaderEmpty.vue' import ReaderToolbar from './reader/ReaderToolbar.vue' import ReaderHeader from './reader/ReaderHeader.vue' @@ -25,6 +26,7 @@ const emit = defineEmits<{ // User settings const { getSetting } = useUser() +const mailStore = useMailStore() // Per-message overrides const allowImages = ref(false) @@ -94,6 +96,14 @@ const handleMove = () => { } } +const handleDownload = async (partIndex?: number) => { + if (!props.entity) { + return + } + + await mailStore.downloadMessage(props.entity, partIndex) +} + const handleFlag = () => { if (props.entity) { emit('flag', props.entity) @@ -125,13 +135,17 @@ const handleCompose = () => { @move="handleMove" @delete="handleDelete" @flag="handleFlag" + @download="handleDownload()" @toggle-images="toggleImages" @set-security-level="setSecurityLevel" />
@@ -121,8 +139,15 @@ const formatFileSize = (bytes: number | undefined): string => { gap: 0.5rem; } +.attachment-item { + display: flex; + flex-direction: column; + align-items: flex-start; +} + .attachment-chip { max-width: 300px; + cursor: pointer; .attachment-name { overflow: hidden; @@ -131,6 +156,11 @@ const formatFileSize = (bytes: number | undefined): string => { } } +.attachment-error { + color: rgb(var(--v-theme-error)); + margin-top: 0.25rem; +} + .contact-link { display: inline-block; border-radius: 4px; diff --git a/src/components/reader/ReaderToolbar.vue b/src/components/reader/ReaderToolbar.vue index 77d86c5..73ad720 100644 --- a/src/components/reader/ReaderToolbar.vue +++ b/src/components/reader/ReaderToolbar.vue @@ -17,6 +17,7 @@ const emit = defineEmits<{ move: [] delete: [] flag: [] + download: [] toggleImages: [] setSecurityLevel: [level: SecurityLevel] }>() @@ -161,6 +162,28 @@ const currentSecurityLevel = computed(() => {