TF-82 Save email drafts when content changed
This commit is contained in:
@@ -72,9 +72,9 @@ class ComposerController extends BaseController {
|
||||
final GetEmailContentInteractor _getEmailContentInteractor;
|
||||
final UpdateEmailDraftsInteractor _updateEmailDraftsInteractor;
|
||||
|
||||
List<EmailAddress> listToEmailAddress = [];
|
||||
List<EmailAddress> listCcEmailAddress = [];
|
||||
List<EmailAddress> listBccEmailAddress = [];
|
||||
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
|
||||
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
|
||||
List<EmailAddress> listBccEmailAddress = <EmailAddress>[];
|
||||
String? _subjectEmail;
|
||||
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.localContact;
|
||||
HtmlEditorApi? htmlEditorApi;
|
||||
@@ -83,13 +83,19 @@ class ComposerController extends BaseController {
|
||||
final keyCcEmailAddress = GlobalKey<ChipsInputState>();
|
||||
final keyBccEmailAddress = GlobalKey<ChipsInputState>();
|
||||
|
||||
List<Attachment> initialAttachments = <Attachment>[];
|
||||
|
||||
void setSubjectEmail(String subject) => _subjectEmail = subject;
|
||||
|
||||
Future<String> _getEmailBodyText() async {
|
||||
Future<String> _getEmailBodyText({bool onlyText = false}) async {
|
||||
if (kIsWeb) {
|
||||
return await htmlControllerBrowser.getText();
|
||||
} else {
|
||||
return (await htmlEditorApi?.getFullHtml()) ?? '';
|
||||
if (onlyText) {
|
||||
return (await htmlEditorApi?.getText()) ?? '';
|
||||
} else {
|
||||
return (await htmlEditorApi?.getFullHtml()) ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +194,7 @@ class ComposerController extends BaseController {
|
||||
&& composerArguments.value!.emailActionType != EmailActionType.compose
|
||||
&& Get.context != null) {
|
||||
if (composerArguments.value?.emailActionType == EmailActionType.edit) {
|
||||
return _getOldEmailContentAsHtml(Get.context!);
|
||||
return _getOldEmailContentAsHtml();
|
||||
} else {
|
||||
return _getBodyEmailQuotedAsHtml(Get.context!, composerArguments.value!);
|
||||
}
|
||||
@@ -283,9 +289,9 @@ class ComposerController extends BaseController {
|
||||
final trustAsHtml = arguments.emailContents
|
||||
?.map((emailContent) => emailContent.content)
|
||||
.toList()
|
||||
.join('</br>') ?? '';
|
||||
.join('<br>') ?? '';
|
||||
|
||||
final emailQuotedHtml = '</br></br></br>$headerEmailQuotedAsHtml${trustAsHtml.addBlockQuoteTag()}</br>';
|
||||
final emailQuotedHtml = '<br><br><br>$headerEmailQuotedAsHtml${trustAsHtml.addBlockQuoteTag()}<br>';
|
||||
|
||||
return emailQuotedHtml;
|
||||
}
|
||||
@@ -477,19 +483,59 @@ class ComposerController extends BaseController {
|
||||
attachments.removeWhere((attachment) => attachment == attachmentRemoved);
|
||||
}
|
||||
|
||||
Future<bool> _isEmailChanged(ComposerArguments arguments) async {
|
||||
final newEmailBody = await _getEmailBodyText(onlyText: true);
|
||||
final oldEmailBody = kIsWeb ? getContentEmail() : '\n${getContentEmail()}\n';
|
||||
final isEmailBodyChanged = !oldEmailBody.isSame(newEmailBody);
|
||||
|
||||
final newEmailSubject = _subjectEmail;
|
||||
final subjectEmail = arguments.presentationEmail?.getEmailTitle().trim() ?? '';
|
||||
final oldEmailSubject = arguments.emailActionType.getSubjectComposer(Get.context!, subjectEmail);
|
||||
final isEmailSubjectChanged = !oldEmailSubject.isSame(newEmailSubject);
|
||||
|
||||
final recipients = arguments.presentationEmail
|
||||
?.generateRecipientsEmailAddressForComposer(arguments.emailActionType, arguments.mailboxRole)
|
||||
?? Tuple3(<EmailAddress>[], <EmailAddress>[], <EmailAddress>[]);
|
||||
|
||||
final newToEmailAddress = listToEmailAddress;
|
||||
final oldToEmailAddress = recipients.value1;
|
||||
final isToEmailAddressChanged = !oldToEmailAddress.isSame(newToEmailAddress);
|
||||
|
||||
final newCcEmailAddress = listToEmailAddress;
|
||||
final oldCcEmailAddress = recipients.value1;
|
||||
final isCcEmailAddressChanged = !oldCcEmailAddress.isSame(newCcEmailAddress);
|
||||
|
||||
final newBccEmailAddress = listToEmailAddress;
|
||||
final oldBccEmailAddress = recipients.value1;
|
||||
final isBccEmailAddressChanged = !oldBccEmailAddress.isSame(newBccEmailAddress);
|
||||
|
||||
final isAttachmentsChanged = !initialAttachments.isSame(attachments.toList());
|
||||
|
||||
if (isEmailBodyChanged || isEmailSubjectChanged
|
||||
|| isToEmailAddressChanged || isCcEmailAddressChanged
|
||||
|| isBccEmailAddressChanged || isAttachmentsChanged) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void saveEmailAsDrafts() async {
|
||||
final arguments = composerArguments.value;
|
||||
if (arguments != null) {
|
||||
_saveEmailAddress();
|
||||
if (arguments != null && Get.context != null) {
|
||||
final isChanged = await _isEmailChanged(arguments);
|
||||
if (isChanged) {
|
||||
_saveEmailAddress();
|
||||
|
||||
final newEmail = await _generateEmail(arguments, asDrafts: true);
|
||||
final accountId = arguments.session.accounts.keys.first;
|
||||
final oldEmail = arguments.presentationEmail;
|
||||
final newEmail = await _generateEmail(arguments, asDrafts: true);
|
||||
final accountId = arguments.session.accounts.keys.first;
|
||||
final oldEmail = arguments.presentationEmail;
|
||||
|
||||
if (arguments.emailActionType == EmailActionType.edit && oldEmail != null) {
|
||||
mailboxDashBoardController.consumeState(_updateEmailDraftsInteractor.execute(accountId, newEmail, oldEmail.id));
|
||||
} else {
|
||||
mailboxDashBoardController.consumeState(_saveEmailAsDraftsInteractor.execute(accountId, newEmail));
|
||||
if (arguments.emailActionType == EmailActionType.edit && oldEmail != null) {
|
||||
mailboxDashBoardController.consumeState(_updateEmailDraftsInteractor.execute(accountId, newEmail, oldEmail.id));
|
||||
} else {
|
||||
mailboxDashBoardController.consumeState(_saveEmailAsDraftsInteractor.execute(accountId, newEmail));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -506,9 +552,10 @@ class ComposerController extends BaseController {
|
||||
void _getEmailContentSuccess(GetEmailContentSuccess success) {
|
||||
emailContents.value = success.emailContents;
|
||||
attachments.value = success.attachments;
|
||||
initialAttachments = success.attachments;
|
||||
}
|
||||
|
||||
String _getOldEmailContentAsHtml(BuildContext context) {
|
||||
String _getOldEmailContentAsHtml() {
|
||||
if (emailContents.isNotEmpty) {
|
||||
final trustAsHtml = emailContents
|
||||
.map((emailContent) => emailContent.content)
|
||||
|
||||
Reference in New Issue
Block a user