TF-2930 Fix inline attachment lost in draft emails
This commit is contained in:
@@ -46,7 +46,7 @@ class TransformConfiguration {
|
|||||||
const RemoveCollapsedSignatureButtonTransformer(),
|
const RemoveCollapsedSignatureButtonTransformer(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
factory TransformConfiguration.forDraftsEmail() => TransformConfiguration.empty();
|
factory TransformConfiguration.forDraftsEmail() => TransformConfiguration.fromDomTransformers([const ImageTransformer()]);
|
||||||
|
|
||||||
factory TransformConfiguration.forPreviewEmailOnWeb() => TransformConfiguration.create(
|
factory TransformConfiguration.forPreviewEmailOnWeb() => TransformConfiguration.create(
|
||||||
customDomTransformers: [
|
customDomTransformers: [
|
||||||
|
|||||||
@@ -326,9 +326,7 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
|
|
||||||
void _updateEditorContent(RestoreEmailInlineImagesSuccess success) {
|
void _updateEditorContent(RestoreEmailInlineImagesSuccess success) {
|
||||||
richTextWebController?.editorController.setText(success.emailContent);
|
richTextWebController?.editorController.setText(success.emailContent);
|
||||||
consumeState(Stream.value(Right(GetEmailContentSuccess(
|
consumeState(Stream.value(Right(GetEmailContentSuccess(htmlEmailContent: success.emailContent))));
|
||||||
htmlEmailContent: success.emailContent,
|
|
||||||
attachments: []))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -582,6 +580,12 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
presentationEmail: arguments.sendingEmail!.presentationEmail,
|
presentationEmail: arguments.sendingEmail!.presentationEmail,
|
||||||
actionType: EmailActionType.editSendingEmail
|
actionType: EmailActionType.editSendingEmail
|
||||||
);
|
);
|
||||||
|
final allAttachments = arguments.sendingEmail!.email.allAttachments;
|
||||||
|
_initAttachmentsAndInlineImages(
|
||||||
|
attachments: allAttachments.getListAttachmentsDisplayedOutside(
|
||||||
|
arguments.sendingEmail!.email.htmlBodyAttachments),
|
||||||
|
inlineImages: allAttachments.listAttachmentsDisplayedInContent);
|
||||||
|
|
||||||
_getEmailContentFromSendingEmail(arguments.sendingEmail!);
|
_getEmailContentFromSendingEmail(arguments.sendingEmail!);
|
||||||
_emailIdEditing = arguments.sendingEmail!.presentationEmail.id!;
|
_emailIdEditing = arguments.sendingEmail!.presentationEmail.id!;
|
||||||
break;
|
break;
|
||||||
@@ -628,7 +632,9 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
presentationEmail: arguments.presentationEmail!,
|
presentationEmail: arguments.presentationEmail!,
|
||||||
actionType: arguments.emailActionType
|
actionType: arguments.emailActionType
|
||||||
);
|
);
|
||||||
_initAttachments(arguments.attachments ?? []);
|
_initAttachmentsAndInlineImages(
|
||||||
|
attachments: arguments.attachments,
|
||||||
|
inlineImages: arguments.inlineImages);
|
||||||
_transformHtmlEmailContent(arguments.emailContents);
|
_transformHtmlEmailContent(arguments.emailContents);
|
||||||
break;
|
break;
|
||||||
case EmailActionType.reopenComposerBrowser:
|
case EmailActionType.reopenComposerBrowser:
|
||||||
@@ -644,9 +650,9 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
presentationEmail: arguments.presentationEmail!,
|
presentationEmail: arguments.presentationEmail!,
|
||||||
actionType: EmailActionType.reopenComposerBrowser
|
actionType: EmailActionType.reopenComposerBrowser
|
||||||
);
|
);
|
||||||
_initAttachments(
|
_initAttachmentsAndInlineImages(
|
||||||
arguments.attachments ?? [],
|
attachments: arguments.attachments,
|
||||||
inlineAttachments: arguments.inlineImages);
|
inlineImages: arguments.inlineImages);
|
||||||
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final downloadUrl = mailboxDashBoardController.sessionCurrent
|
final downloadUrl = mailboxDashBoardController.sessionCurrent
|
||||||
@@ -690,13 +696,16 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
subjectEmailInputController.text = newSubject;
|
subjectEmailInputController.text = newSubject;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _initAttachments(List<Attachment> attachments, {List<Attachment>? inlineAttachments}) {
|
void _initAttachmentsAndInlineImages({
|
||||||
if (attachments.isNotEmpty) {
|
List<Attachment>? attachments,
|
||||||
initialAttachments = attachments;
|
List<Attachment>? inlineImages
|
||||||
|
}) {
|
||||||
|
if (attachments?.isNotEmpty == true) {
|
||||||
|
initialAttachments = attachments!;
|
||||||
uploadController.initializeUploadAttachments(attachments);
|
uploadController.initializeUploadAttachments(attachments);
|
||||||
}
|
}
|
||||||
if (inlineAttachments != null) {
|
if (inlineImages?.isNotEmpty == true) {
|
||||||
uploadController.initializeUploadInlineAttachments(inlineAttachments);
|
uploadController.initializeUploadInlineAttachments(inlineImages!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1323,7 +1332,6 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
consumeState(Stream.value(
|
consumeState(Stream.value(
|
||||||
Right(GetEmailContentSuccess(
|
Right(GetEmailContentSuccess(
|
||||||
htmlEmailContent: sendingEmail.presentationEmail.emailContentList.asHtmlString,
|
htmlEmailContent: sendingEmail.presentationEmail.emailContentList.asHtmlString,
|
||||||
attachments: sendingEmail.email.allAttachments,
|
|
||||||
emailCurrent: sendingEmail.email
|
emailCurrent: sendingEmail.email
|
||||||
))
|
))
|
||||||
));
|
));
|
||||||
@@ -1346,32 +1354,17 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentFromContentShared(String content) {
|
void _getEmailContentFromContentShared(String content) {
|
||||||
consumeState(Stream.value(
|
consumeState(Stream.value(Right(GetEmailContentSuccess(htmlEmailContent: content))));
|
||||||
Right(GetEmailContentSuccess(
|
|
||||||
htmlEmailContent: content,
|
|
||||||
attachments: [],
|
|
||||||
))
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentFromMailtoUri(String content) {
|
void _getEmailContentFromMailtoUri(String content) {
|
||||||
log('ComposerController::_getEmailContentFromMailtoUri:content: $content');
|
log('ComposerController::_getEmailContentFromMailtoUri:content: $content');
|
||||||
consumeState(Stream.value(
|
consumeState(Stream.value(Right(GetEmailContentSuccess(htmlEmailContent: content))));
|
||||||
Right(GetEmailContentSuccess(
|
|
||||||
htmlEmailContent: content,
|
|
||||||
attachments: [],
|
|
||||||
))
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentFromUnsubscribeMailtoLink(String content) {
|
void _getEmailContentFromUnsubscribeMailtoLink(String content) {
|
||||||
log('ComposerController::_getEmailContentFromUnsubscribeMailtoLink:content: $content');
|
log('ComposerController::_getEmailContentFromUnsubscribeMailtoLink:content: $content');
|
||||||
consumeState(Stream.value(
|
consumeState(Stream.value(Right(GetEmailContentSuccess(htmlEmailContent: content))));
|
||||||
Right(GetEmailContentSuccess(
|
|
||||||
htmlEmailContent: content,
|
|
||||||
attachments: [],
|
|
||||||
))
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentFromEmailId({required EmailId emailId, bool isDraftEmail = false}) {
|
void _getEmailContentFromEmailId({required EmailId emailId, bool isDraftEmail = false}) {
|
||||||
@@ -1389,12 +1382,16 @@ class ComposerController extends BaseController with DragDropFileMixin implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentOffLineSuccess(GetEmailContentFromCacheSuccess success) {
|
void _getEmailContentOffLineSuccess(GetEmailContentFromCacheSuccess success) {
|
||||||
_initAttachments(success.attachments);
|
_initAttachmentsAndInlineImages(
|
||||||
|
attachments: success.attachments,
|
||||||
|
inlineImages: success.inlineImages);
|
||||||
emailContentsViewState.value = Right(success);
|
emailContentsViewState.value = Right(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getEmailContentSuccess(GetEmailContentSuccess success) {
|
void _getEmailContentSuccess(GetEmailContentSuccess success) {
|
||||||
_initAttachments(success.attachments);
|
_initAttachmentsAndInlineImages(
|
||||||
|
attachments: success.attachments,
|
||||||
|
inlineImages: success.inlineImages);
|
||||||
emailContentsViewState.value = Right(success);
|
emailContentsViewState.value = Right(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ extension DetailedEmailExtension on DetailedEmail {
|
|||||||
emailContentPath: emailContentPath,
|
emailContentPath: emailContentPath,
|
||||||
messageId: messageId?.ids.toList(),
|
messageId: messageId?.ids.toList(),
|
||||||
references: references?.ids.toList(),
|
references: references?.ids.toList(),
|
||||||
|
inlineImages: inlineImages?.toHiveCache(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ extension DetailedEmailExtension on DetailedEmail {
|
|||||||
emailContentPath: path,
|
emailContentPath: path,
|
||||||
messageId: messageId,
|
messageId: messageId,
|
||||||
references: references,
|
references: references,
|
||||||
|
inlineImages: inlineImages,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,8 @@ extension DetailedEmailHiveCacheExtension on DetailedEmailHiveCache {
|
|||||||
: null,
|
: null,
|
||||||
references: references != null
|
references: references != null
|
||||||
? MessageIdsHeaderValue(references!.toSet())
|
? MessageIdsHeaderValue(references!.toSet())
|
||||||
: null
|
: null,
|
||||||
|
inlineImages: inlineImages?.toAttachment(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,8 @@ extension EmailExtension on Email {
|
|||||||
keywords: keywords,
|
keywords: keywords,
|
||||||
htmlEmailContent: htmlEmailContent,
|
htmlEmailContent: htmlEmailContent,
|
||||||
messageId: messageId,
|
messageId: messageId,
|
||||||
references: references
|
references: references,
|
||||||
|
inlineImages: allAttachments.listAttachmentsDisplayedInContent,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,7 @@ class DetailedEmail with EquatableMixin {
|
|||||||
final DateTime createdTime;
|
final DateTime createdTime;
|
||||||
final MessageIdsHeaderValue? messageId;
|
final MessageIdsHeaderValue? messageId;
|
||||||
final MessageIdsHeaderValue? references;
|
final MessageIdsHeaderValue? references;
|
||||||
|
final List<Attachment>? inlineImages;
|
||||||
|
|
||||||
DetailedEmail({
|
DetailedEmail({
|
||||||
required this.emailId,
|
required this.emailId,
|
||||||
@@ -25,6 +26,7 @@ class DetailedEmail with EquatableMixin {
|
|||||||
this.emailContentPath,
|
this.emailContentPath,
|
||||||
this.messageId,
|
this.messageId,
|
||||||
this.references,
|
this.references,
|
||||||
|
this.inlineImages,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -38,5 +40,6 @@ class DetailedEmail with EquatableMixin {
|
|||||||
emailContentPath,
|
emailContentPath,
|
||||||
messageId,
|
messageId,
|
||||||
references,
|
references,
|
||||||
|
inlineImages,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -7,12 +7,14 @@ class GetEmailContentLoading extends LoadingState {}
|
|||||||
|
|
||||||
class GetEmailContentSuccess extends UIState {
|
class GetEmailContentSuccess extends UIState {
|
||||||
final String htmlEmailContent;
|
final String htmlEmailContent;
|
||||||
final List<Attachment> attachments;
|
final List<Attachment>? attachments;
|
||||||
|
final List<Attachment>? inlineImages;
|
||||||
final Email? emailCurrent;
|
final Email? emailCurrent;
|
||||||
|
|
||||||
GetEmailContentSuccess({
|
GetEmailContentSuccess({
|
||||||
required this.htmlEmailContent,
|
required this.htmlEmailContent,
|
||||||
required this.attachments,
|
this.attachments,
|
||||||
|
this.inlineImages,
|
||||||
this.emailCurrent
|
this.emailCurrent
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -20,18 +22,21 @@ class GetEmailContentSuccess extends UIState {
|
|||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
htmlEmailContent,
|
htmlEmailContent,
|
||||||
attachments,
|
attachments,
|
||||||
|
inlineImages,
|
||||||
emailCurrent
|
emailCurrent
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class GetEmailContentFromCacheSuccess extends UIState {
|
class GetEmailContentFromCacheSuccess extends UIState {
|
||||||
final String htmlEmailContent;
|
final String htmlEmailContent;
|
||||||
final List<Attachment> attachments;
|
final List<Attachment>? attachments;
|
||||||
|
final List<Attachment>? inlineImages;
|
||||||
final Email? emailCurrent;
|
final Email? emailCurrent;
|
||||||
|
|
||||||
GetEmailContentFromCacheSuccess({
|
GetEmailContentFromCacheSuccess({
|
||||||
required this.htmlEmailContent,
|
required this.htmlEmailContent,
|
||||||
required this.attachments,
|
this.attachments,
|
||||||
|
this.inlineImages,
|
||||||
this.emailCurrent
|
this.emailCurrent
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -39,6 +44,7 @@ class GetEmailContentFromCacheSuccess extends UIState {
|
|||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
htmlEmailContent,
|
htmlEmailContent,
|
||||||
attachments,
|
attachments,
|
||||||
|
inlineImages,
|
||||||
emailCurrent,
|
emailCurrent,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,9 +47,11 @@ class GetEmailContentInteractor {
|
|||||||
) async* {
|
) async* {
|
||||||
try {
|
try {
|
||||||
final email = await emailRepository.getEmailContent(session, accountId, emailId);
|
final email = await emailRepository.getEmailContent(session, accountId, emailId);
|
||||||
|
final listAttachments = email.allAttachments.getListAttachmentsDisplayedOutside(email.htmlBodyAttachments);
|
||||||
|
final listInlineImages = email.allAttachments.listAttachmentsDisplayedInContent;
|
||||||
|
|
||||||
if (email.emailContentList.isNotEmpty) {
|
if (email.emailContentList.isNotEmpty) {
|
||||||
final mapCidImageDownloadUrl = email.attachmentsWithCid.toMapCidImageDownloadUrl(
|
final mapCidImageDownloadUrl = listInlineImages.toMapCidImageDownloadUrl(
|
||||||
accountId: accountId,
|
accountId: accountId,
|
||||||
downloadUrl: baseDownloadUrl
|
downloadUrl: baseDownloadUrl
|
||||||
);
|
);
|
||||||
@@ -61,13 +63,15 @@ class GetEmailContentInteractor {
|
|||||||
|
|
||||||
yield Right<Failure, Success>(GetEmailContentSuccess(
|
yield Right<Failure, Success>(GetEmailContentSuccess(
|
||||||
htmlEmailContent: newEmailContents.asHtmlString,
|
htmlEmailContent: newEmailContents.asHtmlString,
|
||||||
attachments: email.allAttachments.getListAttachmentsDisplayedOutside(email.htmlBodyAttachments),
|
attachments: listAttachments,
|
||||||
|
inlineImages: listInlineImages,
|
||||||
emailCurrent: email
|
emailCurrent: email
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
yield Right<Failure, Success>(GetEmailContentSuccess(
|
yield Right<Failure, Success>(GetEmailContentSuccess(
|
||||||
htmlEmailContent: '',
|
htmlEmailContent: '',
|
||||||
attachments: email.allAttachments.getListAttachmentsDisplayedOutside(email.htmlBodyAttachments),
|
attachments: listAttachments,
|
||||||
|
inlineImages: listInlineImages,
|
||||||
emailCurrent: email
|
emailCurrent: email
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -90,6 +94,7 @@ class GetEmailContentInteractor {
|
|||||||
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
|
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
|
||||||
htmlEmailContent: detailedEmail.htmlEmailContent ?? '',
|
htmlEmailContent: detailedEmail.htmlEmailContent ?? '',
|
||||||
attachments: detailedEmail.attachments ?? [],
|
attachments: detailedEmail.attachments ?? [],
|
||||||
|
inlineImages: detailedEmail.inlineImages ?? [],
|
||||||
emailCurrent: Email(
|
emailCurrent: Email(
|
||||||
id: emailId,
|
id: emailId,
|
||||||
headers: detailedEmail.headers,
|
headers: detailedEmail.headers,
|
||||||
@@ -121,6 +126,7 @@ class GetEmailContentInteractor {
|
|||||||
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
|
yield Right<Failure, Success>(GetEmailContentFromCacheSuccess(
|
||||||
htmlEmailContent: detailedEmail.htmlEmailContent ?? '',
|
htmlEmailContent: detailedEmail.htmlEmailContent ?? '',
|
||||||
attachments: detailedEmail.attachments ?? [],
|
attachments: detailedEmail.attachments ?? [],
|
||||||
|
inlineImages: detailedEmail.inlineImages ?? [],
|
||||||
emailCurrent: Email(
|
emailCurrent: Email(
|
||||||
id: emailId,
|
id: emailId,
|
||||||
headers: detailedEmail.headers,
|
headers: detailedEmail.headers,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class GetListDetailedEmailByIdInteractor {
|
|||||||
|
|
||||||
final listEmailContent = email.emailContentList;
|
final listEmailContent = email.emailContentList;
|
||||||
if (listEmailContent.isNotEmpty) {
|
if (listEmailContent.isNotEmpty) {
|
||||||
final mapCidImageDownloadUrl = email.attachmentsWithCid.toMapCidImageDownloadUrl(
|
final mapCidImageDownloadUrl = email.allAttachments.listAttachmentsDisplayedInContent.toMapCidImageDownloadUrl(
|
||||||
accountId: accountId,
|
accountId: accountId,
|
||||||
downloadUrl: baseDownloadUrl
|
downloadUrl: baseDownloadUrl
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -469,6 +469,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
GetEmailContentSuccess(
|
GetEmailContentSuccess(
|
||||||
htmlEmailContent: emailLoaded.htmlContent,
|
htmlEmailContent: emailLoaded.htmlContent,
|
||||||
attachments: emailLoaded.attachments,
|
attachments: emailLoaded.attachments,
|
||||||
|
inlineImages: emailLoaded.inlineImages,
|
||||||
emailCurrent: emailLoaded.emailCurrent
|
emailCurrent: emailLoaded.emailCurrent
|
||||||
)
|
)
|
||||||
)));
|
)));
|
||||||
@@ -501,22 +502,23 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
currentEmailLoaded.value = EmailLoaded(
|
currentEmailLoaded.value = EmailLoaded(
|
||||||
htmlContent: success.htmlEmailContent,
|
htmlContent: success.htmlEmailContent,
|
||||||
attachments: List.of(success.attachments),
|
attachments: List.of(success.attachments ?? []),
|
||||||
|
inlineImages: List.of(success.inlineImages ?? []),
|
||||||
emailCurrent: success.emailCurrent,
|
emailCurrent: success.emailCurrent,
|
||||||
);
|
);
|
||||||
emailSupervisorController.pushEmailQueue(currentEmailLoaded.value!);
|
emailSupervisorController.pushEmailQueue(currentEmailLoaded.value!);
|
||||||
|
|
||||||
if (success.emailCurrent?.id == currentEmail?.id) {
|
if (success.emailCurrent?.id == currentEmail?.id) {
|
||||||
attachments.value = success.attachments;
|
attachments.value = success.attachments ?? [];
|
||||||
attachmentsViewState.value = {
|
attachmentsViewState.value = {
|
||||||
for (var attachment in attachments.where((item) => item.blobId != null))
|
for (var attachment in attachments.where((item) => item.blobId != null))
|
||||||
attachment.blobId!: Right(IdleDownloadAttachmentForWeb())
|
attachment.blobId!: Right(IdleDownloadAttachmentForWeb())
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_canParseCalendarEvent(blobIds: success.attachments.calendarEventBlobIds)) {
|
if (_canParseCalendarEvent(blobIds: success.attachments?.calendarEventBlobIds ?? {})) {
|
||||||
_parseCalendarEventAction(
|
_parseCalendarEventAction(
|
||||||
accountId: mailboxDashBoardController.accountId.value!,
|
accountId: mailboxDashBoardController.accountId.value!,
|
||||||
blobIds: success.attachments.calendarEventBlobIds,
|
blobIds: success.attachments?.calendarEventBlobIds ?? {},
|
||||||
emailContents: success.htmlEmailContent
|
emailContents: success.htmlEmailContent
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -545,22 +547,23 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
currentEmailLoaded.value = EmailLoaded(
|
currentEmailLoaded.value = EmailLoaded(
|
||||||
htmlContent: success.htmlEmailContent,
|
htmlContent: success.htmlEmailContent,
|
||||||
attachments: List.of(success.attachments),
|
attachments: List.of(success.attachments ?? []),
|
||||||
|
inlineImages: List.of(success.inlineImages ?? []),
|
||||||
emailCurrent: success.emailCurrent,
|
emailCurrent: success.emailCurrent,
|
||||||
);
|
);
|
||||||
emailSupervisorController.pushEmailQueue(currentEmailLoaded.value!);
|
emailSupervisorController.pushEmailQueue(currentEmailLoaded.value!);
|
||||||
|
|
||||||
if (success.emailCurrent?.id == currentEmail?.id) {
|
if (success.emailCurrent?.id == currentEmail?.id) {
|
||||||
attachments.value = success.attachments;
|
attachments.value = success.attachments ?? [];
|
||||||
attachmentsViewState.value = {
|
attachmentsViewState.value = {
|
||||||
for (var attachment in attachments.where((item) => item.blobId != null))
|
for (var attachment in attachments.where((item) => item.blobId != null))
|
||||||
attachment.blobId!: Right(IdleDownloadAttachmentForWeb())
|
attachment.blobId!: Right(IdleDownloadAttachmentForWeb())
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_canParseCalendarEvent(blobIds: success.attachments.calendarEventBlobIds)) {
|
if (_canParseCalendarEvent(blobIds: success.attachments?.calendarEventBlobIds ?? {})) {
|
||||||
_parseCalendarEventAction(
|
_parseCalendarEventAction(
|
||||||
accountId: mailboxDashBoardController.accountId.value!,
|
accountId: mailboxDashBoardController.accountId.value!,
|
||||||
blobIds: success.attachments.calendarEventBlobIds,
|
blobIds: success.attachments?.calendarEventBlobIds ?? {},
|
||||||
emailContents: success.htmlEmailContent
|
emailContents: success.htmlEmailContent
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -1343,6 +1346,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
ComposerArguments.replyEmail(
|
ComposerArguments.replyEmail(
|
||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
content: currentEmailLoaded.value?.htmlContent ?? '',
|
content: currentEmailLoaded.value?.htmlContent ?? '',
|
||||||
|
inlineImages: currentEmailLoaded.value?.inlineImages ?? [],
|
||||||
mailboxRole: presentationEmail.mailboxContain?.role,
|
mailboxRole: presentationEmail.mailboxContain?.role,
|
||||||
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
||||||
references: currentEmailLoaded.value?.emailCurrent?.references,
|
references: currentEmailLoaded.value?.emailCurrent?.references,
|
||||||
@@ -1354,6 +1358,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
ComposerArguments.replyAllEmail(
|
ComposerArguments.replyAllEmail(
|
||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
content: currentEmailLoaded.value?.htmlContent ?? '',
|
content: currentEmailLoaded.value?.htmlContent ?? '',
|
||||||
|
inlineImages: currentEmailLoaded.value?.inlineImages ?? [],
|
||||||
mailboxRole: presentationEmail.mailboxContain?.role,
|
mailboxRole: presentationEmail.mailboxContain?.role,
|
||||||
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
||||||
references: currentEmailLoaded.value?.emailCurrent?.references,
|
references: currentEmailLoaded.value?.emailCurrent?.references,
|
||||||
@@ -1366,6 +1371,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
content: currentEmailLoaded.value?.htmlContent ?? '',
|
content: currentEmailLoaded.value?.htmlContent ?? '',
|
||||||
attachments: attachments,
|
attachments: attachments,
|
||||||
|
inlineImages: currentEmailLoaded.value?.inlineImages ?? [],
|
||||||
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
messageId: currentEmailLoaded.value?.emailCurrent?.messageId,
|
||||||
references: currentEmailLoaded.value?.emailCurrent?.references,
|
references: currentEmailLoaded.value?.emailCurrent?.references,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -95,11 +95,9 @@ class ComposerArguments extends RouterArguments {
|
|||||||
emailActionType: EmailActionType.reopenComposerBrowser,
|
emailActionType: EmailActionType.reopenComposerBrowser,
|
||||||
presentationEmail: composerCache.email?.toPresentationEmail(),
|
presentationEmail: composerCache.email?.toPresentationEmail(),
|
||||||
emailContents: composerCache.email?.emailContentList.asHtmlString,
|
emailContents: composerCache.email?.emailContentList.asHtmlString,
|
||||||
attachments: composerCache.email?.allAttachments
|
attachments: composerCache.email?.allAttachments.getListAttachmentsDisplayedOutside(composerCache.email?.htmlBodyAttachments ?? []),
|
||||||
.where((attachment) => attachment.disposition != ContentDisposition.inline)
|
|
||||||
.toList(),
|
|
||||||
selectedIdentity: composerCache.identity,
|
selectedIdentity: composerCache.identity,
|
||||||
inlineImages: composerCache.email?.attachmentsWithCid,
|
inlineImages: composerCache.email?.allAttachments.listAttachmentsDisplayedInContent,
|
||||||
readRecepientEnabled: composerCache.readReceipentEnabled,
|
readRecepientEnabled: composerCache.readReceipentEnabled,
|
||||||
displayMode: composerCache.displayMode,
|
displayMode: composerCache.displayMode,
|
||||||
);
|
);
|
||||||
@@ -107,6 +105,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
factory ComposerArguments.replyEmail({
|
factory ComposerArguments.replyEmail({
|
||||||
required PresentationEmail presentationEmail,
|
required PresentationEmail presentationEmail,
|
||||||
required String content,
|
required String content,
|
||||||
|
required List<Attachment> inlineImages,
|
||||||
Role? mailboxRole,
|
Role? mailboxRole,
|
||||||
MessageIdsHeaderValue? messageId,
|
MessageIdsHeaderValue? messageId,
|
||||||
MessageIdsHeaderValue? references,
|
MessageIdsHeaderValue? references,
|
||||||
@@ -114,6 +113,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
emailActionType: EmailActionType.reply,
|
emailActionType: EmailActionType.reply,
|
||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
emailContents: content,
|
emailContents: content,
|
||||||
|
inlineImages: inlineImages,
|
||||||
mailboxRole: mailboxRole,
|
mailboxRole: mailboxRole,
|
||||||
messageId: messageId,
|
messageId: messageId,
|
||||||
references: references,
|
references: references,
|
||||||
@@ -122,6 +122,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
factory ComposerArguments.replyAllEmail({
|
factory ComposerArguments.replyAllEmail({
|
||||||
required PresentationEmail presentationEmail,
|
required PresentationEmail presentationEmail,
|
||||||
required String content,
|
required String content,
|
||||||
|
required List<Attachment> inlineImages,
|
||||||
Role? mailboxRole,
|
Role? mailboxRole,
|
||||||
MessageIdsHeaderValue? messageId,
|
MessageIdsHeaderValue? messageId,
|
||||||
MessageIdsHeaderValue? references,
|
MessageIdsHeaderValue? references,
|
||||||
@@ -129,6 +130,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
emailActionType: EmailActionType.replyAll,
|
emailActionType: EmailActionType.replyAll,
|
||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
emailContents: content,
|
emailContents: content,
|
||||||
|
inlineImages: inlineImages,
|
||||||
mailboxRole: mailboxRole,
|
mailboxRole: mailboxRole,
|
||||||
messageId: messageId,
|
messageId: messageId,
|
||||||
references: references,
|
references: references,
|
||||||
@@ -138,6 +140,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
required PresentationEmail presentationEmail,
|
required PresentationEmail presentationEmail,
|
||||||
required String content,
|
required String content,
|
||||||
required List<Attachment> attachments,
|
required List<Attachment> attachments,
|
||||||
|
required List<Attachment> inlineImages,
|
||||||
MessageIdsHeaderValue? messageId,
|
MessageIdsHeaderValue? messageId,
|
||||||
MessageIdsHeaderValue? references,
|
MessageIdsHeaderValue? references,
|
||||||
}) => ComposerArguments(
|
}) => ComposerArguments(
|
||||||
@@ -145,6 +148,7 @@ class ComposerArguments extends RouterArguments {
|
|||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
emailContents: content,
|
emailContents: content,
|
||||||
attachments: attachments,
|
attachments: attachments,
|
||||||
|
inlineImages: inlineImages,
|
||||||
mailboxRole: presentationEmail.mailboxContain?.role,
|
mailboxRole: presentationEmail.mailboxContain?.role,
|
||||||
messageId: messageId,
|
messageId: messageId,
|
||||||
references: references,
|
references: references,
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import 'package:model/email/attachment.dart';
|
|||||||
class EmailLoaded with EquatableMixin {
|
class EmailLoaded with EquatableMixin {
|
||||||
final String htmlContent;
|
final String htmlContent;
|
||||||
final List<Attachment> attachments;
|
final List<Attachment> attachments;
|
||||||
|
final List<Attachment> inlineImages;
|
||||||
final Email? emailCurrent;
|
final Email? emailCurrent;
|
||||||
|
|
||||||
EmailLoaded({
|
EmailLoaded({
|
||||||
required this.htmlContent,
|
required this.htmlContent,
|
||||||
required this.attachments,
|
required this.attachments,
|
||||||
|
required this.inlineImages,
|
||||||
this.emailCurrent,
|
this.emailCurrent,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -17,6 +19,7 @@ class EmailLoaded with EquatableMixin {
|
|||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
htmlContent,
|
htmlContent,
|
||||||
attachments,
|
attachments,
|
||||||
|
inlineImages,
|
||||||
emailCurrent
|
emailCurrent
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
@HiveField(7)
|
@HiveField(7)
|
||||||
final List<String>? references;
|
final List<String>? references;
|
||||||
|
|
||||||
|
@HiveField(8)
|
||||||
|
final List<AttachmentHiveCache>? inlineImages;
|
||||||
|
|
||||||
DetailedEmailHiveCache({
|
DetailedEmailHiveCache({
|
||||||
required this.emailId,
|
required this.emailId,
|
||||||
required this.timeSaved,
|
required this.timeSaved,
|
||||||
@@ -44,6 +47,7 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
this.keywords,
|
this.keywords,
|
||||||
this.messageId,
|
this.messageId,
|
||||||
this.references,
|
this.references,
|
||||||
|
this.inlineImages,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -56,5 +60,6 @@ class DetailedEmailHiveCache extends HiveObject with EquatableMixin {
|
|||||||
keywords,
|
keywords,
|
||||||
messageId,
|
messageId,
|
||||||
references,
|
references,
|
||||||
|
inlineImages,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -151,8 +151,6 @@ extension EmailExtension on Email {
|
|||||||
|
|
||||||
List<Attachment> get allAttachments => attachments?.map((item) => item.toAttachment()).toList() ?? [];
|
List<Attachment> get allAttachments => attachments?.map((item) => item.toAttachment()).toList() ?? [];
|
||||||
|
|
||||||
List<Attachment> get attachmentsWithCid => allAttachments.where((attachment) => attachment.hasCid()).toList();
|
|
||||||
|
|
||||||
PresentationMailbox? findMailboxContain(Map<MailboxId, PresentationMailbox> mapMailbox) {
|
PresentationMailbox? findMailboxContain(Map<MailboxId, PresentationMailbox> mapMailbox) {
|
||||||
final newMailboxIds = mailboxIds;
|
final newMailboxIds = mailboxIds;
|
||||||
newMailboxIds?.removeWhere((key, value) => !value);
|
newMailboxIds?.removeWhere((key, value) => !value);
|
||||||
|
|||||||
Reference in New Issue
Block a user