TF-657 Add headers and keywords property when get email content
This commit is contained in:
@@ -27,17 +27,7 @@ import 'package:jmap_dart_client/jmap/mail/email/submission/envelope.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submission_method.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submission_method.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/set/set_mailbox_method.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/set/set_mailbox_method.dart';
|
||||||
import 'package:model/account/account_request.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:model/account/authentication_type.dart';
|
|
||||||
import 'package:model/download/download_task_id.dart';
|
|
||||||
import 'package:model/email/attachment.dart';
|
|
||||||
import 'package:model/email/mark_star_action.dart';
|
|
||||||
import 'package:model/email/read_actions.dart';
|
|
||||||
import 'package:model/extensions/email_extension.dart';
|
|
||||||
import 'package:model/extensions/keyword_identifier_extension.dart';
|
|
||||||
import 'package:model/extensions/list_email_id_extension.dart';
|
|
||||||
import 'package:model/extensions/mailbox_id_extension.dart';
|
|
||||||
import 'package:model/oidc/token.dart';
|
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
@@ -60,7 +50,13 @@ class EmailAPI {
|
|||||||
|
|
||||||
final getEmailMethod = GetEmailMethod(accountId)
|
final getEmailMethod = GetEmailMethod(accountId)
|
||||||
..addIds({emailId.id})
|
..addIds({emailId.id})
|
||||||
..addProperties(Properties({'bodyValues', 'htmlBody', 'attachments'}))
|
..addProperties(Properties({
|
||||||
|
EmailProperty.bodyValues,
|
||||||
|
EmailProperty.htmlBody,
|
||||||
|
EmailProperty.attachments,
|
||||||
|
EmailProperty.headers,
|
||||||
|
EmailProperty.keywords
|
||||||
|
}))
|
||||||
..addFetchHTMLBodyValues(true);
|
..addFetchHTMLBodyValues(true);
|
||||||
|
|
||||||
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
final getEmailInvocation = jmapRequestBuilder.invocation(getEmailMethod);
|
||||||
|
|||||||
@@ -13,11 +13,22 @@ class GetEmailContentSuccess extends UIState {
|
|||||||
final List<EmailContent> emailContents;
|
final List<EmailContent> emailContents;
|
||||||
final List<EmailContent> emailContentsDisplayed;
|
final List<EmailContent> emailContentsDisplayed;
|
||||||
final List<Attachment> attachments;
|
final List<Attachment> attachments;
|
||||||
|
final bool readReceiptRequested;
|
||||||
|
|
||||||
GetEmailContentSuccess(this.emailContents, this.emailContentsDisplayed, this.attachments);
|
GetEmailContentSuccess(
|
||||||
|
this.emailContents,
|
||||||
|
this.emailContentsDisplayed,
|
||||||
|
this.attachments,
|
||||||
|
this.readReceiptRequested
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [emailContents, emailContentsDisplayed, attachments];
|
List<Object?> get props => [
|
||||||
|
emailContents,
|
||||||
|
emailContentsDisplayed,
|
||||||
|
attachments,
|
||||||
|
readReceiptRequested
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class GetEmailContentFailure extends FeatureFailure {
|
class GetEmailContentFailure extends FeatureFailure {
|
||||||
|
|||||||
@@ -26,9 +26,23 @@ class GetEmailContentInteractor {
|
|||||||
final newEmailContentsDisplayed = kIsWeb
|
final newEmailContentsDisplayed = kIsWeb
|
||||||
? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents)
|
? await emailRepository.addTooltipWhenHoverOnLink(newEmailContents)
|
||||||
: newEmailContents;
|
: newEmailContents;
|
||||||
yield Right<Failure, Success>(GetEmailContentSuccess(newEmailContents, newEmailContentsDisplayed, email.allAttachments));
|
yield Right<Failure, Success>(GetEmailContentSuccess(
|
||||||
|
newEmailContents,
|
||||||
|
newEmailContentsDisplayed,
|
||||||
|
email.allAttachments,
|
||||||
|
email.needShowNotificationMessageReadReceipt));
|
||||||
} else if (email.allAttachments.isNotEmpty) {
|
} else if (email.allAttachments.isNotEmpty) {
|
||||||
yield Right<Failure, Success>(GetEmailContentSuccess([], [], email.allAttachments));
|
yield Right<Failure, Success>(GetEmailContentSuccess(
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
email.allAttachments,
|
||||||
|
email.needShowNotificationMessageReadReceipt));
|
||||||
|
} else if (email.headers?.isNotEmpty == true) {
|
||||||
|
yield Right<Failure, Success>(GetEmailContentSuccess(
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
email.needShowNotificationMessageReadReceipt));
|
||||||
} else {
|
} else {
|
||||||
yield Left(GetEmailContentFailure(null));
|
yield Left(GetEmailContentFailure(null));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,9 @@ class EmailProperty {
|
|||||||
static const String bcc = 'bcc';
|
static const String bcc = 'bcc';
|
||||||
static const String replyTo = 'replyTo';
|
static const String replyTo = 'replyTo';
|
||||||
static const String mailboxIds = 'mailboxIds';
|
static const String mailboxIds = 'mailboxIds';
|
||||||
|
static const String bodyValues = 'bodyValues';
|
||||||
|
static const String htmlBody = 'htmlBody';
|
||||||
|
static const String attachments = 'attachments';
|
||||||
|
static const String headers = 'headers';
|
||||||
|
static final String headerMdnKey = 'Disposition-Notification-To';
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,14 @@ extension EmailExtension on Email {
|
|||||||
|
|
||||||
bool get hasStarred => keywords?.containsKey(KeyWordIdentifier.emailFlagged) == true;
|
bool get hasStarred => keywords?.containsKey(KeyWordIdentifier.emailFlagged) == true;
|
||||||
|
|
||||||
|
bool get hasMdnSent => keywords?.containsKey(KeyWordIdentifier.mdnSent) == true;
|
||||||
|
|
||||||
bool get withAttachments => hasAttachment == true;
|
bool get withAttachments => hasAttachment == true;
|
||||||
|
|
||||||
|
bool get needShowNotificationMessageReadReceipt {
|
||||||
|
return !hasMdnSent && headers.readReceiptHasBeenRequested;
|
||||||
|
}
|
||||||
|
|
||||||
Set<String> getRecipientEmailAddressList() {
|
Set<String> getRecipientEmailAddressList() {
|
||||||
final listEmailAddress = Set<String>();
|
final listEmailAddress = Set<String>();
|
||||||
final listToAddress = to.getListAddress() ?? [];
|
final listToAddress = to.getListAddress() ?? [];
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
import 'package:jmap_dart_client/jmap/mail/email/email_header.dart';
|
||||||
|
import 'package:model/email/email_property.dart';
|
||||||
|
|
||||||
|
extension ListEmailHeaderExtension on Set<EmailHeader>? {
|
||||||
|
bool get readReceiptHasBeenRequested {
|
||||||
|
try {
|
||||||
|
final headerMdn = this?.firstWhere((header) => header.name == EmailProperty.headerMdnKey);
|
||||||
|
return headerMdn != null;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,6 +52,7 @@ export 'extensions/session_extension.dart';
|
|||||||
export 'extensions/user_profile_extension.dart';
|
export 'extensions/user_profile_extension.dart';
|
||||||
export 'extensions/utc_date_extension.dart';
|
export 'extensions/utc_date_extension.dart';
|
||||||
export 'extensions/email_filter_condition_extension.dart';
|
export 'extensions/email_filter_condition_extension.dart';
|
||||||
|
export 'extensions/list_email_header_extension.dart';
|
||||||
// Identity
|
// Identity
|
||||||
export 'identity/identity_request_dto.dart';
|
export 'identity/identity_request_dto.dart';
|
||||||
export 'mailbox/expand_mode.dart';
|
export 'mailbox/expand_mode.dart';
|
||||||
|
|||||||
Reference in New Issue
Block a user