TF-3894 Fix blank email content when opening email

This commit is contained in:
dab246
2025-09-03 10:37:01 +07:00
committed by Dat H. Pham
parent 949c1a698c
commit 5a64ff7e8f
41 changed files with 309 additions and 169 deletions
@@ -1513,7 +1513,11 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
return;
}
final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session!.getOwnEmailAddressOrEmpty();
String receiverEmailAddress = _getReceiverEmailAddress(currentEmail!)
?? ownEmailAddress;
if (receiverEmailAddress.trim().isEmpty) {
receiverEmailAddress = session!.getOwnEmailAddressOrUsername();
}
log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress');
final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress);
final sendReceiptRequest = SendReceiptToSenderRequest(
@@ -1821,10 +1825,13 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
_printEmailButtonState = ButtonState.disabled;
String accountDisplayName = ownEmailAddress;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName = session?.getOwnEmailAddressOrUsername() ?? '';
}
consumeState(emailActionReactor.printEmail(
email,
ownEmailAddress: mailboxDashBoardController.ownEmailAddress.value,
ownEmailAddress: accountDisplayName,
emailLoaded: currentEmailLoaded.value!,
));
}
@@ -2324,8 +2331,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
listEmailAddressAttendees.addAll(listEmailAddress);
final currentUserEmail = mailboxDashBoardController.ownEmailAddress.value;
final listEmailAddressMailTo = listEmailAddressAttendees.removeInvalidEmails(currentUserEmail);
final listEmailAddressMailTo =
listEmailAddressAttendees.removeInvalidEmails(ownEmailAddress);
log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo');
mailboxDashBoardController.openComposer(
ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo)
@@ -2341,8 +2348,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
String getOwnEmailAddress() => session?.getOwnEmailAddressOrEmpty() ?? '';
void onHtmlContentClippedAction(bool isClipped) {
log('SingleEmailController::onHtmlContentClippedAction:isClipped = $isClipped');
isEmailContentClipped.value = isClipped;
@@ -89,7 +89,7 @@ class EmailView extends GetWidget<SingleEmailController> {
position: position,
responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths,
username: controller.session?.username,
ownEmailAddress: controller.ownEmailAddress,
handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action),
additionalActions: [],
emailIsRead: presentationEmail.hasRead,
@@ -163,7 +163,7 @@ class EmailView extends GetWidget<SingleEmailController> {
responsiveUtils: controller.responsiveUtils,
emailLoaded: emailLoaded,
presentationEmail: currentEmail,
userName: controller.getOwnEmailAddress(),
userName: controller.ownEmailAddress,
emailActionCallback: controller.pressEmailAction,
);
}),
@@ -261,7 +261,7 @@ class EmailView extends GetWidget<SingleEmailController> {
position: position,
responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths,
username: controller.session?.username,
ownEmailAddress: controller.ownEmailAddress,
handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action),
additionalActions: [
EmailActionType.reply,
@@ -310,10 +310,7 @@ class EmailView extends GetWidget<SingleEmailController> {
),
calendarEventReplying: controller.calendarEventProcessing,
attendanceStatus: controller.attendanceStatus.value,
ownEmailAddress: controller
.mailboxDashBoardController
.ownEmailAddress
.value,
ownEmailAddress: controller.ownEmailAddress,
onMailtoAttendeesAction: controller.handleMailToAttendees,
openEmailAddressDetailAction: (_, emailAddress) => controller.openEmailAddressDialog(emailAddress),
isFree: controller.isCalendarEventFree,
@@ -20,7 +20,6 @@ import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -524,7 +523,7 @@ class EmailActionReactor {
required RelativeRect? position,
required ResponsiveUtils responsiveUtils,
required ImagePaths imagePaths,
required UserName? username,
required String ownEmailAddress,
required void Function(
PresentationEmail presentationEmail,
EmailActionType action,
@@ -541,7 +540,7 @@ class EmailActionReactor {
EmailActionType.reply,
if (additionalActions.contains(EmailActionType.forward))
EmailActionType.forward,
if (presentationEmail.getCountMailAddressWithoutMe(username?.value ?? '') > 1 &&
if (presentationEmail.getCountMailAddressWithoutMe(ownEmailAddress) > 1 &&
additionalActions.contains(EmailActionType.replyAll))
EmailActionType.replyAll,
if (EmailUtils.isReplyToListEnabled(presentationEmail.listPost ?? '') &&
@@ -264,4 +264,14 @@ class EmailUtils {
: attachments.sublist(0, possibleDisplayedCount);
}
}
static String getDomainByEmailAddress(String emailAddress) {
try {
MailAddress mailAddress = MailAddress.validateAddress(emailAddress);
return mailAddress.domain.asString();
} catch (e) {
logError('EmailUtils::getDomainByEmailAddress:Exception is $e');
return '';
}
}
}