From 0af38cf50c216a90c4b90bb6d190b3b9aed75ddd Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 16 Jun 2026 23:41:02 -0400 Subject: [PATCH] fix: composition send responses and notifications Signed-off-by: Sebastian --- lib/CompositionManager.php | 31 +++- src/components/MessageReader.vue | 6 +- src/components/common/RecipientDetails.vue | 4 +- src/pages/MailPage.vue | 8 +- src/stores/mailCompositionStore.ts | 13 +- src/stores/mailStore.ts | 106 +----------- src/stores/mailUiStore.ts | 181 +++++++++++++++++++-- src/types/composition.ts | 12 +- 8 files changed, 225 insertions(+), 136 deletions(-) diff --git a/lib/CompositionManager.php b/lib/CompositionManager.php index f10c105..0f225ff 100644 --- a/lib/CompositionManager.php +++ b/lib/CompositionManager.php @@ -10,6 +10,7 @@ use KTXF\Mail\Object\AddressInterface; use KTXF\Mail\Object\MessagePart; use KTXF\Mail\Object\MessagePropertiesMutableInterface; use KTXF\Mail\Service\ServiceEntitySubmitInterface; +use KTXF\Mail\Submission\EntitySubmitResult; use KTXF\Resource\Identifier\EntityIdentifierInterface; use KTXF\Resource\Identifier\ResourceIdentifier; use KTXF\Utile\UUID; @@ -158,7 +159,7 @@ class CompositionManager { if ($sender['address'] === '' || !filter_var($sender['address'], FILTER_VALIDATE_EMAIL)) { $result['disposition'] = 'error'; $result['error'] = [ - 'type' => 'invalid_sender', + 'type' => 'composition_invalid_sender', 'message' => 'Invalid sender address', ]; return $result; @@ -171,15 +172,19 @@ class CompositionManager { if ($service === null || $service->getEnabled() === false) { return [ 'disposition' => 'error', - 'errorCode' => 'service_not_found', - 'errorMessage' => "Service not found for sender '$senderAddress' or service is disabled", + 'error' => [ + 'type' => 'service_not_found', + 'message' => "Service not found for sender '$senderAddress' or service is disabled", + ], ]; } if ($service instanceof ServiceEntitySubmitInterface === false) { return [ 'disposition' => 'error', - 'errorCode' => 'service_not_supported', - 'errorMessage' => "Service '{$service->identifier()}' does not support entity submission", + 'error' => [ + 'type' => 'service_not_supported', + 'message' => "Service '{$service->identifier()}' does not support entity submission", + ], ]; } @@ -197,7 +202,21 @@ class CompositionManager { $sendResult = $service->entitySubmit($senderObject, $source, $properties); - return $sendResult->jsonSerialize(); + if ($sendResult->disposition === EntitySubmitResult::DISPOSITION_ERROR) { + return [ + 'identifier' => $identifier, + 'disposition' => 'error', + 'error' => [ + 'type' => 'service_submission_error', + 'message' => $sendResult->errorMessage ?? 'An unknown error occurred during submission', + ], + ]; + } + + return [ + 'identifier' => $identifier, + 'disposition' => 'sent' + ]; } private function buildMessageProperties( diff --git a/src/components/MessageReader.vue b/src/components/MessageReader.vue index 56f782e..3a11cb8 100644 --- a/src/components/MessageReader.vue +++ b/src/components/MessageReader.vue @@ -3,7 +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 { useMailUiStore } from '@/stores/mailUiStore' import ReaderEmpty from './reader/ReaderEmpty.vue' import ReaderToolbar from './reader/ReaderToolbar.vue' import ReaderHeader from './reader/ReaderHeader.vue' @@ -26,7 +26,7 @@ const emit = defineEmits<{ // User settings const { getSetting } = useUser() -const mailStore = useMailStore() +const mailUiStore = useMailUiStore() // Per-message overrides const allowImages = ref(false) @@ -101,7 +101,7 @@ const handleDownload = async (partIndex?: number) => { return } - await mailStore.downloadMessage(props.entity, partIndex) + await mailUiStore.downloadMessage(props.entity, partIndex) } const handleFlag = () => { diff --git a/src/components/common/RecipientDetails.vue b/src/components/common/RecipientDetails.vue index 54282e9..ad82376 100644 --- a/src/components/common/RecipientDetails.vue +++ b/src/components/common/RecipientDetails.vue @@ -1,6 +1,5 @@