diff --git a/contact/pubspec.lock b/contact/pubspec.lock index c244be5d0..9b432ea96 100644 --- a/contact/pubspec.lock +++ b/contact/pubspec.lock @@ -612,10 +612,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/contact/pubspec.yaml b/contact/pubspec.yaml index 8e3f4c7fe..50e92b92e 100644 --- a/contact/pubspec.yaml +++ b/contact/pubspec.yaml @@ -15,8 +15,6 @@ dependencies: path: ../model ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/email_recovery/pubspec.lock b/email_recovery/pubspec.lock index c25874985..d4c7eebf5 100644 --- a/email_recovery/pubspec.lock +++ b/email_recovery/pubspec.lock @@ -296,10 +296,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/email_recovery/pubspec.yaml b/email_recovery/pubspec.yaml index 15b800ecf..d4e554417 100644 --- a/email_recovery/pubspec.yaml +++ b/email_recovery/pubspec.yaml @@ -12,8 +12,6 @@ dependencies: sdk: flutter ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/fcm/pubspec.lock b/fcm/pubspec.lock index 67acda74a..7d48c2260 100644 --- a/fcm/pubspec.lock +++ b/fcm/pubspec.lock @@ -296,10 +296,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/fcm/pubspec.yaml b/fcm/pubspec.yaml index c4193e380..2207781b1 100644 --- a/fcm/pubspec.yaml +++ b/fcm/pubspec.yaml @@ -12,8 +12,6 @@ dependencies: sdk: flutter ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/forward/pubspec.lock b/forward/pubspec.lock index 67acda74a..7d48c2260 100644 --- a/forward/pubspec.lock +++ b/forward/pubspec.lock @@ -296,10 +296,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/forward/pubspec.yaml b/forward/pubspec.yaml index 4e33bec0a..ff6c27715 100644 --- a/forward/pubspec.yaml +++ b/forward/pubspec.yaml @@ -12,8 +12,6 @@ dependencies: sdk: flutter ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/lib/features/email/domain/extensions/detailed_email_extension.dart b/lib/features/email/domain/extensions/detailed_email_extension.dart index 80180121b..7d68b797e 100644 --- a/lib/features/email/domain/extensions/detailed_email_extension.dart +++ b/lib/features/email/domain/extensions/detailed_email_extension.dart @@ -5,6 +5,7 @@ import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_ import 'package:tmail_ui_user/features/email/domain/extensions/list_email_header_extension.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart'; +import 'package:tmail_ui_user/features/thread/data/extensions/map_header_identifier_id_extension.dart'; import 'package:tmail_ui_user/features/thread/data/extensions/map_keywords_extension.dart'; extension DetailedEmailExtension on DetailedEmail { @@ -19,6 +20,7 @@ extension DetailedEmailExtension on DetailedEmail { messageId: messageId?.ids.toList(), references: references?.ids.toList(), inlineImages: inlineImages?.toHiveCache(), + sMimeStatusHeader: sMimeStatusHeader?.toMapString(), ); } @@ -38,6 +40,7 @@ extension DetailedEmailExtension on DetailedEmail { messageId: messageId, references: references, inlineImages: inlineImages, + sMimeStatusHeader: sMimeStatusHeader ); } } \ No newline at end of file diff --git a/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart b/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart index 78b1c7dae..564648a13 100644 --- a/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart +++ b/lib/features/email/domain/extensions/detailed_email_hive_cache_extension.dart @@ -1,5 +1,6 @@ import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:tmail_ui_user/features/email/domain/extensions/list_acttachments_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/email/domain/extensions/list_email_header_hive_cache_extension.dart'; @@ -24,6 +25,9 @@ extension DetailedEmailHiveCacheExtension on DetailedEmailHiveCache { ? MessageIdsHeaderValue(references!.toSet()) : null, inlineImages: inlineImages?.toAttachment(), + sMimeStatusHeader: sMimeStatusHeader != null + ? Map.fromIterables(sMimeStatusHeader!.keys.map((value) => IndividualHeaderIdentifier(value)), sMimeStatusHeader!.values) + : null, ); } } \ No newline at end of file diff --git a/lib/features/email/domain/extensions/email_extension.dart b/lib/features/email/domain/extensions/email_extension.dart index 957f3736e..b043363ab 100644 --- a/lib/features/email/domain/extensions/email_extension.dart +++ b/lib/features/email/domain/extensions/email_extension.dart @@ -16,6 +16,7 @@ extension EmailExtension on Email { messageId: messageId, references: references, inlineImages: allAttachments.listAttachmentsDisplayedInContent, + sMimeStatusHeader: sMimeStatusHeader, ); } } \ No newline at end of file diff --git a/lib/features/email/domain/model/detailed_email.dart b/lib/features/email/domain/model/detailed_email.dart index cbfa6f26c..ab3fe6331 100644 --- a/lib/features/email/domain/model/detailed_email.dart +++ b/lib/features/email/domain/model/detailed_email.dart @@ -1,6 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_header.dart'; +import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:model/email/attachment.dart'; @@ -15,6 +16,7 @@ class DetailedEmail with EquatableMixin { final MessageIdsHeaderValue? messageId; final MessageIdsHeaderValue? references; final List? inlineImages; + final Map? sMimeStatusHeader; DetailedEmail({ required this.emailId, @@ -27,6 +29,7 @@ class DetailedEmail with EquatableMixin { this.messageId, this.references, this.inlineImages, + this.sMimeStatusHeader, }); @override @@ -41,5 +44,6 @@ class DetailedEmail with EquatableMixin { messageId, references, inlineImages, + sMimeStatusHeader, ]; } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/get_email_content_interactor.dart b/lib/features/email/domain/usecases/get_email_content_interactor.dart index ce49e5149..7480304b6 100644 --- a/lib/features/email/domain/usecases/get_email_content_interactor.dart +++ b/lib/features/email/domain/usecases/get_email_content_interactor.dart @@ -98,7 +98,8 @@ class GetEmailContentInteractor { emailCurrent: Email( id: emailId, headers: detailedEmail.headers, - keywords: detailedEmail.keywords + keywords: detailedEmail.keywords, + sMimeStatusHeader: detailedEmail.sMimeStatusHeader, ) )); } catch (e) { @@ -130,7 +131,8 @@ class GetEmailContentInteractor { emailCurrent: Email( id: emailId, headers: detailedEmail.headers, - keywords: detailedEmail.keywords + keywords: detailedEmail.keywords, + sMimeStatusHeader: detailedEmail.sMimeStatusHeader, ) )); } catch (e) { diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index af4705526..2b9e09d76 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -580,6 +580,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { htmlEmailContent: success.htmlEmailContent, messageId: success.emailCurrent?.messageId, references: success.emailCurrent?.references, + sMimeStatusHeader: success.emailCurrent?.sMimeStatusHeader, ); _storeOpenedEmailAction( diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index 888f309ab..cfc862c73 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -317,6 +317,7 @@ class EmailView extends GetWidget { emailSelected: presentationEmail, imagePaths: controller.imagePaths, responsiveUtils: controller.responsiveUtils, + sMimeStatus: controller.currentEmailLoaded.value?.sMimeStatus, emailUnsubscribe: controller.emailUnsubscribe.value, maxBodyHeight: maxBodyHeight, openEmailAddressDetailAction: controller.openEmailAddressDialog, diff --git a/lib/features/email/presentation/extensions/presentation_email_extension.dart b/lib/features/email/presentation/extensions/email_extension.dart similarity index 61% rename from lib/features/email/presentation/extensions/presentation_email_extension.dart rename to lib/features/email/presentation/extensions/email_extension.dart index d1385cd9b..219dad94a 100644 --- a/lib/features/email/presentation/extensions/presentation_email_extension.dart +++ b/lib/features/email/presentation/extensions/email_extension.dart @@ -1,13 +1,18 @@ -import 'package:model/email/presentation_email.dart'; +import 'package:core/utils/app_logger.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:model/extensions/email_extension.dart'; import 'package:model/extensions/list_email_header_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/model/smime_signature_status.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/smime_signature_constant.dart'; -extension PresentationEmailExtension on PresentationEmail { +extension EmailExtension on Email { SMimeSignatureStatus get sMimeStatus { - final status = emailHeader?.toSet().sMimeStatus; + final status = sMimeStatusHeaderParsed.isNotEmpty + ? sMimeStatusHeaderParsed + : headers?.toSet().sMimeStatus; + log('EmailExtension::sMimeStatus: $status'); if (status == SMimeSignatureConstant.GOOD_SIGNATURE) { return SMimeSignatureStatus.goodSignature; } else if (status == SMimeSignatureConstant.BAD_SIGNATURE) { diff --git a/lib/features/email/presentation/model/email_loaded.dart b/lib/features/email/presentation/model/email_loaded.dart index 99886aef7..15d942d79 100644 --- a/lib/features/email/presentation/model/email_loaded.dart +++ b/lib/features/email/presentation/model/email_loaded.dart @@ -1,6 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:model/email/attachment.dart'; +import 'package:tmail_ui_user/features/email/presentation/extensions/email_extension.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/smime_signature_status.dart'; class EmailLoaded with EquatableMixin { final String htmlContent; @@ -15,6 +17,8 @@ class EmailLoaded with EquatableMixin { this.emailCurrent, }); + SMimeSignatureStatus? get sMimeStatus => emailCurrent?.sMimeStatus; + @override List get props => [ htmlContent, diff --git a/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart b/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart index 592cd1bce..bbff520ab 100644 --- a/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart +++ b/lib/features/email/presentation/widgets/information_sender_and_receiver_builder.dart @@ -8,7 +8,6 @@ import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_email_extension.dart'; import 'package:tmail_ui_user/features/base/widget/email_avatar_builder.dart'; -import 'package:tmail_ui_user/features/email/presentation/extensions/presentation_email_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart'; import 'package:tmail_ui_user/features/email/presentation/model/smime_signature_status.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_receiver_widget.dart'; @@ -26,12 +25,14 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget { final OnOpenEmailAddressDetailAction? openEmailAddressDetailAction; final OnEmailActionClick? onEmailActionClick; final double? maxBodyHeight; + final SMimeSignatureStatus? sMimeStatus; const InformationSenderAndReceiverBuilder({ Key? key, required this.emailSelected, required this.responsiveUtils, required this.imagePaths, + this.sMimeStatus, this.emailUnsubscribe, this.maxBodyHeight, this.openEmailAddressDetailAction, @@ -64,14 +65,14 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget { openEmailAddressDetailAction: openEmailAddressDetailAction, ) )), - if (emailSelected.sMimeStatus != SMimeSignatureStatus.notSigned) + if (sMimeStatus != null && sMimeStatus != SMimeSignatureStatus.notSigned) Tooltip( key: const Key('smime_signature_status_icon'), - message: emailSelected.sMimeStatus.getTooltipMessage(context), + message: sMimeStatus!.getTooltipMessage(context), child: MouseRegion( cursor: SystemMouseCursors.click, child: SvgPicture.asset( - emailSelected.sMimeStatus.getIcon(imagePaths), + sMimeStatus!.getIcon(imagePaths), fit: BoxFit.fill, ), ), diff --git a/lib/features/offline_mode/model/detailed_email_hive_cache.dart b/lib/features/offline_mode/model/detailed_email_hive_cache.dart index 0eefebec6..fb44c7f25 100644 --- a/lib/features/offline_mode/model/detailed_email_hive_cache.dart +++ b/lib/features/offline_mode/model/detailed_email_hive_cache.dart @@ -38,6 +38,9 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin { @HiveField(8) final List? inlineImages; + @HiveField(9) + Map? sMimeStatusHeader; + DetailedEmailHiveCache({ required this.emailId, required this.timeSaved, @@ -48,6 +51,7 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin { this.messageId, this.references, this.inlineImages, + this.sMimeStatusHeader, }); @override @@ -61,5 +65,6 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin { messageId, references, inlineImages, + sMimeStatusHeader, ]; } \ No newline at end of file diff --git a/lib/features/thread/domain/constants/thread_constants.dart b/lib/features/thread/domain/constants/thread_constants.dart index a5da5b402..f64e22e39 100644 --- a/lib/features/thread/domain/constants/thread_constants.dart +++ b/lib/features/thread/domain/constants/thread_constants.dart @@ -51,6 +51,7 @@ class ThreadConstants { EmailProperty.mailboxIds, EmailProperty.messageId, EmailProperty.references, + IndividualHeaderIdentifier.sMimeStatusHeader.value, }); static final propertiesGetDetailedEmail = Properties({ @@ -72,7 +73,8 @@ class ThreadConstants { EmailProperty.bodyValues, EmailProperty.htmlBody, EmailProperty.attachments, - EmailProperty.headers + EmailProperty.headers, + IndividualHeaderIdentifier.sMimeStatusHeader.value, }); static final propertiesCalendarEvent = Properties({ diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index 45910b46c..92440dde0 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -32,6 +32,8 @@ extension EmailExtension on Email { bool get hasListUnsubscribe => listUnsubscribe.isNotEmpty; + String get sMimeStatusHeaderParsed => sMimeStatusHeader?[IndividualHeaderIdentifier.sMimeStatusHeader]?.trim() ?? ''; + bool hasReadReceipt(Map mapMailbox) { final mailboxCurrent = findMailboxContain(mapMailbox); return !hasMdnSent && diff --git a/model/lib/extensions/list_email_header_extension.dart b/model/lib/extensions/list_email_header_extension.dart index ff08c9102..8121e9b52 100644 --- a/model/lib/extensions/list_email_header_extension.dart +++ b/model/lib/extensions/list_email_header_extension.dart @@ -2,6 +2,7 @@ import 'package:collection/collection.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_header.dart'; import 'package:model/email/email_property.dart'; +import 'package:core/utils/app_logger.dart' as logger; extension ListEmailHeaderExtension on Set? { bool get readReceiptHasBeenRequested { @@ -20,6 +21,7 @@ extension ListEmailHeaderExtension on Set? { String get sMimeStatus { final sMimeStatus = this?.firstWhereOrNull((header) => header.name == EmailProperty.headerSMimeStatusKey); - return sMimeStatus?.value ?? ''; + logger.log('ListEmailHeaderExtension::sMimeStatus: $sMimeStatus'); + return sMimeStatus?.value.trim() ?? ''; } } \ No newline at end of file diff --git a/model/pubspec.lock b/model/pubspec.lock index bcceb8c99..a5a2972d4 100644 --- a/model/pubspec.lock +++ b/model/pubspec.lock @@ -604,10 +604,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/model/pubspec.yaml b/model/pubspec.yaml index e6fbce62b..c65d34896 100644 --- a/model/pubspec.yaml +++ b/model/pubspec.yaml @@ -30,8 +30,6 @@ dependencies: path: ../core ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/pubspec.lock b/pubspec.lock index 51e63c497..79ab903cd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1196,10 +1196,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b0b4e9fab..ef66fdacf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,8 +62,6 @@ dependencies: url: https://github.com/linagora/html-editor-enhanced.git ref: main - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/rule_filter/pubspec.lock b/rule_filter/pubspec.lock index 67acda74a..7d48c2260 100644 --- a/rule_filter/pubspec.lock +++ b/rule_filter/pubspec.lock @@ -296,10 +296,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/rule_filter/pubspec.yaml b/rule_filter/pubspec.yaml index 5cf079523..3cd164e7c 100644 --- a/rule_filter/pubspec.yaml +++ b/rule_filter/pubspec.yaml @@ -12,8 +12,6 @@ dependencies: sdk: flutter ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git diff --git a/server_settings/pubspec.lock b/server_settings/pubspec.lock index 3031277be..bc5b8503d 100644 --- a/server_settings/pubspec.lock +++ b/server_settings/pubspec.lock @@ -288,10 +288,10 @@ packages: description: path: "." ref: main - resolved-ref: b1b0d407e5082f9d7afc88ccec8d05bf39ec992f + resolved-ref: "80bd3a9d6bea2cca9cf905edfdea8b8d5e8c5a8e" url: "https://github.com/linagora/jmap-dart-client.git" source: git - version: "0.2.0" + version: "0.2.1" js: dependency: transitive description: diff --git a/server_settings/pubspec.yaml b/server_settings/pubspec.yaml index 6a0e03fc0..4e70d5572 100644 --- a/server_settings/pubspec.yaml +++ b/server_settings/pubspec.yaml @@ -11,8 +11,6 @@ dependencies: sdk: flutter ### Dependencies from git ### - # TODO: We will change it when the PR in upstream repository will be merged - # https://github.com/linagora/jmap-dart-client/pull/87 jmap_dart_client: git: url: https://github.com/linagora/jmap-dart-client.git