TF-1594 Move SendEmailInteractor to MailboxDashboardController to handle async send email

(cherry picked from commit 63aec51a6ea6e827ea924e91a13ec78d7f48edf7)
This commit is contained in:
dab246
2023-03-15 15:06:59 +07:00
committed by Dat Vu
parent ee91963e53
commit fe05df3477
5 changed files with 54 additions and 42 deletions
+13 -8
View File
@@ -145,11 +145,19 @@ class AppToast {
);
}
void showToastWithIcon(BuildContext context, {
String? message, String? icon, Color? bgColor, Color? iconColor,
Color? textColor, double? radius, EdgeInsets? padding,
TextStyle? textStyle, double? widthToast, Duration? toastLength,
Duration? delayTime}) async {
void showToastWithIcon(
BuildContext context, {
String? message,
String? icon,
Color? bgColor,
Color? iconColor,
Color? textColor,
double? radius,
EdgeInsets? padding,
TextStyle? textStyle,
double? widthToast,
Duration? toastLength
}) async {
double sizeWidth = context.width > 360 ? 360 : context.width - 40;
final toast = Material(
color: bgColor ?? Colors.white,
@@ -182,9 +190,6 @@ class AppToast {
),
);
fToast.init(context);
if (delayTime != null) {
await Future.delayed(delayTime);
}
fToast.showToast(
child: toast,
gravity: ToastGravity.BOTTOM,
@@ -15,7 +15,6 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_a
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/upload_attachment_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
@@ -135,10 +134,6 @@ class ComposerBindings extends BaseBindings {
void bindingsInteractor() {
Get.lazyPut(() => LocalFilePickerInteractor());
Get.lazyPut(() => UploadAttachmentInteractor(Get.find<ComposerRepository>()));
Get.lazyPut(() => SendEmailInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>()
));
Get.lazyPut(() => SaveEmailAsDraftsInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>()));
@@ -159,7 +154,6 @@ class ComposerBindings extends BaseBindings {
Get.lazyPut(() => UploadController(Get.find<UploadAttachmentInteractor>()));
Get.lazyPut(() => RichTextWebController());
Get.lazyPut(() => ComposerController(
Get.find<SendEmailInteractor>(),
Get.find<DeviceInfoPlugin>(),
Get.find<LocalFilePickerInteractor>(),
Get.find<SaveEmailAsDraftsInteractor>(),
@@ -39,7 +39,6 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_a
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_as_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/update_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
@@ -91,7 +90,6 @@ class ComposerController extends BaseController {
final emailContentsViewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
final hasRequestReadReceipt = false.obs;
final SendEmailInteractor _sendEmailInteractor;
final LocalFilePickerInteractor _localFilePickerInteractor;
final DeviceInfoPlugin _deviceInfoPlugin;
final SaveEmailAsDraftsInteractor _saveEmailAsDraftsInteractor;
@@ -190,7 +188,6 @@ class ComposerController extends BaseController {
}
ComposerController(
this._sendEmailInteractor,
this._deviceInfoPlugin,
this._localFilePickerInteractor,
this._saveEmailAsDraftsInteractor,
@@ -764,37 +761,31 @@ class ComposerController extends BaseController {
final outboxMailboxId = mailboxDashBoardController.outboxMailbox?.id;
final userProfile = mailboxDashBoardController.userProfile.value;
if (kIsWeb) {
closeComposerWeb();
} else {
popBack();
}
if (arguments != null && accountId != null && userProfile != null) {
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId);
final submissionCreateId = Id(_uuid.v1());
mailboxDashBoardController.consumeState(
_sendEmailInteractor.execute(
accountId,
EmailRequest(
email,
submissionCreateId,
sentMailboxId: sentMailboxId,
identity: identitySelected.value,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null),
mailboxRequest: outboxMailboxId == null
? CreateNewMailboxRequest(
Id(_uuid.v1()),
PresentationMailbox.outboxMailboxName)
: null
)
final emailRequest = EmailRequest(
email,
submissionCreateId,
sentMailboxId: sentMailboxId,
identity: identitySelected.value,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null
);
final mailboxRequest = outboxMailboxId == null
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
: null;
mailboxDashBoardController.handleSendEmailAction(accountId, emailRequest, mailboxRequest);
uploadController.clearInlineFileUploaded();
}
if (BuildUtils.isWeb) {
closeComposerWeb();
} else {
popBack();
}
}
void _checkContactPermission() async {
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/caching/recent_search_cache_client.dart';
import 'package:tmail_ui_user/features/caching/state_cache_client.dart';
import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
@@ -157,6 +158,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<EmptyTrashFolderInteractor>(),
Get.find<DeleteMultipleEmailsPermanentlyInteractor>(),
Get.find<GetEmailByIdInteractor>(),
Get.find<SendEmailInteractor>()
));
Get.put(AdvancedFilterController());
}
@@ -291,6 +293,10 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetSpamReportStateInteractor(
Get.find<SpamReportRepository>()));
Get.lazyPut(() => SendEmailInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>()
));
}
@override
@@ -24,9 +24,11 @@ import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/set_email_method_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
@@ -45,6 +47,7 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
@@ -134,6 +137,7 @@ class MailboxDashBoardController extends ReloadableController {
final EmptyTrashFolderInteractor _emptyTrashFolderInteractor;
final DeleteMultipleEmailsPermanentlyInteractor _deleteMultipleEmailsPermanentlyInteractor;
final GetEmailByIdInteractor _getEmailByIdInteractor;
final SendEmailInteractor _sendEmailInteractor;
GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
@@ -200,6 +204,7 @@ class MailboxDashBoardController extends ReloadableController {
this._emptyTrashFolderInteractor,
this._deleteMultipleEmailsPermanentlyInteractor,
this._getEmailByIdInteractor,
this._sendEmailInteractor
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
@@ -261,7 +266,6 @@ class MailboxDashBoardController extends ReloadableController {
currentOverlayContext!,
message: AppLocalizations.of(currentContext!).your_email_being_sent,
icon: _imagePaths.icSendToast,
delayTime: const Duration(seconds: 1),
);
}
} else if (success is GetEmailStateToRefreshSuccess) {
@@ -1670,6 +1674,18 @@ class MailboxDashBoardController extends ReloadableController {
clearState();
}
void handleSendEmailAction(
AccountId accountId,
EmailRequest emailRequest,
CreateNewMailboxRequest? mailboxRequest
) {
consumeState(_sendEmailInteractor.execute(
accountId,
emailRequest,
mailboxRequest: mailboxRequest
));
}
@override
void onClose() {