diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index 5b37b8e0f..001a89951 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -6,6 +6,8 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; @@ -19,6 +21,7 @@ import 'package:model/email/read_actions.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; @@ -106,4 +109,8 @@ abstract class EmailDataSource { Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId); Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId); + + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest); + + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId); } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart index 35feab298..e9a21617d 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -6,6 +6,8 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; @@ -17,6 +19,7 @@ import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.da import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -231,4 +234,18 @@ class EmailDataSourceImpl extends EmailDataSource { return await emailAPI.unsubscribeMail(session, accountId, emailId); }).catchError(_exceptionThrower.throwException); } + + @override + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest) { + return Future.sync(() async { + return await emailAPI.restoreDeletedMessage(restoredDeletedMessageRequest); + }).catchError(_exceptionThrower.throwException); + } + + @override + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + return Future.sync(() async { + return await emailAPI.getRestoredDeletedMessage(emailRecoveryActionId); + }).catchError(_exceptionThrower.throwException); + } } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart index 709f4bb38..b9ee6b432 100644 --- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart @@ -10,6 +10,8 @@ import 'package:core/utils/app_logger.dart'; import 'package:core/utils/file_utils.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart'; @@ -28,6 +30,7 @@ import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_ex import 'package:tmail_ui_user/features/email/domain/extensions/detailed_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/list_sending_email_hive_cache_extension.dart'; import 'package:tmail_ui_user/features/offline_mode/extensions/sending_email_hive_cache_extension.dart'; @@ -292,4 +295,14 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { throw UnimplementedError(); } + + @override + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest) { + throw UnimplementedError(); + } + + @override + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + throw UnimplementedError(); + } } \ No newline at end of file diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index 3b87a7093..ab3094d66 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -9,6 +9,8 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; @@ -25,6 +27,7 @@ import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.da import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart'; @@ -217,4 +220,14 @@ class EmailRepositoryImpl extends EmailRepository { Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId) { return emailDataSource[DataSourceType.network]!.unsubscribeMail(session, accountId, emailId); } + + @override + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest) { + return emailDataSource[DataSourceType.network]!.restoreDeletedMessage(restoredDeletedMessageRequest); + } + + @override + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + return emailDataSource[DataSourceType.network]!.getRestoredDeletedMessage(emailRecoveryActionId); + } } \ No newline at end of file diff --git a/lib/features/email/domain/model/restore_deleted_message_request.dart b/lib/features/email/domain/model/restore_deleted_message_request.dart new file mode 100644 index 000000000..af2c63550 --- /dev/null +++ b/lib/features/email/domain/model/restore_deleted_message_request.dart @@ -0,0 +1,16 @@ +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; + +class RestoredDeletedMessageRequest with EquatableMixin { + final Id createRequestId; + final EmailRecoveryAction emailRecoveryAction; + + RestoredDeletedMessageRequest(this.createRequestId, this.emailRecoveryAction); + + @override + List get props => [ + createRequestId, + emailRecoveryAction + ]; +} \ No newline at end of file diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index 6ec03dd12..ba12f719f 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -7,6 +7,8 @@ import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; @@ -21,6 +23,7 @@ import 'package:model/email/read_actions.dart'; import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'; import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; abstract class EmailRepository { @@ -106,4 +109,8 @@ abstract class EmailRepository { ); Future unsubscribeMail(Session session, AccountId accountId, EmailId emailId); + + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest); + + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId); } \ No newline at end of file