From 4a7dccf86c6c12dcee8a3e2cb1d007a56bffeabd Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 20 Oct 2023 09:57:48 +0700 Subject: [PATCH] TF-2189 Update sending state in Sending Queue when send email failure on iOS Signed-off-by: dab246 (cherry picked from commit 295b19620669f59df872d801a5b5e1a79d5ca520) --- .../extensions/email_request_extension.dart | 12 +++++-- .../mailbox_dashboard_controller.dart | 31 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/lib/features/composer/domain/extensions/email_request_extension.dart b/lib/features/composer/domain/extensions/email_request_extension.dart index f2a202b74..408973fb7 100644 --- a/lib/features/composer/domain/extensions/email_request_extension.dart +++ b/lib/features/composer/domain/extensions/email_request_extension.dart @@ -1,10 +1,17 @@ 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/offline_mode/model/sending_state.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; extension EmailRequestExtension on EmailRequest { - SendingEmail toSendingEmail(String sendingId, {CreateNewMailboxRequest? mailboxRequest}) { + SendingEmail toSendingEmail( + String sendingId, + { + CreateNewMailboxRequest? mailboxRequest, + SendingState newState = SendingState.waiting + } + ) { return SendingEmail( sendingId: sendingId, email: email, @@ -15,7 +22,8 @@ extension EmailRequestExtension on EmailRequest { emailIdAnsweredOrForwarded: emailIdAnsweredOrForwarded, identityId: identityId, mailboxNameRequest: mailboxRequest?.newName, - creationIdRequest: mailboxRequest?.creationId + creationIdRequest: mailboxRequest?.creationId, + sendingState: newState ); } } \ 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 ea9363c19..cfe53c282 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -94,6 +94,7 @@ import 'package:tmail_ui_user/features/network_connection/presentation/network_c if (dart.library.html) 'package:tmail_ui_user/features/network_connection/presentation/web_network_connection_controller.dart'; import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart'; import 'package:tmail_ui_user/features/offline_mode/controller/work_manager_controller.dart'; +import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart'; import 'package:tmail_ui_user/features/offline_mode/work_manager/one_time_work_request.dart'; import 'package:tmail_ui_user/features/offline_mode/work_manager/worker_type.dart'; import 'package:tmail_ui_user/features/push_notification/domain/state/get_email_state_to_refresh_state.dart'; @@ -375,8 +376,11 @@ class MailboxDashBoardController extends ReloadableController { void handleExceptionAction({Failure? failure, Exception? exception}) { super.handleExceptionAction(failure: failure, exception: exception); if (failure is SendEmailFailure && exception is NoNetworkError) { - if (PlatformInfo.isIOS && currentContext != null) { - _showToastSendMessageFailure(AppLocalizations.of(currentContext!).sendMessageFailure); + if (PlatformInfo.isIOS) { + if (currentContext != null) { + _showToastSendMessageFailure(AppLocalizations.of(currentContext!).sendMessageFailure); + } + _updateSendingStateWhenSendEmailFailureOnIOS(failure); } else if (PlatformInfo.isAndroid) { if (failure.emailRequest.storedSendingId != null) { _handleStoreSendingEmail( @@ -1733,6 +1737,7 @@ class MailboxDashBoardController extends ReloadableController { void _handleSendEmailFailure(SendEmailFailure failure) { logError('MailboxDashBoardController::_handleSendEmailFailure():failure: $failure'); + _updateSendingStateWhenSendEmailFailureOnIOS(failure); if (currentContext == null) { clearState(); return; @@ -2129,6 +2134,28 @@ class MailboxDashBoardController extends ReloadableController { } } + void _updateSendingStateWhenSendEmailFailureOnIOS(SendEmailFailure failure) { + log('MailboxDashBoardController::_updateSendingStateWhenSendEmailFailureOnIOS:'); + if (PlatformInfo.isIOS && + failure.emailRequest.storedSendingId != null && + accountId.value != null && + sessionCurrent != null + ) { + final sendingEmailError = failure.emailRequest.toSendingEmail( + failure.emailRequest.storedSendingId!, + mailboxRequest: failure.mailboxRequest, + newState: SendingState.error + ); + consumeState( + _updateSendingEmailInteractor.execute( + accountId.value!, + sessionCurrent!.username, + sendingEmailError + ) + ); + } + } + @override void onClose() { _emailReceiveManager.closeEmailReceiveManagerStream();