From 915a4b26b8a82f49f957c519c34b3634cb5a062c Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 5 Mar 2025 19:00:36 +0700 Subject: [PATCH] TF-3514 Show explicit error when transfer base64 to cid Signed-off-by: dab246 --- .../presentation/composer_controller.dart | 14 +++++- .../handle_message_failure_extension.dart | 43 +++++++++++++++++++ .../mailbox_dashboard_controller.dart | 8 +++- .../extensions/set_error_extension.dart | 23 ++++++---- 4 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 lib/features/composer/presentation/extensions/handle_message_failure_extension.dart diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 442cfc6eb..cfcd62eb8 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -62,6 +62,7 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/email_ac import 'package:tmail_ui_user/features/composer/presentation/extensions/get_draft_mailbox_id_for_composer_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/get_outbox_mailbox_id_for_composer_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/get_sent_mailbox_id_for_composer_extension.dart'; +import 'package:tmail_ui_user/features/composer/presentation/extensions/handle_message_failure_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/list_identities_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/list_shared_media_file_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/mixin/drag_drog_file_mixin.dart'; @@ -1158,10 +1159,14 @@ class ComposerController extends BaseController required BuildContext context, required FeatureFailure failure }) async { + final errorMessage = getMessageFailure( + appLocalizations: AppLocalizations.of(context), + exception: failure.exception, + ); await showConfirmDialogAction( context, title: '', - AppLocalizations.of(context).warningMessageWhenSendEmailFailure, + errorMessage, AppLocalizations.of(context).edit, cancelTitle: AppLocalizations.of(context).closeAnyway, alignCenter: true, @@ -2449,10 +2454,15 @@ class ComposerController extends BaseController VoidCallback? onConfirmAction, VoidCallback? onCancelAction, }) async { + final errorMessage = getMessageFailure( + appLocalizations: AppLocalizations.of(context), + exception: failure.exception, + isDraft: true, + ); await showConfirmDialogAction( context, title: '', - AppLocalizations.of(context).warningMessageWhenSaveEmailToDraftsFailure, + errorMessage, AppLocalizations.of(context).edit, cancelTitle: AppLocalizations.of(context).closeAnyway, alignCenter: true, diff --git a/lib/features/composer/presentation/extensions/handle_message_failure_extension.dart b/lib/features/composer/presentation/extensions/handle_message_failure_extension.dart new file mode 100644 index 000000000..4cc86e53c --- /dev/null +++ b/lib/features/composer/presentation/extensions/handle_message_failure_extension.dart @@ -0,0 +1,43 @@ + +import 'package:jmap_dart_client/jmap/core/error/set_error.dart'; +import 'package:tmail_ui_user/features/composer/domain/exceptions/set_method_exception.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +extension HandleMessageFailureExtension on ComposerController { + + String getMessageFailure({ + required AppLocalizations appLocalizations, + dynamic exception, + bool isDraft = false, + }) { + if (exception is! SetMethodException) { + return isDraft + ? appLocalizations.warningMessageWhenSaveEmailToDraftsFailure + : appLocalizations.warningMessageWhenSendEmailFailure; + } + + for (var error in exception.mapErrors.values) { + if (error.type != SetError.tooLarge && error.type != SetError.overQuota) { + continue; + } + + if (isDraft) { + return error.toastMessageForSaveEmailAsDraftFailure( + appLocalizations: appLocalizations, + defaultMessage:appLocalizations.warningMessageWhenSaveEmailToDraftsFailure, + ); + } else { + return error.toastMessageForSendEmailFailure( + appLocalizations: appLocalizations, + defaultMessage:appLocalizations.warningMessageWhenSendEmailFailure, + ); + } + } + + return isDraft + ? appLocalizations.warningMessageWhenSaveEmailToDraftsFailure + : appLocalizations.warningMessageWhenSendEmailFailure; + } +} \ 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 936608005..13bc247bb 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -2413,9 +2413,13 @@ class MailboxDashBoardController extends ReloadableController for (var error in listErrors) { if (error.type == SetError.tooLarge || error.type == SetError.overQuota) { if (isDrafts) { - _showToastSendMessageFailure(error.toastMessageForSaveEmailAsDraftFailure(currentContext!)); + _showToastSendMessageFailure(error.toastMessageForSaveEmailAsDraftFailure( + appLocalizations: AppLocalizations.of(currentContext!), + )); } else { - _showToastSendMessageFailure(error.toastMessageForSendEmailFailure(currentContext!)); + _showToastSendMessageFailure(error.toastMessageForSendEmailFailure( + appLocalizations: AppLocalizations.of(currentContext!), + )); } return true; } diff --git a/lib/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart b/lib/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart index 038edec66..70612b9dc 100644 --- a/lib/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart +++ b/lib/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart @@ -1,27 +1,32 @@ -import 'package:flutter/widgets.dart'; import 'package:jmap_dart_client/jmap/core/error/set_error.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; extension SetErrorExtension on SetError { - String toastMessageForSendEmailFailure(BuildContext context) { + String toastMessageForSendEmailFailure({ + required AppLocalizations appLocalizations, + String? defaultMessage, + }) { if (type == SetError.tooLarge) { - return AppLocalizations.of(context).sendMessageFailureWithSetErrorTypeTooLarge; + return appLocalizations.sendMessageFailureWithSetErrorTypeTooLarge; } else if (type == SetError.overQuota) { - return AppLocalizations.of(context).sendMessageFailureWithSetErrorTypeOverQuota; + return appLocalizations.sendMessageFailureWithSetErrorTypeOverQuota; } else { - return AppLocalizations.of(context).sendMessageFailure; + return defaultMessage ?? appLocalizations.sendMessageFailure; } } - String toastMessageForSaveEmailAsDraftFailure(BuildContext context) { + String toastMessageForSaveEmailAsDraftFailure({ + required AppLocalizations appLocalizations, + String? defaultMessage, + }) { if (type == SetError.tooLarge) { - return AppLocalizations.of(context).saveEmailAsDraftFailureWithSetErrorTypeTooLarge; + return appLocalizations.saveEmailAsDraftFailureWithSetErrorTypeTooLarge; } else if (type == SetError.overQuota) { - return AppLocalizations.of(context).saveEmailAsDraftFailureWithSetErrorTypeOverQuota; + return appLocalizations.saveEmailAsDraftFailureWithSetErrorTypeOverQuota; } else { - return AppLocalizations.of(context).saveEmailAsDraftFailure; + return defaultMessage ?? appLocalizations.saveEmailAsDraftFailure; } } } \ No newline at end of file