TF-153 Combine moveToMailbox and moveToTrash to moveToMailbox using EmailActionType object

This commit is contained in:
dab246
2022-04-15 15:51:37 +07:00
committed by Dat H. Pham
parent 60aabfb6d1
commit 16c5aed64e
45 changed files with 268 additions and 722 deletions
@@ -3,8 +3,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
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';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
abstract class EmailDataSource {
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
@@ -35,9 +34,7 @@ abstract class EmailDataSource {
AccountRequest accountRequest,
);
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest);
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest);
Future<List<Email>> markAsStar(
AccountId accountId,
@@ -5,8 +5,7 @@ import 'package:model/model.dart';
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';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
class EmailDataSourceImpl extends EmailDataSource {
@@ -71,7 +70,7 @@ class EmailDataSourceImpl extends EmailDataSource {
}
@override
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
return Future.sync(() async {
return await emailAPI.moveToMailbox(accountId, moveRequest);
}).catchError((error) {
@@ -124,15 +123,6 @@ class EmailDataSourceImpl extends EmailDataSource {
});
}
@override
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
return Future.sync(() async {
return await emailAPI.moveToTrash(accountId, moveRequest);
}).catchError((error) {
throw error;
});
}
@override
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
return Future.sync(() async {
+2 -31
View File
@@ -26,8 +26,7 @@ import 'package:jmap_dart_client/jmap/mail/email/submission/set/set_email_submis
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';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
class EmailAPI {
@@ -216,7 +215,7 @@ class EmailAPI {
);
}
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) async {
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates(moveRequest.emailIds
.generateMapUpdateObjectMoveToMailbox(moveRequest.currentMailboxId, moveRequest.destinationMailboxId));
@@ -354,34 +353,6 @@ class EmailAPI {
});
}
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;
});
}
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) async {
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailMethod = SetEmailMethod(accountId)
@@ -6,8 +6,7 @@ import 'package:model/model.dart';
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/model/move_to_mailbox_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
class EmailRepositoryImpl extends EmailRepository {
@@ -59,7 +58,7 @@ class EmailRepositoryImpl extends EmailRepository {
}
@override
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
Future<List<EmailId>> moveToMailbox(AccountId accountId, MoveToMailboxRequest moveRequest) {
return emailDataSource.moveToMailbox(accountId, moveRequest);
}
@@ -110,11 +109,6 @@ class EmailRepositoryImpl extends EmailRepository {
return emailDataSource.downloadAttachmentForWeb(attachment, accountId, baseDownloadUrl, accountRequest);
}
@override
Future<List<EmailId>> moveToTrash(AccountId accountId, MoveToTrashRequest moveRequest) {
return emailDataSource.moveToTrash(accountId, moveRequest);
}
@override
Future<List<EmailId>> deleteMultipleEmailsPermanently(AccountId accountId, List<EmailId> emailIds) {
return emailDataSource.deleteMultipleEmailsPermanently(accountId, emailIds);