diff --git a/lib/features/public_asset/domain/state/create_public_asset_state.dart b/lib/features/public_asset/domain/state/create_public_asset_state.dart index 1a5864858..9efdfffac 100644 --- a/lib/features/public_asset/domain/state/create_public_asset_state.dart +++ b/lib/features/public_asset/domain/state/create_public_asset_state.dart @@ -1,6 +1,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:jmap_dart_client/jmap/mail/extensions/public_asset/public_asset.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/exceptions/public_asset_exceptions.dart'; class CreatingPublicAssetState extends LoadingState {} @@ -19,4 +20,15 @@ class CreatePublicAssetFailureState extends FeatureFailure { @override List get props => [exception]; +} + +class PublicAssetOverQuotaFailureState extends FeatureFailure { + + PublicAssetOverQuotaFailureState({required this.publicAssetQuotaExceededException}) + : super(exception: publicAssetQuotaExceededException); + + final PublicAssetQuotaExceededException publicAssetQuotaExceededException; + + @override + List get props => [publicAssetQuotaExceededException]; } \ No newline at end of file diff --git a/lib/features/public_asset/domain/usecase/create_public_asset_interactor.dart b/lib/features/public_asset/domain/usecase/create_public_asset_interactor.dart index c2663d00d..0056ca964 100644 --- a/lib/features/public_asset/domain/usecase/create_public_asset_interactor.dart +++ b/lib/features/public_asset/domain/usecase/create_public_asset_interactor.dart @@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/exceptions/public_asset_exceptions.dart'; import 'package:tmail_ui_user/features/public_asset/domain/state/create_public_asset_state.dart'; import 'package:tmail_ui_user/features/public_asset/domain/repository/public_asset_repository.dart'; @@ -32,7 +33,13 @@ class CreatePublicAssetInteractor { yield Right(CreatePublicAssetSuccessState(publicAsset)); } catch (exception) { logError('CreatePublicAssetInteractor::execute():error: $exception'); - yield Left(CreatePublicAssetFailureState(exception: exception)); + + if (exception is PublicAssetQuotaExceededException) { + yield Left(PublicAssetOverQuotaFailureState( + publicAssetQuotaExceededException: exception)); + } else { + yield Left(CreatePublicAssetFailureState(exception: exception)); + } } } } \ No newline at end of file diff --git a/lib/features/public_asset/presentation/public_asset_controller.dart b/lib/features/public_asset/presentation/public_asset_controller.dart index a96859aab..9b598d21b 100644 --- a/lib/features/public_asset/presentation/public_asset_controller.dart +++ b/lib/features/public_asset/presentation/public_asset_controller.dart @@ -26,6 +26,7 @@ import 'package:tmail_ui_user/features/public_asset/domain/usecase/delete_public import 'package:tmail_ui_user/features/public_asset/presentation/model/public_asset_arguments.dart'; import 'package:tmail_ui_user/features/upload/domain/extensions/platform_file_extension.dart'; import 'package:tmail_ui_user/features/upload/domain/state/attachment_upload_state.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; typedef PublicAssetId = Id; @@ -114,7 +115,28 @@ class PublicAssetController extends BaseController { void handleFailureViewState(Failure failure) { super.handleFailureViewState(failure); if (failure is CreatePublicAssetFailureState) { - isUploading.value = false; + _handleCreatePublicAssetFailureState(); + } else if (failure is PublicAssetOverQuotaFailureState) { + _handlePublicAssetOverQuotaFailureState(failure); + } + } + + void _handlePublicAssetOverQuotaFailureState(PublicAssetOverQuotaFailureState failure) { + isUploading.value = false; + if (currentOverlayContext != null && currentContext != null) { + appToast.showToastErrorMessage( + currentOverlayContext!, + failure.publicAssetQuotaExceededException.message + ?? AppLocalizations.of(currentContext!).generalSignatureImageUploadError); + } + } + + void _handleCreatePublicAssetFailureState() { + isUploading.value = false; + if (currentOverlayContext != null && currentContext != null) { + appToast.showToastErrorMessage( + currentOverlayContext!, + AppLocalizations.of(currentContext!).generalSignatureImageUploadError); } }