From cb9e38db44a22f54c00656ce0bb999a2256d99a3 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 26 Aug 2025 00:50:03 +0700 Subject: [PATCH] Fix forward recipients error handling --- .../datasource/forwarding_datasource.dart | 16 +++++++-- .../forwarding_data_source_impl.dart | 31 +++++++++++++---- .../data/network/forwarding_api.dart | 22 ++++++------- .../forwarding_repository_impl.dart | 16 +++++++-- .../repository/forwarding_repository.dart | 16 +++++++-- .../add_recipient_in_forwarding_state.dart | 9 +++++ .../delete_recipient_in_forwarding_state.dart | 9 +++++ .../edit_local_copy_in_forwarding_state.dart | 9 +++++ .../domain/state/update_forwarding_state.dart | 12 +++++++ ...d_recipients_in_forwarding_interactor.dart | 17 +++++++--- ...te_recipient_in_forwarding_interactor.dart | 16 ++++++--- ...t_local_copy_in_forwarding_interactor.dart | 17 +++++++--- ...t => handle_update_forward_extension.dart} | 22 +++++++++++-- .../forward/forward_controller.dart | 33 ++++++++----------- lib/main/utils/toast_manager.dart | 9 +++-- 15 files changed, 190 insertions(+), 64 deletions(-) create mode 100644 lib/features/manage_account/domain/state/update_forwarding_state.dart rename lib/features/manage_account/presentation/forward/extensions/{handle_error_when_update_forward_fail_extension.dart => handle_update_forward_extension.dart} (63%) diff --git a/lib/features/manage_account/data/datasource/forwarding_datasource.dart b/lib/features/manage_account/data/datasource/forwarding_datasource.dart index 072fcba32..209f4ddd0 100644 --- a/lib/features/manage_account/data/datasource/forwarding_datasource.dart +++ b/lib/features/manage_account/data/datasource/forwarding_datasource.dart @@ -1,5 +1,6 @@ import 'package:forward/forward/tmail_forward.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_copy_in_forwarding_request.dart'; @@ -7,9 +8,18 @@ import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_co abstract class ForwardingDataSource { Future getForward(AccountId accountId); - Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest); + Future<(TMailForward, SetMethodException?)> deleteRecipientInForwarding( + AccountId accountId, + DeleteRecipientInForwardingRequest deleteRequest, + ); - Future addRecipientsInForwarding(AccountId accountId, AddRecipientInForwardingRequest addRequest); + Future<(TMailForward, SetMethodException?)> addRecipientsInForwarding( + AccountId accountId, + AddRecipientInForwardingRequest addRequest, + ); - Future editLocalCopyInForwarding(AccountId accountId, EditLocalCopyInForwardingRequest editRequest); + Future<(TMailForward, SetMethodException?)> editLocalCopyInForwarding( + AccountId accountId, + EditLocalCopyInForwardingRequest editRequest, + ); } \ No newline at end of file diff --git a/lib/features/manage_account/data/datasource_impl/forwarding_data_source_impl.dart b/lib/features/manage_account/data/datasource_impl/forwarding_data_source_impl.dart index f367b54ef..d8f83cda2 100644 --- a/lib/features/manage_account/data/datasource_impl/forwarding_data_source_impl.dart +++ b/lib/features/manage_account/data/datasource_impl/forwarding_data_source_impl.dart @@ -1,5 +1,6 @@ import 'package:forward/forward/tmail_forward.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource/forwarding_datasource.dart'; import 'package:tmail_ui_user/features/manage_account/data/network/forwarding_api.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart'; @@ -22,23 +23,41 @@ class ForwardingDataSourceImpl extends ForwardingDataSource { } @override - Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest) { + Future<(TMailForward, SetMethodException?)> deleteRecipientInForwarding( + AccountId accountId, + DeleteRecipientInForwardingRequest deleteRequest, + ) { return Future.sync(() async { - return await _forwardingAPI.updateForward(accountId, deleteRequest.newTMailForward); + return await _forwardingAPI.updateForward( + accountId, + deleteRequest.newTMailForward, + ); }).catchError(_exceptionThrower.throwException); } @override - Future addRecipientsInForwarding(AccountId accountId, AddRecipientInForwardingRequest addRequest) { + Future<(TMailForward, SetMethodException?)> addRecipientsInForwarding( + AccountId accountId, + AddRecipientInForwardingRequest addRequest, + ) { return Future.sync(() async { - return await _forwardingAPI.updateForward(accountId, addRequest.newTMailForward); + return await _forwardingAPI.updateForward( + accountId, + addRequest.newTMailForward, + ); }).catchError(_exceptionThrower.throwException); } @override - Future editLocalCopyInForwarding(AccountId accountId, EditLocalCopyInForwardingRequest editRequest) { + Future<(TMailForward, SetMethodException?)> editLocalCopyInForwarding( + AccountId accountId, + EditLocalCopyInForwardingRequest editRequest, + ) { return Future.sync(() async { - return await _forwardingAPI.updateForward(accountId, editRequest.newTMailForward); + return await _forwardingAPI.updateForward( + accountId, + editRequest.newTMailForward, + ); }).catchError(_exceptionThrower.throwException); } } \ No newline at end of file diff --git a/lib/features/manage_account/data/network/forwarding_api.dart b/lib/features/manage_account/data/network/forwarding_api.dart index 2b428595b..d9c9296ec 100644 --- a/lib/features/manage_account/data/network/forwarding_api.dart +++ b/lib/features/manage_account/data/network/forwarding_api.dart @@ -43,7 +43,10 @@ class ForwardingAPI with HandleSetErrorMixin { return tMailForwardResult; } - Future updateForward(AccountId accountId, TMailForward forward) async { + Future<(TMailForward, SetMethodException?)> updateForward( + AccountId accountId, + TMailForward forward, + ) async { log('ForwardingAPI::updateForward: ${forward.toJson()}'); final setForwardMethod = SetForwardMethod(accountId) ..addUpdatesSingleton({ @@ -69,14 +72,9 @@ class ForwardingAPI with HandleSetErrorMixin { ); final mapErrors = handleSetResponse([setForwardResponse]); - if (mapErrors.isNotEmpty) { - throw SetMethodException(mapErrors); - } - - final updatedForward = setForwardResponse?.updated; - if (updatedForward?.isNotEmpty != true) { - throw UpdateForwardException(); - } + final methodException = mapErrors.isNotEmpty + ? SetMethodException(mapErrors) + : null; final getForwardResponse = response.parse( getForwardInvocation.methodCallId, @@ -84,10 +82,10 @@ class ForwardingAPI with HandleSetErrorMixin { ); final newForward = getForwardResponse?.list.firstOrNull; - if (newForward == null) { - throw NotFoundForwardException(); + if (newForward != null) { + return (newForward, methodException); } - return newForward; + throw methodException ?? NotFoundForwardException(); } } \ No newline at end of file diff --git a/lib/features/manage_account/data/repository/forwarding_repository_impl.dart b/lib/features/manage_account/data/repository/forwarding_repository_impl.dart index e72905471..d92e689f7 100644 --- a/lib/features/manage_account/data/repository/forwarding_repository_impl.dart +++ b/lib/features/manage_account/data/repository/forwarding_repository_impl.dart @@ -1,5 +1,6 @@ import 'package:forward/forward/tmail_forward.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource/forwarding_datasource.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart'; @@ -12,17 +13,26 @@ class ForwardingRepositoryImpl extends ForwardingRepository { ForwardingRepositoryImpl(this.dataSource); @override - Future addRecipientsInForwarding(AccountId accountId, AddRecipientInForwardingRequest addRequest) { + Future<(TMailForward, SetMethodException?)> addRecipientsInForwarding( + AccountId accountId, + AddRecipientInForwardingRequest addRequest, + ) { return dataSource.addRecipientsInForwarding(accountId, addRequest); } @override - Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest) { + Future<(TMailForward, SetMethodException?)> deleteRecipientInForwarding( + AccountId accountId, + DeleteRecipientInForwardingRequest deleteRequest, + ) { return dataSource.deleteRecipientInForwarding(accountId, deleteRequest); } @override - Future editLocalCopyInForwarding(AccountId accountId, EditLocalCopyInForwardingRequest editRequest) { + Future<(TMailForward, SetMethodException?)> editLocalCopyInForwarding( + AccountId accountId, + EditLocalCopyInForwardingRequest editRequest, + ) { return dataSource.editLocalCopyInForwarding(accountId, editRequest); } diff --git a/lib/features/manage_account/domain/repository/forwarding_repository.dart b/lib/features/manage_account/domain/repository/forwarding_repository.dart index 259e82905..bb7a5abd4 100644 --- a/lib/features/manage_account/domain/repository/forwarding_repository.dart +++ b/lib/features/manage_account/domain/repository/forwarding_repository.dart @@ -1,5 +1,6 @@ import 'package:forward/forward/tmail_forward.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/add_recipients_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_copy_in_forwarding_request.dart'; @@ -7,9 +8,18 @@ import 'package:tmail_ui_user/features/manage_account/domain/model/edit_local_co abstract class ForwardingRepository { Future getForward(AccountId accountId); - Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest); + Future<(TMailForward, SetMethodException?)> deleteRecipientInForwarding( + AccountId accountId, + DeleteRecipientInForwardingRequest deleteRequest, + ); - Future addRecipientsInForwarding(AccountId accountId, AddRecipientInForwardingRequest addRequest); + Future<(TMailForward, SetMethodException?)> addRecipientsInForwarding( + AccountId accountId, + AddRecipientInForwardingRequest addRequest, + ); - Future editLocalCopyInForwarding(AccountId accountId, EditLocalCopyInForwardingRequest editRequest); + Future<(TMailForward, SetMethodException?)> editLocalCopyInForwarding( + AccountId accountId, + EditLocalCopyInForwardingRequest editRequest, + ); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart b/lib/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart index 8a957c1f8..b81e648d8 100644 --- a/lib/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart +++ b/lib/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:forward/forward/tmail_forward.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/update_forwarding_state.dart'; class AddRecipientsInForwardingSuccess extends UIState { final TMailForward forward; @@ -11,6 +12,14 @@ class AddRecipientsInForwardingSuccess extends UIState { List get props => [forward]; } +class AddRecipientsInForwardingSuccessWithSomeCaseFailure + extends UpdateForwardingCompleteWithSomeCaseFailure { + AddRecipientsInForwardingSuccessWithSomeCaseFailure( + super.forward, + super.exception, + ); +} + class AddRecipientsInForwardingFailure extends FeatureFailure { AddRecipientsInForwardingFailure(dynamic exception) : super(exception: exception); diff --git a/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart b/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart index e2506d494..b8645f463 100644 --- a/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart +++ b/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:forward/forward/tmail_forward.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/update_forwarding_state.dart'; class StartDeleteRecipientInForwarding extends UIState {} @@ -13,6 +14,14 @@ class DeleteRecipientInForwardingSuccess extends UIState { List get props => [forward]; } +class DeleteRecipientInForwardingSuccessWithSomeCaseFailure + extends UpdateForwardingCompleteWithSomeCaseFailure { + DeleteRecipientInForwardingSuccessWithSomeCaseFailure( + super.forward, + super.exception, + ); +} + class DeleteRecipientInForwardingFailure extends FeatureFailure { DeleteRecipientInForwardingFailure(dynamic exception) : super(exception: exception); diff --git a/lib/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart b/lib/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart index fc0da82a8..e409d3a54 100644 --- a/lib/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart +++ b/lib/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:forward/forward/tmail_forward.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/update_forwarding_state.dart'; class EditLocalCopyInForwardingSuccess extends UIState { final TMailForward forward; @@ -11,6 +12,14 @@ class EditLocalCopyInForwardingSuccess extends UIState { List get props => [forward]; } +class EditLocalCopyInForwardingSuccessWithSomeCaseFailure + extends UpdateForwardingCompleteWithSomeCaseFailure { + EditLocalCopyInForwardingSuccessWithSomeCaseFailure( + super.forward, + super.exception, + ); +} + class EditLocalCopyInForwardingFailure extends FeatureFailure { EditLocalCopyInForwardingFailure(dynamic exception) : super(exception: exception); diff --git a/lib/features/manage_account/domain/state/update_forwarding_state.dart b/lib/features/manage_account/domain/state/update_forwarding_state.dart new file mode 100644 index 000000000..85404a68b --- /dev/null +++ b/lib/features/manage_account/domain/state/update_forwarding_state.dart @@ -0,0 +1,12 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:forward/forward/tmail_forward.dart'; + +class UpdateForwardingCompleteWithSomeCaseFailure extends FeatureFailure { + final TMailForward forward; + + UpdateForwardingCompleteWithSomeCaseFailure(this.forward, dynamic exception) + : super(exception: exception); + + @override + List get props => [forward, ...super.props]; +} diff --git a/lib/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart b/lib/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart index 8f3307a2b..a54612675 100644 --- a/lib/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart +++ b/lib/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart @@ -1,5 +1,3 @@ -import 'dart:core'; - import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; @@ -19,8 +17,19 @@ class AddRecipientsInForwardingInteractor { ) async* { try { yield Right(LoadingState()); - final result = await _forwardingRepository.addRecipientsInForwarding(accountId, addRequest); - yield Right(AddRecipientsInForwardingSuccess(result)); + final result = await _forwardingRepository.addRecipientsInForwarding( + accountId, + addRequest, + ); + + if (result.$2 == null) { + yield Right(AddRecipientsInForwardingSuccess(result.$1)); + } else { + yield Left(AddRecipientsInForwardingSuccessWithSomeCaseFailure( + result.$1, + result.$2!, + )); + } } catch (exception) { yield Left(AddRecipientsInForwardingFailure(exception)); } diff --git a/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart b/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart index 6cf7b1767..e3969ba0e 100644 --- a/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart +++ b/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart @@ -1,5 +1,3 @@ -import 'dart:core'; - import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; @@ -20,9 +18,17 @@ class DeleteRecipientInForwardingInteractor { try { yield Right(StartDeleteRecipientInForwarding()); final result = await _forwardingRepository.deleteRecipientInForwarding( - accountId, - deleteRequest); - yield Right(DeleteRecipientInForwardingSuccess(result)); + accountId, + deleteRequest, + ); + if (result.$2 == null) { + yield Right(DeleteRecipientInForwardingSuccess(result.$1)); + } else { + yield Left(DeleteRecipientInForwardingSuccessWithSomeCaseFailure( + result.$1, + result.$2!, + )); + } } catch (exception) { yield Left(DeleteRecipientInForwardingFailure(exception)); } diff --git a/lib/features/manage_account/domain/usecases/edit_local_copy_in_forwarding_interactor.dart b/lib/features/manage_account/domain/usecases/edit_local_copy_in_forwarding_interactor.dart index 0bfd3411c..fb91dead7 100644 --- a/lib/features/manage_account/domain/usecases/edit_local_copy_in_forwarding_interactor.dart +++ b/lib/features/manage_account/domain/usecases/edit_local_copy_in_forwarding_interactor.dart @@ -1,5 +1,3 @@ -import 'dart:core'; - import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; @@ -18,8 +16,19 @@ class EditLocalCopyInForwardingInteractor { EditLocalCopyInForwardingRequest editRequest, ) async* { try { - final result = await _forwardingRepository.editLocalCopyInForwarding(accountId, editRequest); - yield Right(EditLocalCopyInForwardingSuccess(result)); + final result = await _forwardingRepository.editLocalCopyInForwarding( + accountId, + editRequest, + ); + + if (result.$2 == null) { + yield Right(EditLocalCopyInForwardingSuccess(result.$1)); + } else { + yield Left(EditLocalCopyInForwardingSuccessWithSomeCaseFailure( + result.$1, + result.$2!, + )); + } } catch (exception) { yield Left(EditLocalCopyInForwardingFailure(exception)); } diff --git a/lib/features/manage_account/presentation/forward/extensions/handle_error_when_update_forward_fail_extension.dart b/lib/features/manage_account/presentation/forward/extensions/handle_update_forward_extension.dart similarity index 63% rename from lib/features/manage_account/presentation/forward/extensions/handle_error_when_update_forward_fail_extension.dart rename to lib/features/manage_account/presentation/forward/extensions/handle_update_forward_extension.dart index e537cb450..82c0dddf3 100644 --- a/lib/features/manage_account/presentation/forward/extensions/handle_error_when_update_forward_fail_extension.dart +++ b/lib/features/manage_account/presentation/forward/extensions/handle_update_forward_extension.dart @@ -1,14 +1,16 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/utils/app_logger.dart'; +import 'package:model/mailbox/select_mode.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/add_recipient_in_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/update_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_controller.dart'; -extension HandleErrorWhenUpdateForwardFailExtension on ForwardController { +extension HandleUpdateForwardExtension on ForwardController { void handleErrorWhenUpdateForwardFail(Failure failure) { logError( - 'HandleErrorWhenUpdateForwardFailExtension::handleErrorWhenUpdateForwardFail: $failure', + '$runtimeType::handleErrorWhenUpdateForwardFail: $failure', ); if (failure is AddRecipientsInForwardingFailure) { _handleAddRecipientsInForwardingFailure(failure); @@ -37,4 +39,20 @@ extension HandleErrorWhenUpdateForwardFailExtension on ForwardController { ) { toastManager.showMessageFailure(failure); } + + void handleUpdateForwardingCompleteWithSomeCaseFailure( + UpdateForwardingCompleteWithSomeCaseFailure state, + ) { + log( + '$runtimeType::handleUpdateForwardingCompleteWithSomeCaseFailure: $state', + ); + if (state is AddRecipientsInForwardingSuccessWithSomeCaseFailure) { + recipientController.clearAll(); + } else if (state is DeleteRecipientInForwardingSuccessWithSomeCaseFailure) { + selectionMode.value = SelectMode.INACTIVE; + } + updateTMailForward(state.forward); + + toastManager.showMessageFailure(state); + } } diff --git a/lib/features/manage_account/presentation/forward/forward_controller.dart b/lib/features/manage_account/presentation/forward/forward_controller.dart index 60f97cb57..5eb64b512 100644 --- a/lib/features/manage_account/presentation/forward/forward_controller.dart +++ b/lib/features/manage_account/presentation/forward/forward_controller.dart @@ -22,6 +22,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/add_recipient import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/edit_local_copy_in_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_forward_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/update_forwarding_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/add_recipients_in_forwarding_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_local_copy_in_forwarding_interactor.dart'; @@ -29,7 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_forwar import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/tmail_forward_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/forward/controller/forward_recipient_controller.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/forward/extensions/handle_error_when_update_forward_fail_extension.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/forward/extensions/handle_update_forward_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/recipient_forward.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -88,9 +89,7 @@ class ForwardController extends BaseController { @override void handleSuccessViewState(Success success) { if (success is GetForwardSuccess) { - currentForward.value = success.forward; - listRecipientForward.value = currentForward.value!.listRecipientForward; - _updateForwardWarningBannerState(); + updateTMailForward(success.forward); } else if (success is DeleteRecipientInForwardingSuccess) { _handleDeleteRecipientSuccess(success); } else if (success is AddRecipientsInForwardingSuccess) { @@ -108,6 +107,8 @@ class ForwardController extends BaseController { failure is DeleteRecipientInForwardingFailure || failure is EditLocalCopyInForwardingFailure) { handleErrorWhenUpdateForwardFail(failure); + } else if (failure is UpdateForwardingCompleteWithSomeCaseFailure) { + handleUpdateForwardingCompleteWithSomeCaseFailure(failure); } else { super.handleFailureViewState(failure); } @@ -119,6 +120,12 @@ class ForwardController extends BaseController { } } + void updateTMailForward(TMailForward forward) { + currentForward.value = forward; + listRecipientForward.value = forward.listRecipientForward; + _updateForwardWarningBannerState(); + } + void deleteRecipients(BuildContext context, String emailAddress) { clearInputFocus(); @@ -154,11 +161,8 @@ class ForwardController extends BaseController { currentOverlayContext!, AppLocalizations.of(currentContext!).toastMessageDeleteRecipientSuccessfully); } - - currentForward.value = success.forward; - listRecipientForward.value = currentForward.value!.listRecipientForward; selectionMode.value = SelectMode.INACTIVE; - _updateForwardWarningBannerState(); + updateTMailForward(success.forward); } List get listRecipientForwardSelected => @@ -260,13 +264,8 @@ class ForwardController extends BaseController { currentOverlayContext!, AppLocalizations.of(currentContext!).toastMessageAddRecipientsSuccessfully); } - - currentForward.value = success.forward; - listRecipientForward.value = currentForward.value!.listRecipientForward; - recipientController.clearAll(); - - _updateForwardWarningBannerState(); + updateTMailForward(success.forward); } void handleEditLocalCopy() { @@ -292,11 +291,7 @@ class ForwardController extends BaseController { ? AppLocalizations.of(currentContext!).toastMessageLocalCopyEnable : AppLocalizations.of(currentContext!).toastMessageLocalCopyDisable); } - - currentForward.value = success.forward; - listRecipientForward.value = currentForward.value!.listRecipientForward; - - _updateForwardWarningBannerState(); + updateTMailForward(success.forward); } void registerListenerWorker() { diff --git a/lib/main/utils/toast_manager.dart b/lib/main/utils/toast_manager.dart index e7f689f12..27f3f1d3c 100644 --- a/lib/main/utils/toast_manager.dart +++ b/lib/main/utils/toast_manager.dart @@ -169,12 +169,15 @@ class ToastManager { message ?? AppLocalizations.of(context).previewEmailFromEMLFileFailed; } else if (failure is ExportTraceLogFailure) { message = message ?? AppLocalizations.of(context).exportTraceLogFailed; - } else if (failure is AddRecipientsInForwardingFailure) { + } else if (failure is AddRecipientsInForwardingFailure || + failure is AddRecipientsInForwardingSuccessWithSomeCaseFailure) { message = message ?? AppLocalizations.of(context).addRecipientsFailed; - } else if (failure is EditLocalCopyInForwardingFailure) { + } else if (failure is EditLocalCopyInForwardingFailure || + failure is EditLocalCopyInForwardingSuccessWithSomeCaseFailure) { message = message ?? AppLocalizations.of(context).editLocalCopyInForwardFailed; - } else if (failure is DeleteRecipientInForwardingFailure) { + } else if (failure is DeleteRecipientInForwardingFailure || + failure is DeleteRecipientInForwardingSuccessWithSomeCaseFailure) { message = message ?? AppLocalizations.of(context).deleteRecipientsFailed; } else if (failure is CreateNewRuleFilterFailure) { message = message ?? AppLocalizations.of(context).createFilterRuleFailed;