TF-3894 Fix blank email content when opening email
This commit is contained in:
@@ -61,6 +61,7 @@ mixin ScenarioUtilsMixin {
|
||||
session: mailboxDashBoardController.sessionCurrent!,
|
||||
accountId: mailboxDashBoardController.accountId.value!,
|
||||
emailActionType: EmailActionType.compose,
|
||||
ownEmailAddress: mailboxDashBoardController.ownEmailAddress.value,
|
||||
subject: provisioningEmail.subject,
|
||||
emailContent: provisioningEmail.content,
|
||||
toRecipients: {EmailAddress(null, provisioningEmail.toEmail)},
|
||||
|
||||
@@ -421,11 +421,12 @@ abstract class BaseController extends GetxController
|
||||
BuildContext context,
|
||||
Session? session,
|
||||
AccountId? accountId,
|
||||
String ownEmailAddress,
|
||||
) {
|
||||
if (PlatformInfo.isMobile) {
|
||||
showLogoutConfirmDialog(
|
||||
context: context,
|
||||
userAddress: session?.getOwnEmailAddressOrEmpty() ?? '',
|
||||
userAddress: ownEmailAddress,
|
||||
onConfirmAction: () => _handleLogoutAction(session, accountId),
|
||||
);
|
||||
} 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;
|
||||
|
||||
String get ownEmailAddress =>
|
||||
mailboxDashBoardController.ownEmailAddress.value;
|
||||
|
||||
late Worker uploadInlineImageWorker;
|
||||
late Worker dashboardViewStateWorker;
|
||||
late bool _isEmailBodyLoaded;
|
||||
@@ -521,6 +524,7 @@ class ComposerController extends BaseController
|
||||
session: session,
|
||||
accountId: accountId,
|
||||
emailActionType: arguments.emailActionType,
|
||||
ownEmailAddress: ownEmailAddress,
|
||||
subject: subjectEmail.value ?? '',
|
||||
emailContent: emailContent,
|
||||
fromSender: arguments.presentationEmail?.from ?? {},
|
||||
@@ -698,7 +702,7 @@ class ComposerController extends BaseController
|
||||
required EmailActionType actionType,
|
||||
String? listPost,
|
||||
}) {
|
||||
final senderEmailAddress = mailboxDashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty();
|
||||
final senderEmailAddress = ownEmailAddress;
|
||||
final isSender = presentationEmail.from
|
||||
.asList()
|
||||
.any((element) => element.emailAddress.isNotEmpty && element.emailAddress == senderEmailAddress);
|
||||
@@ -946,6 +950,7 @@ class ComposerController extends BaseController
|
||||
session: session,
|
||||
accountId: accountId,
|
||||
emailActionType: arguments.emailActionType,
|
||||
ownEmailAddress: ownEmailAddress,
|
||||
subject: subjectEmail.value ?? '',
|
||||
emailContent: emailContent,
|
||||
fromSender: arguments.presentationEmail?.from ?? {},
|
||||
@@ -2121,6 +2126,7 @@ class ComposerController extends BaseController
|
||||
session: session,
|
||||
accountId: accountId,
|
||||
emailActionType: arguments.emailActionType,
|
||||
ownEmailAddress: ownEmailAddress,
|
||||
subject: subjectEmail.value ?? '',
|
||||
emailContent: emailContent,
|
||||
fromSender: arguments.presentationEmail?.from ?? {},
|
||||
@@ -2171,6 +2177,7 @@ class ComposerController extends BaseController
|
||||
session: mailboxDashBoardController.sessionCurrent!,
|
||||
accountId: mailboxDashBoardController.accountId.value!,
|
||||
emailActionType: composerArguments.value!.emailActionType,
|
||||
ownEmailAddress: ownEmailAddress,
|
||||
subject: subjectEmail.value ?? '',
|
||||
emailContent: emailContent,
|
||||
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/list_email_address_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:tmail_ui_user/features/base/state/button_state.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()),
|
||||
);
|
||||
}
|
||||
String accountDisplayName = ownEmailAddress;
|
||||
if (accountDisplayName.trim().isEmpty) {
|
||||
accountDisplayName = mailboxDashBoardController
|
||||
.sessionCurrent
|
||||
?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
log('ComposerPrintDraftExtension::_showPrintDraftsDialog:receiveTime = $receiveTime | emailActionType = $emailActionType');
|
||||
final childWidget = PointerInterceptor(
|
||||
child: PrintDraftDialogView(
|
||||
emailPrint: DraftEmailPrint(
|
||||
appName: appLocalizations.app_name,
|
||||
userName: mailboxDashBoardController.ownEmailAddress.value,
|
||||
userName: accountDisplayName,
|
||||
attachments: uploadController.allAttachmentsUploaded,
|
||||
emailContent: emailContent,
|
||||
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/mail_priority_header.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:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/identity_extension.dart';
|
||||
@@ -26,8 +25,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
||||
Set<EmailAddress> createSenders() {
|
||||
if (identity?.email?.isNotEmpty == true) {
|
||||
return { identity!.toEmailAddress() };
|
||||
} else if (session.getOwnEmailAddressOrEmpty().isNotEmpty) {
|
||||
return { EmailAddress(null, session.getOwnEmailAddressOrEmpty()) };
|
||||
} else if (ownEmailAddress.isNotEmpty) {
|
||||
return { EmailAddress(null, ownEmailAddress) };
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
@@ -36,8 +35,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
||||
String createMdnEmailAddress() {
|
||||
if (emailActionType == EmailActionType.editDraft && fromSender?.isNotEmpty == true) {
|
||||
return fromSender!.first.emailAddress;
|
||||
} else if (session.getOwnEmailAddressOrEmpty().isNotEmpty) {
|
||||
return session.getOwnEmailAddressOrEmpty();
|
||||
} else if (ownEmailAddress.isNotEmpty) {
|
||||
return ownEmailAddress;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
@@ -52,8 +51,8 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
||||
|
||||
return identity?.replyTo?.isNotEmpty == true
|
||||
? identity!.replyTo!
|
||||
: session.getOwnEmailAddressOrEmpty().isNotEmpty
|
||||
? {EmailAddress(null, session.getOwnEmailAddressOrEmpty())}
|
||||
: ownEmailAddress.isNotEmpty
|
||||
? {EmailAddress(null, ownEmailAddress)}
|
||||
: null;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ class CreateEmailRequest with EquatableMixin {
|
||||
final Session session;
|
||||
final AccountId accountId;
|
||||
final EmailActionType emailActionType;
|
||||
final String ownEmailAddress;
|
||||
final String subject;
|
||||
final String emailContent;
|
||||
final bool hasRequestReadReceipt;
|
||||
@@ -51,6 +52,7 @@ class CreateEmailRequest with EquatableMixin {
|
||||
required this.session,
|
||||
required this.accountId,
|
||||
required this.emailActionType,
|
||||
required this.ownEmailAddress,
|
||||
required this.subject,
|
||||
required this.emailContent,
|
||||
this.fromSender,
|
||||
@@ -88,6 +90,7 @@ class CreateEmailRequest with EquatableMixin {
|
||||
session,
|
||||
accountId,
|
||||
emailActionType,
|
||||
ownEmailAddress,
|
||||
subject,
|
||||
emailContent,
|
||||
fromSender,
|
||||
|
||||
@@ -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,
|
||||
|
||||
+2
-3
@@ -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 '';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,7 +271,7 @@ class EmailPreviewerController extends ReloadableController {
|
||||
consumeState(_previewEmailFromEmlFileInteractor.execute(
|
||||
PreviewEmailEMLRequest(
|
||||
accountId: _accountId!,
|
||||
ownEmailAddress: _session!.getOwnEmailAddressOrEmpty(),
|
||||
ownEmailAddress: _session!.getOwnEmailAddressOrUsername(),
|
||||
blobId: success.blobId,
|
||||
email: success.email,
|
||||
locale: Localizations.localeOf(currentContext!),
|
||||
|
||||
@@ -359,12 +359,12 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
|
||||
.toSet()
|
||||
.toList();
|
||||
|
||||
if(session?.getOwnEmailAddressOrEmpty().isNotEmpty == true
|
||||
&& !listEmailAddressDefault.any((emailAddress) => emailAddress.email == session?.getOwnEmailAddressOrEmpty())) {
|
||||
listEmailAddressDefault.add(EmailAddress(
|
||||
null,
|
||||
session?.getOwnEmailAddressOrEmpty(),
|
||||
));
|
||||
final ownEmailAddress = arguments?.ownerEmailAddress ?? '';
|
||||
final isOwnEmailAddressInList = listEmailAddressDefault
|
||||
.any((emailAddress) => emailAddress.email == ownEmailAddress);
|
||||
|
||||
if (ownEmailAddress.isNotEmpty && !isOwnEmailAddressInList) {
|
||||
listEmailAddressDefault.add(EmailAddress(null, ownEmailAddress));
|
||||
}
|
||||
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
||||
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
||||
@@ -385,11 +385,9 @@ class IdentityCreatorController extends BaseController with DragDropFileMixin im
|
||||
void _setDefaultEmailAddressList() {
|
||||
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
||||
|
||||
if (session?.getOwnEmailAddressOrEmpty().isNotEmpty == true) {
|
||||
final userEmailAddress = EmailAddress(
|
||||
null,
|
||||
session?.getOwnEmailAddressOrEmpty(),
|
||||
);
|
||||
final ownEmailAddress = arguments?.ownerEmailAddress ?? '';
|
||||
if (ownEmailAddress.isNotEmpty) {
|
||||
final userEmailAddress = EmailAddress(null, ownEmailAddress);
|
||||
listEmailAddressDefault.add(userEmailAddress);
|
||||
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/public_asset/domain/model/public_assets_i
|
||||
class IdentityCreatorArguments with EquatableMixin {
|
||||
final AccountId accountId;
|
||||
final Session session;
|
||||
final String ownerEmailAddress;
|
||||
final IdentityActionType actionType;
|
||||
final PublicAssetsInIdentityArguments? publicAssetsInIdentityArguments;
|
||||
final bool? isDefault;
|
||||
@@ -17,6 +18,7 @@ class IdentityCreatorArguments with EquatableMixin {
|
||||
IdentityCreatorArguments(
|
||||
this.accountId,
|
||||
this.session,
|
||||
this.ownerEmailAddress,
|
||||
{
|
||||
this.identity,
|
||||
this.publicAssetsInIdentityArguments,
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:core/presentation/views/list/tree_view.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/extensions/session_extension.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/home/domain/extensions/session_extensions.dart';
|
||||
@@ -34,7 +35,10 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
|
||||
final dashboardController = controller.mailboxDashBoardController;
|
||||
final accountId = dashboardController.accountId.value;
|
||||
final session = dashboardController.sessionCurrent;
|
||||
final username = dashboardController.ownEmailAddress.value;
|
||||
String username = dashboardController.ownEmailAddress.value;
|
||||
if (username.trim().isEmpty) {
|
||||
username = session?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
|
||||
final linagoraApps = dashboardController
|
||||
.appGridDashboardController
|
||||
|
||||
+4
-5
@@ -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/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/own_email_address_mixin.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/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/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_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/model/dashboard_routes.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';
|
||||
|
||||
class MailboxDashBoardController extends ReloadableController
|
||||
with ContactSupportMixin {
|
||||
with ContactSupportMixin, OwnEmailAddressMixin {
|
||||
|
||||
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
|
||||
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
||||
@@ -285,9 +285,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
final isDrawerOpened = RxBool(false);
|
||||
final isContextMenuOpened = RxBool(false);
|
||||
final isPopupMenuOpened = RxBool(false);
|
||||
final ownEmailAddress = RxString('');
|
||||
|
||||
Session? sessionCurrent;
|
||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
||||
final emailsInCurrentMailbox = <PresentationEmail>[].obs;
|
||||
@@ -1986,6 +1984,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
return searchController.quickSearchEmails(
|
||||
session: sessionCurrent!,
|
||||
accountId: accountId.value!,
|
||||
ownEmailAddress: ownEmailAddress.value,
|
||||
query: query
|
||||
);
|
||||
} else {
|
||||
@@ -3226,7 +3225,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
|
||||
void _handleGetAllIdentitiesFailure() {
|
||||
_identities = null;
|
||||
synchronizeOwnEmailAddress(sessionCurrent?.getUserDisplayName() ?? '');
|
||||
updateOwnEmailAddressFromIdentities([]);
|
||||
}
|
||||
|
||||
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:model/email/presentation_email.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:tmail_ui_user/features/base/base_controller.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({
|
||||
required Session session,
|
||||
required AccountId accountId,
|
||||
required String ownEmailAddress,
|
||||
required String query,
|
||||
}) async {
|
||||
currentSearchText = query;
|
||||
@@ -102,7 +102,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false)),
|
||||
filter: _mappingToFilterOnSuggestionForm(
|
||||
currentUserEmail: session.getOwnEmailAddressOrEmpty(),
|
||||
currentUserEmail: ownEmailAddress,
|
||||
query: query,
|
||||
),
|
||||
properties: EmailUtils.getPropertiesForEmailGetMethod(session, accountId),
|
||||
@@ -127,7 +127,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
hasAttachment: listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment)
|
||||
? true
|
||||
: null,
|
||||
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)
|
||||
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) && currentUserEmail.isNotEmpty
|
||||
? currentUserEmail
|
||||
: null,
|
||||
hasKeyword: listFilterOnSuggestionForm.contains(QuickSearchFilter.starred)
|
||||
@@ -140,7 +140,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
: null;
|
||||
}
|
||||
|
||||
void applyFilterSuggestionToSearchFilter(String? currentUserEmail) {
|
||||
void applyFilterSuggestionToSearchFilter(String currentUserEmail) {
|
||||
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
|
||||
? EmailReceiveTimeType.last7Days
|
||||
: EmailReceiveTimeType.allTime;
|
||||
@@ -148,7 +148,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
|
||||
|
||||
var listFromAddress = searchEmailFilter.value.from;
|
||||
if (currentUserEmail != null) {
|
||||
if (currentUserEmail.isNotEmpty) {
|
||||
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
|
||||
listFromAddress.add(currentUserEmail);
|
||||
} else {
|
||||
|
||||
+7
-1
@@ -1,5 +1,6 @@
|
||||
|
||||
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/model/profile_setting/profile_setting_action_type.dart';
|
||||
|
||||
@@ -10,7 +11,12 @@ extension HandleProfileSettingActionTypeClickExtension on MailboxDashBoardContro
|
||||
}) {
|
||||
switch (actionType) {
|
||||
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;
|
||||
case ProfileSettingActionType.manageAccount:
|
||||
goToSettings();
|
||||
|
||||
-24
@@ -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(() {
|
||||
final accountId = controller.accountId.value;
|
||||
final ownEmailAddress = controller.ownEmailAddress.value;
|
||||
String accountDisplayName = controller.ownEmailAddress.value;
|
||||
final contactSupportCapability = accountId != null
|
||||
? controller.sessionCurrent?.getContactSupportCapability(accountId)
|
||||
: null;
|
||||
if (accountDisplayName.trim().isEmpty) {
|
||||
accountDisplayName = controller
|
||||
.sessionCurrent
|
||||
?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
|
||||
return NavigationBarWidget(
|
||||
imagePaths: controller.imagePaths,
|
||||
accountId: accountId,
|
||||
ownEmailAddress: ownEmailAddress,
|
||||
ownEmailAddress: accountDisplayName,
|
||||
contactSupportCapability: contactSupportCapability,
|
||||
searchForm: SearchInputFormWidget(),
|
||||
appGridController:
|
||||
@@ -151,8 +156,15 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
),
|
||||
const Spacer(),
|
||||
Obx(() {
|
||||
String accountDisplayName =
|
||||
controller.ownEmailAddress.value;
|
||||
if (accountDisplayName.trim().isEmpty) {
|
||||
accountDisplayName = controller
|
||||
.sessionCurrent
|
||||
?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
return ProfileSettingIcon(
|
||||
ownEmailAddress: controller.ownEmailAddress.value,
|
||||
ownEmailAddress: accountDisplayName,
|
||||
settingActionTypes: ProfileSettingActionType.values,
|
||||
onProfileSettingActionTypeClick: (actionType) =>
|
||||
controller.handleProfileSettingActionTypeClick(
|
||||
|
||||
@@ -17,7 +17,6 @@ import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/session_extension.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/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
@@ -173,7 +172,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
sortOrderType: _dashBoardController.currentSortOrder,
|
||||
);
|
||||
_searchController.applyFilterSuggestionToSearchFilter(
|
||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||
_dashBoardController.ownEmailAddress.value,
|
||||
);
|
||||
_dashBoardController.searchEmailByQueryString(queryString);
|
||||
} else {
|
||||
@@ -213,7 +212,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
sortOrderType: _dashBoardController.currentSortOrder,
|
||||
);
|
||||
_searchController.applyFilterSuggestionToSearchFilter(
|
||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||
_dashBoardController.ownEmailAddress.value,
|
||||
);
|
||||
_dashBoardController.searchEmailByQueryString(recent.value);
|
||||
}
|
||||
|
||||
+7
-1
@@ -1,5 +1,6 @@
|
||||
|
||||
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/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
|
||||
@@ -10,7 +11,12 @@ extension HandleProfileSettingActionTypeClickExtension on ManageAccountDashBoard
|
||||
}) {
|
||||
switch (actionType) {
|
||||
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;
|
||||
default:
|
||||
break;
|
||||
|
||||
-24
@@ -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/identities/identity.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_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/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/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/manage_account_dashboard_controller.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) {
|
||||
if (failure is GetAllIdentitiesFailure) {
|
||||
identitiesViewState.value = Left(failure);
|
||||
accountDashBoardController.updateOwnEmailAddressFromIdentities([]);
|
||||
} else if (failure is DeleteIdentityFailure) {
|
||||
_deleteIdentityFailure(failure);
|
||||
} else if (failure is RemoveIdentityFromPublicAssetsFailureState) {
|
||||
@@ -150,10 +149,6 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
|
||||
_deleteIdentityAction(failure.identityId);
|
||||
} else if (failure is GetIdentityCacheOnWebFailure) {
|
||||
_removeIdentityCache();
|
||||
} else if (failure is GetAllIdentitiesFailure) {
|
||||
accountDashBoardController.synchronizeOwnEmailAddress(
|
||||
accountDashBoardController.sessionCurrent?.getUserDisplayName() ?? '',
|
||||
);
|
||||
} else if (failure is TransformListSignatureFailure) {
|
||||
signatureViewState.value = Left(failure);
|
||||
_syncMapIdentitySignatures(failure.identitySignatures);
|
||||
@@ -204,7 +199,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
|
||||
|
||||
_transformSignature();
|
||||
}
|
||||
|
||||
|
||||
bool _validateIdentity(Identity identity) {
|
||||
return identity.mayDelete == true &&
|
||||
identity.name?.trim().isNotEmpty == true;
|
||||
@@ -228,7 +223,11 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
|
||||
final accountId = accountDashBoardController.accountId.value;
|
||||
final session = accountDashBoardController.sessionCurrent;
|
||||
if (accountId != null && session != null) {
|
||||
final arguments = IdentityCreatorArguments(accountId, session);
|
||||
final arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
accountDashBoardController.ownEmailAddress.value,
|
||||
);
|
||||
|
||||
newIdentityArguments = PlatformInfo.isWeb
|
||||
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
|
||||
@@ -378,6 +377,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
|
||||
final arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
accountDashBoardController.ownEmailAddress.value,
|
||||
identity: identity,
|
||||
actionType: IdentityActionType.edit);
|
||||
|
||||
@@ -474,6 +474,7 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
|
||||
final arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
accountDashBoardController.ownEmailAddress.value,
|
||||
identity: identityCache.identity,
|
||||
isDefault: identityCache.isDefault,
|
||||
publicAssetsInIdentityArguments: identityCache.publicAssetsInIdentityArguments,
|
||||
|
||||
@@ -14,6 +14,7 @@ import 'package:model/model.dart';
|
||||
import 'package:rule_filter/rule_filter/capability_rule_filter.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/mixin/own_email_address_mixin.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/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/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/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/forward/bindings/forward_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/utils/app_config.dart';
|
||||
|
||||
class ManageAccountDashBoardController extends ReloadableController {
|
||||
class ManageAccountDashBoardController extends ReloadableController
|
||||
with OwnEmailAddressMixin {
|
||||
|
||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||
UpdateVacationInteractor? _updateVacationInteractor;
|
||||
@@ -56,9 +57,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
||||
final vacationResponse = Rxn<VacationResponse>();
|
||||
final dashboardSettingAction = Rxn<UIAction>();
|
||||
final ownEmailAddress = Rx<String>('');
|
||||
|
||||
Session? sessionCurrent;
|
||||
Uri? previousUri;
|
||||
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_portal/flutter_portal.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/widgets/navigation_bar/navigation_bar_widget.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,
|
||||
desktop: Column(children: [
|
||||
FutureBuilder(
|
||||
future: CozyConfigManager().isInsideCozy,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.data == true) return const SizedBox.shrink();
|
||||
future: CozyConfigManager().isInsideCozy,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.data == true) return const SizedBox.shrink();
|
||||
|
||||
return Obx(() => NavigationBarWidget(
|
||||
imagePaths: controller.imagePaths,
|
||||
accountId: controller.accountId.value,
|
||||
ownEmailAddress: controller.ownEmailAddress.value,
|
||||
onTapApplicationLogoAction: () =>
|
||||
controller.backToMailboxDashBoard(context: context),
|
||||
settingActionTypes: const [ProfileSettingActionType.signOut],
|
||||
onProfileSettingActionTypeClick: (actionType) =>
|
||||
controller.handleProfileSettingActionTypeClick(
|
||||
context: context,
|
||||
actionType: actionType,
|
||||
),
|
||||
));
|
||||
}
|
||||
),
|
||||
return Obx(() {
|
||||
final accountId = controller.accountId.value;
|
||||
String accountDisplayName = controller.ownEmailAddress.value;
|
||||
|
||||
if (accountDisplayName.trim().isEmpty) {
|
||||
accountDisplayName = controller
|
||||
.sessionCurrent
|
||||
?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
|
||||
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(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
@@ -6,6 +6,8 @@ import 'package:core/utils/direction_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.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/widgets/account_menu_item_tile_builder.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,
|
||||
),
|
||||
onSelectAccountMenuItemAction: (_) {
|
||||
controller.dashBoardController.logout(
|
||||
context,
|
||||
controller.dashBoardController.sessionCurrent,
|
||||
controller.dashBoardController.accountId.value,
|
||||
);
|
||||
controller.dashBoardController
|
||||
.handleProfileSettingActionTypeClick(
|
||||
context: context,
|
||||
actionType: ProfileSettingActionType.signOut,
|
||||
);
|
||||
}
|
||||
),
|
||||
]
|
||||
|
||||
+28
-13
@@ -2,8 +2,11 @@ import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.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/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_utils.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(
|
||||
key: const Key('setting_menu'),
|
||||
child: Column(children: [
|
||||
Obx(() => UserInformationWidget(
|
||||
ownEmailAddress: controller
|
||||
Obx(() {
|
||||
String accountDisplayName = controller
|
||||
.manageAccountDashboardController
|
||||
.ownEmailAddress
|
||||
.value,
|
||||
padding: SettingsUtils.getPaddingInFirstLevel(
|
||||
context,
|
||||
controller.responsiveUtils,
|
||||
),
|
||||
titlePadding: const EdgeInsetsDirectional.only(start: 16),
|
||||
)),
|
||||
.value;
|
||||
|
||||
if (accountDisplayName.trim().isEmpty) {
|
||||
accountDisplayName = controller
|
||||
.manageAccountDashboardController
|
||||
.sessionCurrent
|
||||
?.getOwnEmailAddressOrUsername() ?? '';
|
||||
}
|
||||
return UserInformationWidget(
|
||||
ownEmailAddress: accountDisplayName,
|
||||
padding: SettingsUtils.getPaddingInFirstLevel(
|
||||
context,
|
||||
controller.responsiveUtils,
|
||||
),
|
||||
titlePadding: const EdgeInsetsDirectional.only(start: 16),
|
||||
);
|
||||
}),
|
||||
Divider(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
height: 1,
|
||||
@@ -222,10 +235,12 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
||||
SettingFirstLevelTileBuilder(
|
||||
AppLocalizations.of(context).sign_out,
|
||||
controller.imagePaths.icSignOut,
|
||||
() => controller.manageAccountDashboardController.logout(
|
||||
context,
|
||||
controller.manageAccountDashboardController.sessionCurrent,
|
||||
controller.manageAccountDashboardController.accountId.value)
|
||||
() => controller
|
||||
.manageAccountDashboardController
|
||||
.handleProfileSettingActionTypeClick(
|
||||
context: context,
|
||||
actionType: ProfileSettingActionType.signOut,
|
||||
)
|
||||
),
|
||||
]),
|
||||
);
|
||||
|
||||
@@ -121,6 +121,8 @@ class SearchEmailController extends BaseController
|
||||
|
||||
Session? get session => mailboxDashBoardController.sessionCurrent;
|
||||
|
||||
String get ownEmailAddress => mailboxDashBoardController.ownEmailAddress.value;
|
||||
|
||||
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||
|
||||
RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch;
|
||||
|
||||
@@ -307,7 +307,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
||||
final searchEmailFilter = controller.searchEmailFilter.value;
|
||||
final sortOrderType = controller.emailSortOrderType.value;
|
||||
final listAddressOfFrom = controller.listAddressOfFromFiltered;
|
||||
final currentUserEmail = controller.session?.getOwnEmailAddressOrEmpty();
|
||||
final currentUserEmail = controller.ownEmailAddress;
|
||||
final startDate = controller.startDateFiltered;
|
||||
final endDate = controller.endDateFiltered;
|
||||
final receiveTimeType = controller.receiveTimeFiltered;
|
||||
|
||||
+3
-3
@@ -124,8 +124,8 @@ extension HandleRefreshThreadDetailAction on ThreadDetailController {
|
||||
return true;
|
||||
}
|
||||
|
||||
return ownEmailAddress != null &&
|
||||
(!email.fromMe(ownEmailAddress!) ||
|
||||
!email.recipientsHasMe(ownEmailAddress!));
|
||||
return ownEmailAddress.isNotEmpty &&
|
||||
(!email.fromMe(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/presentation_email.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:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart';
|
||||
@@ -107,7 +106,7 @@ class ThreadDetailController extends BaseController {
|
||||
session!,
|
||||
accountId!,
|
||||
sentMailboxId!,
|
||||
ownEmailAddress!,
|
||||
ownEmailAddress,
|
||||
isSentMailbox: value.isSentMailbox,
|
||||
));
|
||||
}
|
||||
@@ -130,7 +129,10 @@ class ThreadDetailController extends BaseController {
|
||||
MailboxId? get sentMailboxId => mailboxDashBoardController.getMailboxIdByRole(
|
||||
PresentationMailbox.roleSent,
|
||||
);
|
||||
String? get ownEmailAddress => session?.getOwnEmailAddress();
|
||||
|
||||
String get ownEmailAddress =>
|
||||
mailboxDashBoardController.ownEmailAddress.value;
|
||||
|
||||
bool get isSearchRunning {
|
||||
final isWebSearchRunning = mailboxDashBoardController
|
||||
.searchController
|
||||
@@ -217,7 +219,7 @@ class ThreadDetailController extends BaseController {
|
||||
session != null &&
|
||||
accountId != null &&
|
||||
sentMailboxId != null &&
|
||||
ownEmailAddress != null &&
|
||||
ownEmailAddress.isNotEmpty &&
|
||||
networkConnected &&
|
||||
isThreadDetailEnabled;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import 'package:core/utils/platform_info.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:model/extensions/session_extension.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/styles/email_view_app_bar_widget_styles.dart';
|
||||
@@ -175,7 +174,7 @@ class ThreadDetailView extends GetWidget<ThreadDetailController> {
|
||||
responsiveUtils: controller.responsiveUtils,
|
||||
emailLoaded: currentEmailLoaded,
|
||||
presentationEmail: expandedPresentationEmail,
|
||||
userName: controller.session?.getOwnEmailAddress() ?? '',
|
||||
userName: controller.ownEmailAddress,
|
||||
emailActionCallback: (action, email) {
|
||||
controller.mailboxDashBoardController
|
||||
..dispatchEmailUIAction(PerformEmailActionInThreadDetailAction(
|
||||
|
||||
@@ -129,6 +129,26 @@ extension SessionExtension on Session {
|
||||
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 {
|
||||
if (accounts.isNotEmpty) {
|
||||
final listPersonalAccount = accounts.entries
|
||||
|
||||
@@ -61,6 +61,7 @@ void main() {
|
||||
when(mockCreateEmailRequest.session).thenReturn(mockSession);
|
||||
when(mockCreateEmailRequest.identity).thenReturn(mockIdentity);
|
||||
when(mockCreateEmailRequest.replyToRecipients).thenReturn({});
|
||||
when(mockCreateEmailRequest.ownEmailAddress).thenReturn('test@example.com');
|
||||
|
||||
repository = ComposerRepositoryImpl(
|
||||
mockAttachmentUploadDataSource,
|
||||
|
||||
+7
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.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/usecases/create_new_and_save_email_to_drafts_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
|
||||
@@ -41,6 +42,9 @@ void main() {
|
||||
session: SessionFixtures.aliceSession,
|
||||
accountId: AccountFixtures.aliceAccountId,
|
||||
emailActionType: EmailActionType.editDraft,
|
||||
ownEmailAddress: SessionFixtures
|
||||
.aliceSession
|
||||
.getOwnEmailAddressOrEmpty(),
|
||||
subject: 'subject',
|
||||
emailContent: 'emailContent',
|
||||
draftsEmailId: EmailId(Id('some-id'))
|
||||
@@ -81,6 +85,9 @@ void main() {
|
||||
session: SessionFixtures.aliceSession,
|
||||
accountId: AccountFixtures.aliceAccountId,
|
||||
emailActionType: EmailActionType.editDraft,
|
||||
ownEmailAddress: SessionFixtures
|
||||
.aliceSession
|
||||
.getOwnEmailAddressOrEmpty(),
|
||||
subject: 'subject',
|
||||
emailContent: 'emailContent',
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.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/usecases/create_new_and_send_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
|
||||
@@ -32,6 +33,9 @@ void main() {
|
||||
session: SessionFixtures.aliceSession,
|
||||
accountId: AccountFixtures.aliceAccountId,
|
||||
emailActionType: EmailActionType.editDraft,
|
||||
ownEmailAddress: SessionFixtures
|
||||
.aliceSession
|
||||
.getOwnEmailAddressOrEmpty(),
|
||||
subject: 'subject',
|
||||
emailContent: 'emailContent',
|
||||
);
|
||||
|
||||
@@ -22,6 +22,7 @@ import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/email/attachment.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:rich_text_composer/rich_text_composer.dart';
|
||||
import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart';
|
||||
@@ -106,6 +107,9 @@ class MockMailboxDashBoardController extends Mock implements MailboxDashBoardCon
|
||||
@override
|
||||
Session? get sessionCurrent => SessionFixtures.aliceSession;
|
||||
|
||||
@override
|
||||
RxString get ownEmailAddress => SessionFixtures.aliceSession.getOwnEmailAddressOrEmpty().obs;
|
||||
|
||||
@override
|
||||
Rxn<DraggableAppState> get attachmentDraggableAppState => Rxn(DraggableAppState.inActive);
|
||||
@override
|
||||
|
||||
+6
@@ -13,6 +13,9 @@ void main() {
|
||||
session: SessionFixtures.aliceSession,
|
||||
accountId: AccountFixtures.aliceAccountId,
|
||||
emailActionType: EmailActionType.editDraft,
|
||||
ownEmailAddress: SessionFixtures
|
||||
.aliceSession
|
||||
.getOwnEmailAddressOrEmpty(),
|
||||
subject: 'subject',
|
||||
emailContent: 'emailContent',
|
||||
);
|
||||
@@ -67,6 +70,9 @@ void main() {
|
||||
session: SessionFixtures.aliceSession,
|
||||
accountId: AccountFixtures.aliceAccountId,
|
||||
emailActionType: EmailActionType.editDraft,
|
||||
ownEmailAddress: SessionFixtures
|
||||
.aliceSession
|
||||
.getOwnEmailAddressOrEmpty(),
|
||||
subject: 'subject',
|
||||
emailContent: 'emailContent',
|
||||
hasRequestReadReceipt: true,
|
||||
|
||||
@@ -196,6 +196,7 @@ void main() {
|
||||
{},
|
||||
{accountId: account},
|
||||
{}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value'));
|
||||
String ownEmailAddress = 'user@example.com';
|
||||
|
||||
test(
|
||||
'should call deletePublicAssetsInteractor.execute() '
|
||||
@@ -213,7 +214,11 @@ void main() {
|
||||
{},
|
||||
{accountId: account},
|
||||
{}, UserName('value'), Uri(), Uri(), Uri(), Uri(), State('value'));
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session);
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
ownEmailAddress,
|
||||
);
|
||||
|
||||
// act
|
||||
identityCreatorController.onReady();
|
||||
@@ -242,7 +247,11 @@ void main() {
|
||||
'and user has not picked any image',
|
||||
() {
|
||||
// arrange
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session);
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
ownEmailAddress,
|
||||
);
|
||||
|
||||
// act
|
||||
identityCreatorController.onReady();
|
||||
@@ -272,7 +281,11 @@ void main() {
|
||||
PlatformInfo.isTestingForWeb = true;
|
||||
const htmlContent = '<p>test</p>';
|
||||
const identityName = 'test';
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session);
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
ownEmailAddress,
|
||||
);
|
||||
when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState()));
|
||||
|
||||
// act
|
||||
@@ -322,7 +335,11 @@ void main() {
|
||||
PlatformInfo.isTestingForWeb = true;
|
||||
const htmlContent = '<p>test</p>';
|
||||
const identityName = 'test';
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(accountId, session);
|
||||
identityCreatorController.arguments = IdentityCreatorArguments(
|
||||
accountId,
|
||||
session,
|
||||
ownEmailAddress,
|
||||
);
|
||||
when(mockVerifyNameInteractor.execute(any, any)).thenAnswer((_) => Right(VerifyNameViewState()));
|
||||
|
||||
// act
|
||||
|
||||
+1
-1
@@ -243,7 +243,7 @@ void main() {
|
||||
.thenAnswer((_) => Stream.value(Right(GetAllIdentitiesSuccess(
|
||||
[identity1, identity2, identity3, identity4],
|
||||
null))));
|
||||
when(mockManageAccountDashBoardController.ownEmailAddress).thenReturn(Rx(''));
|
||||
when(mockManageAccountDashBoardController.ownEmailAddress).thenReturn(RxString(''));
|
||||
when(mockManageAccountDashBoardController.accountId).thenReturn(Rxn());
|
||||
when(mockManageAccountDashBoardController.sessionCurrent).thenReturn(SessionFixtures.aliceSession);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user