diff --git a/lib/features/composer/domain/state/send_email_state.dart b/lib/features/composer/domain/state/send_email_state.dart index 6a4263b33..9bfeecfba 100644 --- a/lib/features/composer/domain/state/send_email_state.dart +++ b/lib/features/composer/domain/state/send_email_state.dart @@ -1,7 +1,12 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.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/state.dart' as jmap; import 'package:tmail_ui_user/features/base/state/ui_action_state.dart'; +import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; +import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart'; class SendEmailLoading extends UIState {} @@ -15,5 +20,18 @@ class SendEmailSuccess extends UIActionState { class SendEmailFailure extends FeatureFailure { - SendEmailFailure(dynamic exception) : super(exception: exception); + final Session session; + final AccountId accountId; + final EmailRequest emailRequest; + final CreateNewMailboxRequest? mailboxRequest; + final SendingEmailActionType? sendingEmailActionType; + + SendEmailFailure({ + dynamic exception, + required this.session, + required this.accountId, + required this.emailRequest, + this.mailboxRequest, + this.sendingEmailActionType + }) : super(exception: exception); } \ No newline at end of file diff --git a/lib/features/composer/domain/usecases/send_email_interactor.dart b/lib/features/composer/domain/usecases/send_email_interactor.dart index f3445424b..dda7f13d5 100644 --- a/lib/features/composer/domain/usecases/send_email_interactor.dart +++ b/lib/features/composer/domain/usecases/send_email_interactor.dart @@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.da import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart'; +import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart'; class SendEmailInteractor { final EmailRepository _emailRepository; @@ -19,7 +20,10 @@ class SendEmailInteractor { Session session, AccountId accountId, EmailRequest emailRequest, - {CreateNewMailboxRequest? mailboxRequest} + { + CreateNewMailboxRequest? mailboxRequest, + SendingEmailActionType? sendingEmailActionType + } ) async* { try { yield Right(SendEmailLoading()); @@ -51,10 +55,23 @@ class SendEmailInteractor { ) ); } else { - yield Left(SendEmailFailure(null)); + yield Left(SendEmailFailure( + session: session, + accountId: accountId, + emailRequest: emailRequest, + mailboxRequest: mailboxRequest, + sendingEmailActionType: sendingEmailActionType, + )); } } catch (e) { - yield Left(SendEmailFailure(e)); + yield Left(SendEmailFailure( + exception: e, + session: session, + accountId: accountId, + emailRequest: emailRequest, + mailboxRequest: mailboxRequest, + sendingEmailActionType: sendingEmailActionType, + )); } } } \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index ecfc30faf..c611d83c8 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -123,6 +123,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_multiple_e import 'package:tmail_ui_user/features/thread/domain/usecases/mark_as_star_multiple_email_interactor.dart'; import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_email_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart'; +import 'package:tmail_ui_user/main/exceptions/remote_exception.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/dialog_router.dart'; @@ -361,6 +362,22 @@ class MailboxDashBoardController extends ReloadableController { } } + @override + void handleExceptionAction({Failure? failure, Exception? exception}) { + super.handleExceptionAction(failure: failure, exception: exception); + if (PlatformInfo.isMobile && + failure is SendEmailFailure && + exception is NoNetworkError) { + _handleSendingEmailWhenNoNetwork( + failure.session, + failure.accountId, + failure.emailRequest, + failure.mailboxRequest, + failure.sendingEmailActionType + ); + } + } + void _registerPendingEmailAddress() { _emailAddressStreamSubscription = _emailReceiveManager.pendingEmailAddressInfo.stream.listen((emailAddress) { @@ -1796,30 +1813,22 @@ class MailboxDashBoardController extends ReloadableController { CreateNewMailboxRequest? mailboxRequest, SendingEmailActionType sendingEmailActionType ) { - if (PlatformInfo.isMobile) { - if (networkConnectionController.isNetworkConnectionAvailable()) { - consumeState(_sendEmailInteractor.execute( - session, - accountId, - emailRequest, - mailboxRequest: mailboxRequest - )); - } else { - _handleSendingEmailWhenNoNetwork( - session, - accountId, - emailRequest, - mailboxRequest, - sendingEmailActionType - ); - } - } else { + if (PlatformInfo.isWeb || + (PlatformInfo.isMobile && networkConnectionController.isNetworkConnectionAvailable())) { consumeState(_sendEmailInteractor.execute( session, accountId, emailRequest, mailboxRequest: mailboxRequest )); + } else { + _handleSendingEmailWhenNoNetwork( + session, + accountId, + emailRequest, + mailboxRequest, + sendingEmailActionType + ); } } @@ -1828,7 +1837,7 @@ class MailboxDashBoardController extends ReloadableController { AccountId accountId, EmailRequest emailRequest, CreateNewMailboxRequest? mailboxRequest, - SendingEmailActionType sendingEmailActionType + SendingEmailActionType? sendingEmailActionType ) { switch(sendingEmailActionType) { case SendingEmailActionType.create: @@ -1837,8 +1846,7 @@ class MailboxDashBoardController extends ReloadableController { case SendingEmailActionType.edit: _handleUpdateSendingEmail(session, accountId, emailRequest, mailboxRequest); break; - case SendingEmailActionType.delete: - case SendingEmailActionType.resend: + default: break; } }