diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart index 3f4655437..afb72ee68 100644 --- a/lib/features/email/data/network/email_api.dart +++ b/lib/features/email/data/network/email_api.dart @@ -5,6 +5,9 @@ import 'dart:typed_data'; import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:email_recovery/email_recovery/get/get_email_recovery_action_method.dart'; +import 'package:email_recovery/email_recovery/get/get_email_recovery_action_response.dart'; import 'package:external_path/external_path.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:jmap_dart_client/http/http_client.dart'; @@ -34,6 +37,9 @@ import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submis import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submission_response.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/set/set_mailbox_method.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; +import 'package:email_recovery/email_recovery/set/set_email_recovery_action_method.dart'; +import 'package:email_recovery/email_recovery/set/set_email_recovery_action_response.dart'; import 'package:model/account/account_request.dart'; import 'package:model/account/authentication_type.dart'; import 'package:model/download/download_task_id.dart'; @@ -57,6 +63,7 @@ import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart' import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.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/state/download_attachment_for_web_state.dart'; import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; @@ -687,4 +694,52 @@ class EmailAPI with HandleSetErrorMixin { throw NotFoundEmailException(); } } + + Future restoreDeletedMessage(RestoredDeletedMessageRequest restoredDeletedMessageRequest) async { + final processingInvocation = ProcessingInvocation(); + final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); + + final emailRecoveryActionSetMethod = SetEmailRecoveryActionMethod() + ..addCreate( + restoredDeletedMessageRequest.createRequestId, + restoredDeletedMessageRequest.emailRecoveryAction + ); + final emailRecoveryActionSetInvocation = requestBuilder.invocation(emailRecoveryActionSetMethod); + final response = await (requestBuilder + ..usings(emailRecoveryActionSetMethod.requiredCapabilities)) + .build() + .execute(); + + final emailRecoveryActionSetResponse = response.parse( + emailRecoveryActionSetInvocation.methodCallId, + SetEmailRecoveryActionResponse.deserialize + ); + + return emailRecoveryActionSetResponse!.created![restoredDeletedMessageRequest.createRequestId]!; + } + + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + final processingInvocation = ProcessingInvocation(); + final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); + + final getEmailRecoveryActionMethod = GetEmailRecoveryActionMethod() + ..addIds({emailRecoveryActionId.id}); + final getEmailRecoveryActionInvocation = requestBuilder.invocation(getEmailRecoveryActionMethod); + return (requestBuilder + ..usings(getEmailRecoveryActionMethod.requiredCapabilities)) + .build() + .execute() + .then((response) { + final resultList = response.parse( + getEmailRecoveryActionInvocation.methodCallId, + GetEmailRecoveryActionResponse.deserialize + ); + + if (resultList?.list.isNotEmpty == true) { + return resultList!.list.firstWhere((element) => element.id == emailRecoveryActionId); + } else { + throw NotFoundEmailRecoveryActionException(); + } + }); + } } \ No newline at end of file diff --git a/lib/features/email/domain/exceptions/email_exceptions.dart b/lib/features/email/domain/exceptions/email_exceptions.dart index 3fd9b5d92..a5aa2441e 100644 --- a/lib/features/email/domain/exceptions/email_exceptions.dart +++ b/lib/features/email/domain/exceptions/email_exceptions.dart @@ -2,4 +2,6 @@ class NotFoundEmailException implements Exception {} class NotFoundEmailContentException implements Exception {} -class EmptyEmailContentException implements Exception {} \ No newline at end of file +class EmptyEmailContentException implements Exception {} + +class NotFoundEmailRecoveryActionException implements Exception {} \ No newline at end of file