TF-2189 Update sending state in Sending Queue when send email failure on iOS

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 295b19620669f59df872d801a5b5e1a79d5ca520)
This commit is contained in:
dab246
2023-10-20 09:57:48 +07:00
committed by Dat H. Pham
parent 52942e0049
commit 4a7dccf86c
2 changed files with 39 additions and 4 deletions
@@ -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
);
}
}
@@ -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();