From 4ae1089915239f76b53989e4650608b2ba3a25bf Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 19 Jun 2025 16:13:52 +0700 Subject: [PATCH] TF-3792 Fix cannot reply to email on Stalwart server Signed-off-by: dab246 --- .../data/repository/composer_repository_impl.dart | 5 +++++ .../lib/extensions/email_body_part_extension.dart | 15 +++++++++++++++ .../extensions/set_email_body_part_extension.dart | 7 +++++++ model/lib/model.dart | 1 + 4 files changed, 28 insertions(+) create mode 100644 model/lib/extensions/set_email_body_part_extension.dart diff --git a/lib/features/composer/data/repository/composer_repository_impl.dart b/lib/features/composer/data/repository/composer_repository_impl.dart index 027aa7798..fc69d720e 100644 --- a/lib/features/composer/data/repository/composer_repository_impl.dart +++ b/lib/features/composer/data/repository/composer_repository_impl.dart @@ -6,6 +6,7 @@ import 'package:dio/dio.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart'; import 'package:model/email/attachment.dart'; +import 'package:model/extensions/set_email_body_part_extension.dart'; import 'package:model/upload/file_info.dart'; import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; @@ -64,6 +65,10 @@ class ComposerRepositoryImpl extends ComposerRepository { emailContent = tupleContentInlineAttachments.value1; emailAttachments.addAll(tupleContentInlineAttachments.value2); + if (emailAttachments.isNotEmpty) { + emailAttachments = emailAttachments.onlyUseBlobIdOrPartId(); + } + emailContent = await removeCollapsedExpandedSignatureEffect(emailContent: emailContent); final userAgent = await _applicationManager.generateApplicationUserAgent(); diff --git a/model/lib/extensions/email_body_part_extension.dart b/model/lib/extensions/email_body_part_extension.dart index 8db9e468c..44bcfce17 100644 --- a/model/lib/extensions/email_body_part_extension.dart +++ b/model/lib/extensions/email_body_part_extension.dart @@ -11,4 +11,19 @@ extension EmailBodyPartExtension on EmailBodyPart { cid: cid, charset: charset, disposition: disposition.toContentDisposition()); + + EmailBodyPart onlyUseBlobIdOrPartId() => EmailBodyPart( + partId: blobId == null ? partId : null, + blobId: blobId, + size: size, + name: name, + type: type, + cid: cid, + charset: charset, + disposition: disposition, + headers: headers, + language: language, + location: location, + subParts: subParts, + ); } diff --git a/model/lib/extensions/set_email_body_part_extension.dart b/model/lib/extensions/set_email_body_part_extension.dart new file mode 100644 index 000000000..3a910a57f --- /dev/null +++ b/model/lib/extensions/set_email_body_part_extension.dart @@ -0,0 +1,7 @@ +import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart'; +import 'package:model/extensions/email_body_part_extension.dart'; + +extension SetEmailBodyPartExtension on Set { + Set onlyUseBlobIdOrPartId() => + map((emailBodyPart) => emailBodyPart.onlyUseBlobIdOrPartId()).toSet(); +} diff --git a/model/lib/model.dart b/model/lib/model.dart index f3102edd9..e8ec8e360 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -61,6 +61,7 @@ export 'extensions/session_extension.dart'; export 'extensions/utc_date_extension.dart'; export 'extensions/contact_support_capability_extension.dart'; export 'extensions/list_id_extension.dart'; +export 'extensions/set_email_body_part_extension.dart'; // Identity export 'identity/identity_request_dto.dart'; export 'mailbox/expand_mode.dart';