TF-314 Implement delete an email in EmailView

This commit is contained in:
dab246
2022-03-30 16:50:50 +07:00
committed by Dat H. Pham
parent e86847aa7f
commit 8bf80db4de
18 changed files with 242 additions and 5 deletions
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
abstract class EmailDataSource {
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
@@ -36,6 +37,8 @@ abstract class EmailDataSource {
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest);
Future<List<Email>> markAsStar(
AccountId accountId,
List<Email> emails,
@@ -6,6 +6,7 @@ import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
class EmailDataSourceImpl extends EmailDataSource {
@@ -122,4 +123,13 @@ class EmailDataSourceImpl extends EmailDataSource {
throw error;
});
}
@override
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
return Future.sync(() async {
return await emailAPI.moveToTrash(accountId, moveRequest);
}).catchError((error) {
throw error;
});
}
}
@@ -27,6 +27,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
class EmailAPI {
@@ -352,4 +353,32 @@ class EmailAPI {
throw error;
});
}
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(moveRequest.emailIds
.generateMapUpdateObjectMoveToMailbox(moveRequest.currentMailboxId, moveRequest.trashMailboxId));
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final response = await (requestBuilder
..usings(setEmailMethod.requiredCapabilities))
.build()
.execute();
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
return Future.sync(() async {
final mapUpdated = setEmailResponse!.updated!;
return moveRequest.emailIds
.where((emailId) => mapUpdated.containsKey(emailId.id))
.toList();
}).catchError((error) {
throw error;
});
}
}
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_trash_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
class EmailRepositoryImpl extends EmailRepository {
@@ -108,4 +109,9 @@ class EmailRepositoryImpl extends EmailRepository {
Future<bool> downloadAttachmentForWeb(Attachment attachment, AccountId accountId, String baseDownloadUrl, AccountRequest accountRequest) {
return emailDataSource.downloadAttachmentForWeb(attachment, accountId, baseDownloadUrl, accountRequest);
}
@override
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
return emailDataSource.moveToTrash(accountId, moveRequest);
}
}