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
@@ -61,6 +61,7 @@ mixin ScenarioUtilsMixin {
session: mailboxDashBoardController.sessionCurrent!, session: mailboxDashBoardController.sessionCurrent!,
accountId: mailboxDashBoardController.accountId.value!, accountId: mailboxDashBoardController.accountId.value!,
emailActionType: EmailActionType.compose, emailActionType: EmailActionType.compose,
ownEmailAddress: mailboxDashBoardController.ownEmailAddress.value,
subject: provisioningEmail.subject, subject: provisioningEmail.subject,
emailContent: provisioningEmail.content, emailContent: provisioningEmail.content,
toRecipients: {EmailAddress(null, provisioningEmail.toEmail)}, toRecipients: {EmailAddress(null, provisioningEmail.toEmail)},
+2 -1
View File
@@ -421,11 +421,12 @@ abstract class BaseController extends GetxController
BuildContext context, BuildContext context,
Session? session, Session? session,
AccountId? accountId, AccountId? accountId,
String ownEmailAddress,
) { ) {
if (PlatformInfo.isMobile) { if (PlatformInfo.isMobile) {
showLogoutConfirmDialog( showLogoutConfirmDialog(
context: context, context: context,
userAddress: session?.getOwnEmailAddressOrEmpty() ?? '', userAddress: ownEmailAddress,
onConfirmAction: () => _handleLogoutAction(session, accountId), onConfirmAction: () => _handleLogoutAction(session, accountId),
); );
} else { } else {
@@ -0,0 +1,42 @@
import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
mixin OwnEmailAddressMixin {
static const String emptyOwnEmailAddress = '';
final RxString ownEmailAddress = RxString('');
Session? sessionCurrent;
void synchronizeOwnEmailAddress(String emailAddress) {
log('$runtimeType::synchronizeOwnEmailAddress:OwnEmailAddress = ${ownEmailAddress.value}, NewEmailAddress = $emailAddress');
if (ownEmailAddress.value.trim().isNotEmpty) return;
ownEmailAddress.value = emailAddress;
}
void updateOwnEmailAddressFromIdentities(List<Identity> listIdentities) {
if (ownEmailAddress.value.trim().isNotEmpty) return;
if (listIdentities.isEmpty) {
synchronizeOwnEmailAddress(emptyOwnEmailAddress);
ownEmailAddress.refresh();
return;
}
final identityEmailAddress = listIdentities.firstOrNull?.email ?? '';
final domain = EmailUtils.getDomainByEmailAddress(identityEmailAddress);
final userEmailAddress =
sessionCurrent?.generateOwnEmailAddressFromDomain(domain) ?? '';
log('$runtimeType::updateOwnEmailAddressFromIdentities: UserEmailAddress = $userEmailAddress');
if (userEmailAddress.isNotEmpty) {
synchronizeOwnEmailAddress(userEmailAddress);
} else {
synchronizeOwnEmailAddress(emptyOwnEmailAddress);
ownEmailAddress.refresh();
}
}
}
@@ -252,6 +252,9 @@ class ComposerController extends BaseController
TransformHtmlEmailContentInteractor get transformHtmlEmailContentInteractor => _transformHtmlEmailContentInteractor; TransformHtmlEmailContentInteractor get transformHtmlEmailContentInteractor => _transformHtmlEmailContentInteractor;
String get ownEmailAddress =>
mailboxDashBoardController.ownEmailAddress.value;
late Worker uploadInlineImageWorker; late Worker uploadInlineImageWorker;
late Worker dashboardViewStateWorker; late Worker dashboardViewStateWorker;
late bool _isEmailBodyLoaded; late bool _isEmailBodyLoaded;
@@ -521,6 +524,7 @@ class ComposerController extends BaseController
session: session, session: session,
accountId: accountId, accountId: accountId,
emailActionType: arguments.emailActionType, emailActionType: arguments.emailActionType,
ownEmailAddress: ownEmailAddress,
subject: subjectEmail.value ?? '', subject: subjectEmail.value ?? '',
emailContent: emailContent, emailContent: emailContent,
fromSender: arguments.presentationEmail?.from ?? {}, fromSender: arguments.presentationEmail?.from ?? {},
@@ -698,7 +702,7 @@ class ComposerController extends BaseController
required EmailActionType actionType, required EmailActionType actionType,
String? listPost, String? listPost,
}) { }) {
final senderEmailAddress = mailboxDashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(); final senderEmailAddress = ownEmailAddress;
final isSender = presentationEmail.from final isSender = presentationEmail.from
.asList() .asList()
.any((element) => element.emailAddress.isNotEmpty && element.emailAddress == senderEmailAddress); .any((element) => element.emailAddress.isNotEmpty && element.emailAddress == senderEmailAddress);
@@ -946,6 +950,7 @@ class ComposerController extends BaseController
session: session, session: session,
accountId: accountId, accountId: accountId,
emailActionType: arguments.emailActionType, emailActionType: arguments.emailActionType,
ownEmailAddress: ownEmailAddress,
subject: subjectEmail.value ?? '', subject: subjectEmail.value ?? '',
emailContent: emailContent, emailContent: emailContent,
fromSender: arguments.presentationEmail?.from ?? {}, fromSender: arguments.presentationEmail?.from ?? {},
@@ -2121,6 +2126,7 @@ class ComposerController extends BaseController
session: session, session: session,
accountId: accountId, accountId: accountId,
emailActionType: arguments.emailActionType, emailActionType: arguments.emailActionType,
ownEmailAddress: ownEmailAddress,
subject: subjectEmail.value ?? '', subject: subjectEmail.value ?? '',
emailContent: emailContent, emailContent: emailContent,
fromSender: arguments.presentationEmail?.from ?? {}, fromSender: arguments.presentationEmail?.from ?? {},
@@ -2171,6 +2177,7 @@ class ComposerController extends BaseController
session: mailboxDashBoardController.sessionCurrent!, session: mailboxDashBoardController.sessionCurrent!,
accountId: mailboxDashBoardController.accountId.value!, accountId: mailboxDashBoardController.accountId.value!,
emailActionType: composerArguments.value!.emailActionType, emailActionType: composerArguments.value!.emailActionType,
ownEmailAddress: ownEmailAddress,
subject: subjectEmail.value ?? '', subject: subjectEmail.value ?? '',
emailContent: emailContent, emailContent: emailContent,
fromSender: composerArguments.value!.presentationEmail?.from ?? {}, fromSender: composerArguments.value!.presentationEmail?.from ?? {},
@@ -8,6 +8,7 @@ import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/identity_extension.dart'; import 'package:model/extensions/identity_extension.dart';
import 'package:model/extensions/list_email_address_extension.dart'; import 'package:model/extensions/list_email_address_extension.dart';
import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/extensions/presentation_email_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/state/button_state.dart'; import 'package:tmail_ui_user/features/base/state/button_state.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
@@ -80,12 +81,18 @@ extension ComposerPrintDraftExtension on ComposerController {
pattern: currentTime.toPatternForPrinting(locale.toLanguageTag()), pattern: currentTime.toPatternForPrinting(locale.toLanguageTag()),
); );
} }
String accountDisplayName = ownEmailAddress;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName = mailboxDashBoardController
.sessionCurrent
?.getOwnEmailAddressOrUsername() ?? '';
}
log('ComposerPrintDraftExtension::_showPrintDraftsDialog:receiveTime = $receiveTime | emailActionType = $emailActionType'); log('ComposerPrintDraftExtension::_showPrintDraftsDialog:receiveTime = $receiveTime | emailActionType = $emailActionType');
final childWidget = PointerInterceptor( final childWidget = PointerInterceptor(
child: PrintDraftDialogView( child: PrintDraftDialogView(
emailPrint: DraftEmailPrint( emailPrint: DraftEmailPrint(
appName: appLocalizations.app_name, appName: appLocalizations.app_name,
userName: mailboxDashBoardController.ownEmailAddress.value, userName: accountDisplayName,
attachments: uploadController.allAttachmentsUploaded, attachments: uploadController.allAttachmentsUploaded,
emailContent: emailContent, emailContent: emailContent,
fromPrefix: appLocalizations.from_email_address_prefix, fromPrefix: appLocalizations.from_email_address_prefix,
@@ -10,7 +10,6 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/email/mail_priority_header.dart'; import 'package:model/email/mail_priority_header.dart';
import 'package:model/extensions/email_address_extension.dart'; import 'package:model/extensions/email_address_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.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/composer/presentation/extensions/identity_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/identity_extension.dart';
@@ -26,8 +25,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
Set<EmailAddress> createSenders() { Set<EmailAddress> createSenders() {
if (identity?.email?.isNotEmpty == true) { if (identity?.email?.isNotEmpty == true) {
return { identity!.toEmailAddress() }; return { identity!.toEmailAddress() };
} else if (session.getOwnEmailAddressOrEmpty().isNotEmpty) { } else if (ownEmailAddress.isNotEmpty) {
return { EmailAddress(null, session.getOwnEmailAddressOrEmpty()) }; return { EmailAddress(null, ownEmailAddress) };
} else { } else {
return {}; return {};
} }
@@ -36,8 +35,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
String createMdnEmailAddress() { String createMdnEmailAddress() {
if (emailActionType == EmailActionType.editDraft && fromSender?.isNotEmpty == true) { if (emailActionType == EmailActionType.editDraft && fromSender?.isNotEmpty == true) {
return fromSender!.first.emailAddress; return fromSender!.first.emailAddress;
} else if (session.getOwnEmailAddressOrEmpty().isNotEmpty) { } else if (ownEmailAddress.isNotEmpty) {
return session.getOwnEmailAddressOrEmpty(); return ownEmailAddress;
} else { } else {
return ''; return '';
} }
@@ -52,8 +51,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
return identity?.replyTo?.isNotEmpty == true return identity?.replyTo?.isNotEmpty == true
? identity!.replyTo! ? identity!.replyTo!
: session.getOwnEmailAddressOrEmpty().isNotEmpty : ownEmailAddress.isNotEmpty
? {EmailAddress(null, session.getOwnEmailAddressOrEmpty())} ? {EmailAddress(null, ownEmailAddress)}
: null; : null;
} }
@@ -16,6 +16,7 @@ class CreateEmailRequest with EquatableMixin {
final Session session; final Session session;
final AccountId accountId; final AccountId accountId;
final EmailActionType emailActionType; final EmailActionType emailActionType;
final String ownEmailAddress;
final String subject; final String subject;
final String emailContent; final String emailContent;
final bool hasRequestReadReceipt; final bool hasRequestReadReceipt;
@@ -51,6 +52,7 @@ class CreateEmailRequest with EquatableMixin {
required this.session, required this.session,
required this.accountId, required this.accountId,
required this.emailActionType, required this.emailActionType,
required this.ownEmailAddress,
required this.subject, required this.subject,
required this.emailContent, required this.emailContent,
this.fromSender, this.fromSender,
@@ -88,6 +90,7 @@ class CreateEmailRequest with EquatableMixin {
session, session,
accountId, accountId,
emailActionType, emailActionType,
ownEmailAddress,
subject, subject,
emailContent, emailContent,
fromSender, fromSender,
@@ -1513,7 +1513,11 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
return; return;
} }
final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session!.getOwnEmailAddressOrEmpty(); String receiverEmailAddress = _getReceiverEmailAddress(currentEmail!)
?? ownEmailAddress;
if (receiverEmailAddress.trim().isEmpty) {
receiverEmailAddress = session!.getOwnEmailAddressOrUsername();
}
log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress'); log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress');
final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress); final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress);
final sendReceiptRequest = SendReceiptToSenderRequest( final sendReceiptRequest = SendReceiptToSenderRequest(
@@ -1821,10 +1825,13 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
} }
_printEmailButtonState = ButtonState.disabled; _printEmailButtonState = ButtonState.disabled;
String accountDisplayName = ownEmailAddress;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName = session?.getOwnEmailAddressOrUsername() ?? '';
}
consumeState(emailActionReactor.printEmail( consumeState(emailActionReactor.printEmail(
email, email,
ownEmailAddress: mailboxDashBoardController.ownEmailAddress.value, ownEmailAddress: accountDisplayName,
emailLoaded: currentEmailLoaded.value!, emailLoaded: currentEmailLoaded.value!,
)); ));
} }
@@ -2324,8 +2331,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
listEmailAddressAttendees.addAll(listEmailAddress); listEmailAddressAttendees.addAll(listEmailAddress);
final currentUserEmail = mailboxDashBoardController.ownEmailAddress.value; final listEmailAddressMailTo =
final listEmailAddressMailTo = listEmailAddressAttendees.removeInvalidEmails(currentUserEmail); listEmailAddressAttendees.removeInvalidEmails(ownEmailAddress);
log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo'); log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo');
mailboxDashBoardController.openComposer( mailboxDashBoardController.openComposer(
ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo) ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo)
@@ -2341,8 +2348,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
} }
} }
String getOwnEmailAddress() => session?.getOwnEmailAddressOrEmpty() ?? '';
void onHtmlContentClippedAction(bool isClipped) { void onHtmlContentClippedAction(bool isClipped) {
log('SingleEmailController::onHtmlContentClippedAction:isClipped = $isClipped'); log('SingleEmailController::onHtmlContentClippedAction:isClipped = $isClipped');
isEmailContentClipped.value = isClipped; isEmailContentClipped.value = isClipped;
@@ -89,7 +89,7 @@ class EmailView extends GetWidget<SingleEmailController> {
position: position, position: position,
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths, imagePaths: controller.imagePaths,
username: controller.session?.username, ownEmailAddress: controller.ownEmailAddress,
handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action), handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action),
additionalActions: [], additionalActions: [],
emailIsRead: presentationEmail.hasRead, emailIsRead: presentationEmail.hasRead,
@@ -163,7 +163,7 @@ class EmailView extends GetWidget<SingleEmailController> {
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
emailLoaded: emailLoaded, emailLoaded: emailLoaded,
presentationEmail: currentEmail, presentationEmail: currentEmail,
userName: controller.getOwnEmailAddress(), userName: controller.ownEmailAddress,
emailActionCallback: controller.pressEmailAction, emailActionCallback: controller.pressEmailAction,
); );
}), }),
@@ -261,7 +261,7 @@ class EmailView extends GetWidget<SingleEmailController> {
position: position, position: position,
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths, imagePaths: controller.imagePaths,
username: controller.session?.username, ownEmailAddress: controller.ownEmailAddress,
handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action), handleEmailAction: (email, action) => controller.handleEmailAction(context, email, action),
additionalActions: [ additionalActions: [
EmailActionType.reply, EmailActionType.reply,
@@ -310,10 +310,7 @@ class EmailView extends GetWidget<SingleEmailController> {
), ),
calendarEventReplying: controller.calendarEventProcessing, calendarEventReplying: controller.calendarEventProcessing,
attendanceStatus: controller.attendanceStatus.value, attendanceStatus: controller.attendanceStatus.value,
ownEmailAddress: controller ownEmailAddress: controller.ownEmailAddress,
.mailboxDashBoardController
.ownEmailAddress
.value,
onMailtoAttendeesAction: controller.handleMailToAttendees, onMailtoAttendeesAction: controller.handleMailToAttendees,
openEmailAddressDetailAction: (_, emailAddress) => controller.openEmailAddressDialog(emailAddress), openEmailAddressDetailAction: (_, emailAddress) => controller.openEmailAddressDialog(emailAddress),
isFree: controller.isCalendarEventFree, isFree: controller.isCalendarEventFree,
@@ -20,7 +20,6 @@ import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.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/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.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
@@ -524,7 +523,7 @@ class EmailActionReactor {
required RelativeRect? position, required RelativeRect? position,
required ResponsiveUtils responsiveUtils, required ResponsiveUtils responsiveUtils,
required ImagePaths imagePaths, required ImagePaths imagePaths,
required UserName? username, required String ownEmailAddress,
required void Function( required void Function(
PresentationEmail presentationEmail, PresentationEmail presentationEmail,
EmailActionType action, EmailActionType action,
@@ -541,7 +540,7 @@ class EmailActionReactor {
EmailActionType.reply, EmailActionType.reply,
if (additionalActions.contains(EmailActionType.forward)) if (additionalActions.contains(EmailActionType.forward))
EmailActionType.forward, EmailActionType.forward,
if (presentationEmail.getCountMailAddressWithoutMe(username?.value ?? '') > 1 && if (presentationEmail.getCountMailAddressWithoutMe(ownEmailAddress) > 1 &&
additionalActions.contains(EmailActionType.replyAll)) additionalActions.contains(EmailActionType.replyAll))
EmailActionType.replyAll, EmailActionType.replyAll,
if (EmailUtils.isReplyToListEnabled(presentationEmail.listPost ?? '') && if (EmailUtils.isReplyToListEnabled(presentationEmail.listPost ?? '') &&
@@ -264,4 +264,14 @@ class EmailUtils {
: attachments.sublist(0, possibleDisplayedCount); : 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 '';
}
}
} }
@@ -271,7 +271,7 @@ class EmailPreviewerController extends ReloadableController {
consumeState(_previewEmailFromEmlFileInteractor.execute( consumeState(_previewEmailFromEmlFileInteractor.execute(
PreviewEmailEMLRequest( PreviewEmailEMLRequest(
accountId: _accountId!, accountId: _accountId!,
ownEmailAddress: _session!.getOwnEmailAddressOrEmpty(), ownEmailAddress: _session!.getOwnEmailAddressOrUsername(),
blobId: success.blobId, blobId: success.blobId,
email: success.email, email: success.email,
locale: Localizations.localeOf(currentContext!), locale: Localizations.localeOf(currentContext!),
@@ -359,12 +359,12 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
.toSet() .toSet()
.toList(); .toList();
if(session?.getOwnEmailAddressOrEmpty().isNotEmpty == true final ownEmailAddress = arguments?.ownerEmailAddress ?? '';
&& !listEmailAddressDefault.any((emailAddress) => emailAddress.email == session?.getOwnEmailAddressOrEmpty())) { final isOwnEmailAddressInList = listEmailAddressDefault
listEmailAddressDefault.add(EmailAddress( .any((emailAddress) => emailAddress.email == ownEmailAddress);
null,
session?.getOwnEmailAddressOrEmpty(), if (ownEmailAddress.isNotEmpty && !isOwnEmailAddressInList) {
)); listEmailAddressDefault.add(EmailAddress(null, ownEmailAddress));
} }
listEmailAddressOfReplyTo.add(noneEmailAddress); listEmailAddressOfReplyTo.add(noneEmailAddress);
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault); listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
@@ -385,11 +385,9 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
void _setDefaultEmailAddressList() { void _setDefaultEmailAddressList() {
listEmailAddressOfReplyTo.add(noneEmailAddress); listEmailAddressOfReplyTo.add(noneEmailAddress);
if (session?.getOwnEmailAddressOrEmpty().isNotEmpty == true) { final ownEmailAddress = arguments?.ownerEmailAddress ?? '';
final userEmailAddress = EmailAddress( if (ownEmailAddress.isNotEmpty) {
null, final userEmailAddress = EmailAddress(null, ownEmailAddress);
session?.getOwnEmailAddressOrEmpty(),
);
listEmailAddressDefault.add(userEmailAddress); listEmailAddressDefault.add(userEmailAddress);
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault); listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
} }
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/public_asset/domain/model/public_assets_i
class IdentityCreatorArguments with EquatableMixin { class IdentityCreatorArguments with EquatableMixin {
final AccountId accountId; final AccountId accountId;
final Session session; final Session session;
final String ownerEmailAddress;
final IdentityActionType actionType; final IdentityActionType actionType;
final PublicAssetsInIdentityArguments? publicAssetsInIdentityArguments; final PublicAssetsInIdentityArguments? publicAssetsInIdentityArguments;
final bool? isDefault; final bool? isDefault;
@@ -17,6 +18,7 @@ class IdentityCreatorArguments with EquatableMixin {
IdentityCreatorArguments( IdentityCreatorArguments(
this.accountId, this.accountId,
this.session, this.session,
this.ownerEmailAddress,
{ {
this.identity, this.identity,
this.publicAssetsInIdentityArguments, this.publicAssetsInIdentityArguments,
@@ -4,6 +4,7 @@ import 'package:core/presentation/views/list/tree_view.dart';
import 'package:core/utils/platform_info.dart'; import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/expand_mode.dart'; import 'package:model/mailbox/expand_mode.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
@@ -34,7 +35,10 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
final dashboardController = controller.mailboxDashBoardController; final dashboardController = controller.mailboxDashBoardController;
final accountId = dashboardController.accountId.value; final accountId = dashboardController.accountId.value;
final session = dashboardController.sessionCurrent; final session = dashboardController.sessionCurrent;
final username = dashboardController.ownEmailAddress.value; String username = dashboardController.ownEmailAddress.value;
if (username.trim().isEmpty) {
username = session?.getOwnEmailAddressOrUsername() ?? '';
}
final linagoraApps = dashboardController final linagoraApps = dashboardController
.appGridDashboardController .appGridDashboardController
@@ -31,6 +31,7 @@ import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart'; import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
import 'package:tmail_ui_user/features/base/mixin/own_email_address_mixin.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart'; import 'package:tmail_ui_user/features/composer/domain/extensions/email_request_extension.dart';
@@ -126,7 +127,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/reopen_composer_cache_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/reopen_composer_cache_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_own_email_address_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
@@ -203,7 +203,7 @@ import 'package:server_settings/server_settings/tmail_server_settings_extension.
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
class MailboxDashBoardController extends ReloadableController class MailboxDashBoardController extends ReloadableController
with ContactSupportMixin { with ContactSupportMixin, OwnEmailAddressMixin {
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>(); final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>(); final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
@@ -285,9 +285,7 @@ class MailboxDashBoardController extends ReloadableController
final isDrawerOpened = RxBool(false); final isDrawerOpened = RxBool(false);
final isContextMenuOpened = RxBool(false); final isContextMenuOpened = RxBool(false);
final isPopupMenuOpened = RxBool(false); final isPopupMenuOpened = RxBool(false);
final ownEmailAddress = RxString('');
Session? sessionCurrent;
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {}; Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
Map<MailboxId, PresentationMailbox> mapMailboxById = {}; Map<MailboxId, PresentationMailbox> mapMailboxById = {};
final emailsInCurrentMailbox = <PresentationEmail>[].obs; final emailsInCurrentMailbox = <PresentationEmail>[].obs;
@@ -1986,6 +1984,7 @@ class MailboxDashBoardController extends ReloadableController
return searchController.quickSearchEmails( return searchController.quickSearchEmails(
session: sessionCurrent!, session: sessionCurrent!,
accountId: accountId.value!, accountId: accountId.value!,
ownEmailAddress: ownEmailAddress.value,
query: query query: query
); );
} else { } else {
@@ -3226,7 +3225,7 @@ class MailboxDashBoardController extends ReloadableController
void _handleGetAllIdentitiesFailure() { void _handleGetAllIdentitiesFailure() {
_identities = null; _identities = null;
synchronizeOwnEmailAddress(sessionCurrent?.getUserDisplayName() ?? ''); updateOwnEmailAddressFromIdentities([]);
} }
List<Identity> get listIdentities => _identities ?? []; List<Identity> get listIdentities => _identities ?? [];
@@ -17,7 +17,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/email_filter_condition_extension.dart'; import 'package:model/extensions/email_filter_condition_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart';
@@ -91,6 +90,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
Future<List<PresentationEmail>> quickSearchEmails({ Future<List<PresentationEmail>> quickSearchEmails({
required Session session, required Session session,
required AccountId accountId, required AccountId accountId,
required String ownEmailAddress,
required String query, required String query,
}) async { }) async {
currentSearchText = query; currentSearchText = query;
@@ -102,7 +102,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
EmailComparator(EmailComparatorProperty.receivedAt) EmailComparator(EmailComparatorProperty.receivedAt)
..setIsAscending(false)), ..setIsAscending(false)),
filter: _mappingToFilterOnSuggestionForm( filter: _mappingToFilterOnSuggestionForm(
currentUserEmail: session.getOwnEmailAddressOrEmpty(), currentUserEmail: ownEmailAddress,
query: query, query: query,
), ),
properties: EmailUtils.getPropertiesForEmailGetMethod(session, accountId), properties: EmailUtils.getPropertiesForEmailGetMethod(session, accountId),
@@ -127,7 +127,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
hasAttachment: listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) hasAttachment: listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment)
? true ? true
: null, : null,
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) && currentUserEmail.isNotEmpty
? currentUserEmail ? currentUserEmail
: null, : null,
hasKeyword: listFilterOnSuggestionForm.contains(QuickSearchFilter.starred) hasKeyword: listFilterOnSuggestionForm.contains(QuickSearchFilter.starred)
@@ -140,7 +140,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
: null; : null;
} }
void applyFilterSuggestionToSearchFilter(String? currentUserEmail) { void applyFilterSuggestionToSearchFilter(String currentUserEmail) {
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days) final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
? EmailReceiveTimeType.last7Days ? EmailReceiveTimeType.last7Days
: EmailReceiveTimeType.allTime; : EmailReceiveTimeType.allTime;
@@ -148,7 +148,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false; final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
var listFromAddress = searchEmailFilter.value.from; var listFromAddress = searchEmailFilter.value.from;
if (currentUserEmail != null) { if (currentUserEmail.isNotEmpty) {
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) { if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
listFromAddress.add(currentUserEmail); listFromAddress.add(currentUserEmail);
} else { } else {
@@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
@@ -10,7 +11,12 @@ extension HandleProfileSettingActionTypeClickExtension on MailboxDashBoardContro
}) { }) {
switch (actionType) { switch (actionType) {
case ProfileSettingActionType.signOut: case ProfileSettingActionType.signOut:
logout(context, sessionCurrent, accountId.value); String accountDisplayName = ownEmailAddress.value;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName =
sessionCurrent?.getOwnEmailAddressOrUsername() ?? '';
}
logout(context, sessionCurrent, accountId.value, accountDisplayName);
break; break;
case ProfileSettingActionType.manageAccount: case ProfileSettingActionType.manageAccount:
goToSettings(); goToSettings();
@@ -1,24 +0,0 @@
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
extension UpdateOwnEmailAddressExtension on MailboxDashBoardController {
void synchronizeOwnEmailAddress(String emailAddress) {
log('UpdateOwnEmailAddressExtension::synchronizeOwnEmailAddress:OwnEmailAddress = ${ownEmailAddress.value}, NewEmailAddress = $emailAddress');
if (ownEmailAddress.value.isNotEmpty || emailAddress.isEmpty) return;
ownEmailAddress.value = emailAddress;
}
void updateOwnEmailAddressFromIdentities(List<Identity> listIdentities) {
final identityEmailAddress = listIdentities.firstOrNull?.email ?? '';
if (identityEmailAddress.isNotEmpty) {
synchronizeOwnEmailAddress(identityEmailAddress);
} else {
synchronizeOwnEmailAddress(sessionCurrent?.getUserDisplayName() ?? '');
}
}
}
@@ -81,15 +81,20 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return Obx(() { return Obx(() {
final accountId = controller.accountId.value; final accountId = controller.accountId.value;
final ownEmailAddress = controller.ownEmailAddress.value; String accountDisplayName = controller.ownEmailAddress.value;
final contactSupportCapability = accountId != null final contactSupportCapability = accountId != null
? controller.sessionCurrent?.getContactSupportCapability(accountId) ? controller.sessionCurrent?.getContactSupportCapability(accountId)
: null; : null;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName = controller
.sessionCurrent
?.getOwnEmailAddressOrUsername() ?? '';
}
return NavigationBarWidget( return NavigationBarWidget(
imagePaths: controller.imagePaths, imagePaths: controller.imagePaths,
accountId: accountId, accountId: accountId,
ownEmailAddress: ownEmailAddress, ownEmailAddress: accountDisplayName,
contactSupportCapability: contactSupportCapability, contactSupportCapability: contactSupportCapability,
searchForm: SearchInputFormWidget(), searchForm: SearchInputFormWidget(),
appGridController: appGridController:
@@ -151,8 +156,15 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
), ),
const Spacer(), const Spacer(),
Obx(() { Obx(() {
String accountDisplayName =
controller.ownEmailAddress.value;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName = controller
.sessionCurrent
?.getOwnEmailAddressOrUsername() ?? '';
}
return ProfileSettingIcon( return ProfileSettingIcon(
ownEmailAddress: controller.ownEmailAddress.value, ownEmailAddress: accountDisplayName,
settingActionTypes: ProfileSettingActionType.values, settingActionTypes: ProfileSettingActionType.values,
onProfileSettingActionTypeClick: (actionType) => onProfileSettingActionTypeClick: (actionType) =>
controller.handleProfileSettingActionTypeClick( controller.handleProfileSettingActionTypeClick(
@@ -17,7 +17,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
@@ -173,7 +172,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
sortOrderType: _dashBoardController.currentSortOrder, sortOrderType: _dashBoardController.currentSortOrder,
); );
_searchController.applyFilterSuggestionToSearchFilter( _searchController.applyFilterSuggestionToSearchFilter(
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(), _dashBoardController.ownEmailAddress.value,
); );
_dashBoardController.searchEmailByQueryString(queryString); _dashBoardController.searchEmailByQueryString(queryString);
} else { } else {
@@ -213,7 +212,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
sortOrderType: _dashBoardController.currentSortOrder, sortOrderType: _dashBoardController.currentSortOrder,
); );
_searchController.applyFilterSuggestionToSearchFilter( _searchController.applyFilterSuggestionToSearchFilter(
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(), _dashBoardController.ownEmailAddress.value,
); );
_dashBoardController.searchEmailByQueryString(recent.value); _dashBoardController.searchEmailByQueryString(recent.value);
} }
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
@@ -10,7 +11,12 @@ extension HandleProfileSettingActionTypeClickExtension on ManageAccountDashBoard
}) { }) {
switch (actionType) { switch (actionType) {
case ProfileSettingActionType.signOut: case ProfileSettingActionType.signOut:
logout(context, sessionCurrent, accountId.value); String accountDisplayName = ownEmailAddress.value;
if (accountDisplayName.trim().isEmpty) {
accountDisplayName =
sessionCurrent?.getOwnEmailAddressOrUsername() ?? '';
}
logout(context, sessionCurrent, accountId.value, accountDisplayName);
break; break;
default: default:
break; break;
@@ -1,24 +0,0 @@
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
extension UpdateOwnEmailAddressExtension on ManageAccountDashBoardController {
void synchronizeOwnEmailAddress(String emailAddress) {
log('UpdateOwnEmailAddressExtension::synchronizeOwnEmailAddress:OwnEmailAddress = ${ownEmailAddress.value}, NewEmailAddress = $emailAddress');
if (ownEmailAddress.value.isNotEmpty || emailAddress.isEmpty) return;
ownEmailAddress.value = emailAddress;
}
void updateOwnEmailAddressFromIdentities(List<Identity> listIdentities) {
final identityEmailAddress = listIdentities.firstOrNull?.email ?? '';
if (identityEmailAddress.isNotEmpty) {
synchronizeOwnEmailAddress(identityEmailAddress);
} else {
synchronizeOwnEmailAddress(sessionCurrent?.getUserDisplayName() ?? '');
}
}
}
@@ -11,7 +11,6 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart
import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:model/extensions/identity_request_dto_extension.dart'; import 'package:model/extensions/identity_request_dto_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/base/before_reconnect_handler.dart'; import 'package:tmail_ui_user/features/base/before_reconnect_handler.dart';
import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart'; import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart'; import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
@@ -40,7 +39,6 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_ident
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_list_signature_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_list_signature_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/update_own_email_address_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/list_identity_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/list_identity_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
@@ -142,6 +140,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
void handleFailureViewState(Failure failure) { void handleFailureViewState(Failure failure) {
if (failure is GetAllIdentitiesFailure) { if (failure is GetAllIdentitiesFailure) {
identitiesViewState.value = Left(failure); identitiesViewState.value = Left(failure);
accountDashBoardController.updateOwnEmailAddressFromIdentities([]);
} else if (failure is DeleteIdentityFailure) { } else if (failure is DeleteIdentityFailure) {
_deleteIdentityFailure(failure); _deleteIdentityFailure(failure);
} else if (failure is RemoveIdentityFromPublicAssetsFailureState) { } else if (failure is RemoveIdentityFromPublicAssetsFailureState) {
@@ -150,10 +149,6 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
_deleteIdentityAction(failure.identityId); _deleteIdentityAction(failure.identityId);
} else if (failure is GetIdentityCacheOnWebFailure) { } else if (failure is GetIdentityCacheOnWebFailure) {
_removeIdentityCache(); _removeIdentityCache();
} else if (failure is GetAllIdentitiesFailure) {
accountDashBoardController.synchronizeOwnEmailAddress(
accountDashBoardController.sessionCurrent?.getUserDisplayName() ?? '',
);
} else if (failure is TransformListSignatureFailure) { } else if (failure is TransformListSignatureFailure) {
signatureViewState.value = Left(failure); signatureViewState.value = Left(failure);
_syncMapIdentitySignatures(failure.identitySignatures); _syncMapIdentitySignatures(failure.identitySignatures);
@@ -228,7 +223,11 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
final accountId = accountDashBoardController.accountId.value; final accountId = accountDashBoardController.accountId.value;
final session = accountDashBoardController.sessionCurrent; final session = accountDashBoardController.sessionCurrent;
if (accountId != null && session != null) { if (accountId != null && session != null) {
final arguments = IdentityCreatorArguments(accountId, session); final arguments = IdentityCreatorArguments(
accountId,
session,
accountDashBoardController.ownEmailAddress.value,
);
newIdentityArguments = PlatformInfo.isWeb newIdentityArguments = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments) ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
@@ -378,6 +377,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
final arguments = IdentityCreatorArguments( final arguments = IdentityCreatorArguments(
accountId, accountId,
session, session,
accountDashBoardController.ownEmailAddress.value,
identity: identity, identity: identity,
actionType: IdentityActionType.edit); actionType: IdentityActionType.edit);
@@ -474,6 +474,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
final arguments = IdentityCreatorArguments( final arguments = IdentityCreatorArguments(
accountId, accountId,
session, session,
accountDashBoardController.ownEmailAddress.value,
identity: identityCache.identity, identity: identityCache.identity,
isDefault: identityCache.isDefault, isDefault: identityCache.isDefault,
publicAssetsInIdentityArguments: identityCache.publicAssetsInIdentityArguments, publicAssetsInIdentityArguments: identityCache.publicAssetsInIdentityArguments,
@@ -14,6 +14,7 @@ import 'package:model/model.dart';
import 'package:rule_filter/rule_filter/capability_rule_filter.dart'; import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
import 'package:server_settings/server_settings/capability_server_settings.dart'; import 'package:server_settings/server_settings/capability_server_settings.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/mixin/own_email_address_mixin.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/base/widget/dialog_picker/color_dialog_picker.dart'; import 'package:tmail_ui_user/features/base/widget/dialog_picker/color_dialog_picker.dart';
import 'package:tmail_ui_user/features/base/widget/dialog_picker/date_time_dialog_picker.dart'; import 'package:tmail_ui_user/features/base/widget/dialog_picker/date_time_dialog_picker.dart';
@@ -26,7 +27,6 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vac
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/update_own_email_address_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_bindings.dart';
@@ -46,7 +46,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart';
class ManageAccountDashBoardController extends ReloadableController { class ManageAccountDashBoardController extends ReloadableController
with OwnEmailAddressMixin {
GetAllVacationInteractor? _getAllVacationInteractor; GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor; UpdateVacationInteractor? _updateVacationInteractor;
@@ -56,9 +57,7 @@ class ManageAccountDashBoardController extends ReloadableController {
final settingsPageLevel = SettingsPageLevel.universal.obs; final settingsPageLevel = SettingsPageLevel.universal.obs;
final vacationResponse = Rxn<VacationResponse>(); final vacationResponse = Rxn<VacationResponse>();
final dashboardSettingAction = Rxn<UIAction>(); final dashboardSettingAction = Rxn<UIAction>();
final ownEmailAddress = Rx<String>('');
Session? sessionCurrent;
Uri? previousUri; Uri? previousUri;
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete; int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
@@ -5,6 +5,7 @@ import 'package:cozy/cozy_config_manager/cozy_config_manager.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart'; import 'package:flutter_portal/flutter_portal.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/navigation_bar/navigation_bar_widget.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
@@ -40,25 +41,36 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
desktop: Column(children: [ desktop: Column(children: [
FutureBuilder( FutureBuilder(
future: CozyConfigManager().isInsideCozy, future: CozyConfigManager().isInsideCozy,
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.data == true) return const SizedBox.shrink(); if (snapshot.data == true) return const SizedBox.shrink();
return Obx(() => NavigationBarWidget( return Obx(() {
imagePaths: controller.imagePaths, final accountId = controller.accountId.value;
accountId: controller.accountId.value, String accountDisplayName = controller.ownEmailAddress.value;
ownEmailAddress: controller.ownEmailAddress.value,
onTapApplicationLogoAction: () => if (accountDisplayName.trim().isEmpty) {
controller.backToMailboxDashBoard(context: context), accountDisplayName = controller
settingActionTypes: const [ProfileSettingActionType.signOut], .sessionCurrent
onProfileSettingActionTypeClick: (actionType) => ?.getOwnEmailAddressOrUsername() ?? '';
controller.handleProfileSettingActionTypeClick( }
context: context,
actionType: actionType, return NavigationBarWidget(
), imagePaths: controller.imagePaths,
)); accountId: accountId,
} ownEmailAddress: accountDisplayName,
), onTapApplicationLogoAction: () =>
controller.backToMailboxDashBoard(context: context),
settingActionTypes: const [ProfileSettingActionType.signOut],
onProfileSettingActionTypeClick: (actionType) =>
controller.handleProfileSettingActionTypeClick(
context: context,
actionType: actionType,
),
);
});
},
),
Expanded(child: Row( Expanded(child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@@ -6,6 +6,8 @@ import 'package:core/utils/direction_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_profile_setting_action_type_click_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
@@ -140,11 +142,11 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
top: 4, top: 4,
), ),
onSelectAccountMenuItemAction: (_) { onSelectAccountMenuItemAction: (_) {
controller.dashBoardController.logout( controller.dashBoardController
context, .handleProfileSettingActionTypeClick(
controller.dashBoardController.sessionCurrent, context: context,
controller.dashBoardController.accountId.value, actionType: ProfileSettingActionType.signOut,
); );
} }
), ),
] ]
@@ -2,8 +2,11 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/utils/platform_info.dart'; import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart'; import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_profile_setting_action_type_click_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart';
@@ -19,17 +22,27 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
return SingleChildScrollView( return SingleChildScrollView(
key: const Key('setting_menu'), key: const Key('setting_menu'),
child: Column(children: [ child: Column(children: [
Obx(() => UserInformationWidget( Obx(() {
ownEmailAddress: controller String accountDisplayName = controller
.manageAccountDashboardController .manageAccountDashboardController
.ownEmailAddress .ownEmailAddress
.value, .value;
padding: SettingsUtils.getPaddingInFirstLevel(
context, if (accountDisplayName.trim().isEmpty) {
controller.responsiveUtils, accountDisplayName = controller
), .manageAccountDashboardController
titlePadding: const EdgeInsetsDirectional.only(start: 16), .sessionCurrent
)), ?.getOwnEmailAddressOrUsername() ?? '';
}
return UserInformationWidget(
ownEmailAddress: accountDisplayName,
padding: SettingsUtils.getPaddingInFirstLevel(
context,
controller.responsiveUtils,
),
titlePadding: const EdgeInsetsDirectional.only(start: 16),
);
}),
Divider( Divider(
color: AppColor.colorDividerHorizontal, color: AppColor.colorDividerHorizontal,
height: 1, height: 1,
@@ -222,10 +235,12 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
SettingFirstLevelTileBuilder( SettingFirstLevelTileBuilder(
AppLocalizations.of(context).sign_out, AppLocalizations.of(context).sign_out,
controller.imagePaths.icSignOut, controller.imagePaths.icSignOut,
() => controller.manageAccountDashboardController.logout( () => controller
context, .manageAccountDashboardController
controller.manageAccountDashboardController.sessionCurrent, .handleProfileSettingActionTypeClick(
controller.manageAccountDashboardController.accountId.value) context: context,
actionType: ProfileSettingActionType.signOut,
)
), ),
]), ]),
); );
@@ -121,6 +121,8 @@ class SearchEmailController extends BaseController
Session? get session => mailboxDashBoardController.sessionCurrent; Session? get session => mailboxDashBoardController.sessionCurrent;
String get ownEmailAddress => mailboxDashBoardController.ownEmailAddress.value;
SearchQuery? get searchQuery => searchEmailFilter.value.text; SearchQuery? get searchQuery => searchEmailFilter.value.text;
RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch; RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch;
@@ -307,7 +307,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
final searchEmailFilter = controller.searchEmailFilter.value; final searchEmailFilter = controller.searchEmailFilter.value;
final sortOrderType = controller.emailSortOrderType.value; final sortOrderType = controller.emailSortOrderType.value;
final listAddressOfFrom = controller.listAddressOfFromFiltered; final listAddressOfFrom = controller.listAddressOfFromFiltered;
final currentUserEmail = controller.session?.getOwnEmailAddressOrEmpty(); final currentUserEmail = controller.ownEmailAddress;
final startDate = controller.startDateFiltered; final startDate = controller.startDateFiltered;
final endDate = controller.endDateFiltered; final endDate = controller.endDateFiltered;
final receiveTimeType = controller.receiveTimeFiltered; final receiveTimeType = controller.receiveTimeFiltered;
@@ -124,8 +124,8 @@ extension HandleRefreshThreadDetailAction on ThreadDetailController {
return true; return true;
} }
return ownEmailAddress != null && return ownEmailAddress.isNotEmpty &&
(!email.fromMe(ownEmailAddress!) || (!email.fromMe(ownEmailAddress) ||
!email.recipientsHasMe(ownEmailAddress!)); !email.recipientsHasMe(ownEmailAddress));
} }
} }
@@ -16,7 +16,6 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_property.dart'; import 'package:model/email/email_property.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/keyword_identifier_extension.dart'; import 'package:model/extensions/keyword_identifier_extension.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart';
@@ -107,7 +106,7 @@ class ThreadDetailController extends BaseController {
session!, session!,
accountId!, accountId!,
sentMailboxId!, sentMailboxId!,
ownEmailAddress!, ownEmailAddress,
isSentMailbox: value.isSentMailbox, isSentMailbox: value.isSentMailbox,
)); ));
} }
@@ -130,7 +129,10 @@ class ThreadDetailController extends BaseController {
MailboxId? get sentMailboxId => mailboxDashBoardController.getMailboxIdByRole( MailboxId? get sentMailboxId => mailboxDashBoardController.getMailboxIdByRole(
PresentationMailbox.roleSent, PresentationMailbox.roleSent,
); );
String? get ownEmailAddress => session?.getOwnEmailAddress();
String get ownEmailAddress =>
mailboxDashBoardController.ownEmailAddress.value;
bool get isSearchRunning { bool get isSearchRunning {
final isWebSearchRunning = mailboxDashBoardController final isWebSearchRunning = mailboxDashBoardController
.searchController .searchController
@@ -217,7 +219,7 @@ class ThreadDetailController extends BaseController {
session != null && session != null &&
accountId != null && accountId != null &&
sentMailboxId != null && sentMailboxId != null &&
ownEmailAddress != null && ownEmailAddress.isNotEmpty &&
networkConnected && networkConnected &&
isThreadDetailEnabled; isThreadDetailEnabled;
} }
@@ -6,7 +6,6 @@ import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/email_view_app_bar_widget_styles.dart'; import 'package:tmail_ui_user/features/email/presentation/styles/email_view_app_bar_widget_styles.dart';
@@ -175,7 +174,7 @@ class ThreadDetailView extends GetWidget<ThreadDetailController> {
responsiveUtils: controller.responsiveUtils, responsiveUtils: controller.responsiveUtils,
emailLoaded: currentEmailLoaded, emailLoaded: currentEmailLoaded,
presentationEmail: expandedPresentationEmail, presentationEmail: expandedPresentationEmail,
userName: controller.session?.getOwnEmailAddress() ?? '', userName: controller.ownEmailAddress,
emailActionCallback: (action, email) { emailActionCallback: (action, email) {
controller.mailboxDashBoardController controller.mailboxDashBoardController
..dispatchEmailUIAction(PerformEmailActionInThreadDetailAction( ..dispatchEmailUIAction(PerformEmailActionInThreadDetailAction(
@@ -129,6 +129,26 @@ extension SessionExtension on Session {
return null; return null;
} }
String generateOwnEmailAddressFromDomain(String domain) {
try {
final userName = username.value;
if (domain.trim().isEmpty || userName.trim().isEmpty) return '';
if (userName.endsWith(domain)) return userName;
return '$userName@$domain';
} catch (e) {
logError('$runtimeType::generateOwnEmailAddressFromDomain: Exception: $e');
return '';
}
}
String getOwnEmailAddressOrUsername() {
final emailAddress = getOwnEmailAddressOrEmpty();
if (emailAddress.isNotEmpty) return emailAddress;
return getUserDisplayName();
}
JmapAccount get personalAccount { JmapAccount get personalAccount {
if (accounts.isNotEmpty) { if (accounts.isNotEmpty) {
final listPersonalAccount = accounts.entries final listPersonalAccount = accounts.entries
@@ -61,6 +61,7 @@ void main() {
when(mockCreateEmailRequest.session).thenReturn(mockSession); when(mockCreateEmailRequest.session).thenReturn(mockSession);
when(mockCreateEmailRequest.identity).thenReturn(mockIdentity); when(mockCreateEmailRequest.identity).thenReturn(mockIdentity);
when(mockCreateEmailRequest.replyToRecipients).thenReturn({}); when(mockCreateEmailRequest.replyToRecipients).thenReturn({});
when(mockCreateEmailRequest.ownEmailAddress).thenReturn('test@example.com');
repository = ComposerRepositoryImpl( repository = ComposerRepositoryImpl(
mockAttachmentUploadDataSource, mockAttachmentUploadDataSource,
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/annotations.dart'; import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_save_email_to_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
@@ -41,6 +42,9 @@ void main() {
session: SessionFixtures.aliceSession, session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId, accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft, emailActionType: EmailActionType.editDraft,
ownEmailAddress: SessionFixtures
.aliceSession
.getOwnEmailAddressOrEmpty(),
subject: 'subject', subject: 'subject',
emailContent: 'emailContent', emailContent: 'emailContent',
draftsEmailId: EmailId(Id('some-id')) draftsEmailId: EmailId(Id('some-id'))
@@ -81,6 +85,9 @@ void main() {
session: SessionFixtures.aliceSession, session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId, accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft, emailActionType: EmailActionType.editDraft,
ownEmailAddress: SessionFixtures
.aliceSession
.getOwnEmailAddressOrEmpty(),
subject: 'subject', subject: 'subject',
emailContent: 'emailContent', emailContent: 'emailContent',
); );
@@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:mockito/annotations.dart'; import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart'; import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/create_new_and_send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
@@ -32,6 +33,9 @@ void main() {
session: SessionFixtures.aliceSession, session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId, accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft, emailActionType: EmailActionType.editDraft,
ownEmailAddress: SessionFixtures
.aliceSession
.getOwnEmailAddressOrEmpty(),
subject: 'subject', subject: 'subject',
emailContent: 'emailContent', emailContent: 'emailContent',
); );
@@ -22,6 +22,7 @@ import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:model/email/attachment.dart'; import 'package:model/email/attachment.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/extensions/session_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/rich_text_composer.dart';
import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart'; import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart';
@@ -106,6 +107,9 @@ class MockMailboxDashBoardController extends Mock implements MailboxDashBoardCon
@override @override
Session? get sessionCurrent => SessionFixtures.aliceSession; Session? get sessionCurrent => SessionFixtures.aliceSession;
@override
RxString get ownEmailAddress => SessionFixtures.aliceSession.getOwnEmailAddressOrEmpty().obs;
@override @override
Rxn<DraggableAppState> get attachmentDraggableAppState => Rxn(DraggableAppState.inActive); Rxn<DraggableAppState> get attachmentDraggableAppState => Rxn(DraggableAppState.inActive);
@override @override
@@ -13,6 +13,9 @@ void main() {
session: SessionFixtures.aliceSession, session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId, accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft, emailActionType: EmailActionType.editDraft,
ownEmailAddress: SessionFixtures
.aliceSession
.getOwnEmailAddressOrEmpty(),
subject: 'subject', subject: 'subject',
emailContent: 'emailContent', emailContent: 'emailContent',
); );
@@ -67,6 +70,9 @@ void main() {
session: SessionFixtures.aliceSession, session: SessionFixtures.aliceSession,
accountId: AccountFixtures.aliceAccountId, accountId: AccountFixtures.aliceAccountId,
emailActionType: EmailActionType.editDraft, emailActionType: EmailActionType.editDraft,
ownEmailAddress: SessionFixtures
.aliceSession
.getOwnEmailAddressOrEmpty(),
subject: 'subject', subject: 'subject',
emailContent: 'emailContent', emailContent: 'emailContent',
hasRequestReadReceipt: true, hasRequestReadReceipt: true,
@@ -196,6 +196,7 @@ void main() {
{}, {},
{accountId: account}, {accountId: account},
{}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value')); {}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value'));
String ownEmailAddress = 'user@example.com';
test( test(
'should call deletePublicAssetsInteractor.execute() ' 'should call deletePublicAssetsInteractor.execute() '
@@ -213,7 +214,11 @@ void main() {
{}, {},
{accountId: account}, {accountId: account},
{}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value')); {}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value'));
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session); identityCreatorController.arguments = IdentityCreatorArguments(
accountId,
session,
ownEmailAddress,
);
// act // act
identityCreatorController.onReady(); identityCreatorController.onReady();
@@ -242,7 +247,11 @@ void main() {
'and user has not picked any image', 'and user has not picked any image',
() { () {
// arrange // arrange
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session); identityCreatorController.arguments = IdentityCreatorArguments(
accountId,
session,
ownEmailAddress,
);
// act // act
identityCreatorController.onReady(); identityCreatorController.onReady();
@@ -272,7 +281,11 @@ void main() {
PlatformInfo.isTestingForWeb = true; PlatformInfo.isTestingForWeb = true;
const htmlContent = '<p>test</p>'; const htmlContent = '<p>test</p>';
const identityName = 'test'; const identityName = 'test';
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session); identityCreatorController.arguments = IdentityCreatorArguments(
accountId,
session,
ownEmailAddress,
);
when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState())); when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState()));
// act // act
@@ -322,7 +335,11 @@ void main() {
PlatformInfo.isTestingForWeb = true; PlatformInfo.isTestingForWeb = true;
const htmlContent = '<p>test</p>'; const htmlContent = '<p>test</p>';
const identityName = 'test'; const identityName = 'test';
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session); identityCreatorController.arguments = IdentityCreatorArguments(
accountId,
session,
ownEmailAddress,
);
when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState())); when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState()));
// act // act
@@ -243,7 +243,7 @@ void main() {
.thenAnswer((_) => Stream.value(Right(GetAllIdentitiesSuccess( .thenAnswer((_) => Stream.value(Right(GetAllIdentitiesSuccess(
[identity1, identity2, identity3, identity4], [identity1, identity2, identity3, identity4],
null)))); null))));
when(mockManageAccountDashBoardController.ownEmailAddress).thenReturn(Rx('')); when(mockManageAccountDashBoardController.ownEmailAddress).thenReturn(RxString(''));
when(mockManageAccountDashBoardController.accountId).thenReturn(Rxn()); when(mockManageAccountDashBoardController.accountId).thenReturn(Rxn());
when(mockManageAccountDashBoardController.sessionCurrent).thenReturn(SessionFixtures.aliceSession); when(mockManageAccountDashBoardController.sessionCurrent).thenReturn(SessionFixtures.aliceSession);