TF-80 Move email to Mailbox in Email Detailed view

This commit is contained in:
dab246
2021-09-21 01:26:50 +07:00
committed by Dat H. Pham
parent c227df8df2
commit afc8c0fe77
18 changed files with 222 additions and 16 deletions
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/email/read_actions.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';
abstract class EmailDataSource {
Future<Email> getEmailContent(AccountId accountId, EmailId emailId);
@@ -26,4 +27,6 @@ abstract class EmailDataSource {
AccountRequest accountRequest,
CancelToken cancelToken
);
Future<bool> moveToMailbox(AccountId accountId, MoveRequest moveRequest);
}
@@ -5,6 +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';
class EmailDataSourceImpl extends EmailDataSource {
@@ -67,4 +68,13 @@ class EmailDataSourceImpl extends EmailDataSource {
throw error;
});
}
@override
Future<bool> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
return Future.sync(() async {
return await emailAPI.moveToMailbox(accountId, moveRequest);
}).catchError((error) {
throw error;
});
}
}
@@ -26,6 +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';
class EmailAPI {
@@ -186,4 +187,32 @@ class EmailAPI {
accountRequest.basicAuth,
cancelToken: cancelToken);
}
Future<bool> moveToMailbox(AccountId accountId, MoveRequest moveRequest) async {
final setEmailMethod = SetEmailMethod(accountId)
..addUpdates({
moveRequest.emailId.id: moveRequest.currentMailboxId
.generateMoveToMailboxActionPath(moveRequest.destinationMailboxId)
});
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 emailUpdated = setEmailResponse!.updated![moveRequest.emailId.id];
return emailUpdated == null;
}).catchError((error) {
throw error;
});
}
}
@@ -5,6 +5,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/data/datasource/email_datasource.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_request.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
class EmailRepositoryImpl extends EmailRepository {
@@ -53,4 +54,9 @@ class EmailRepositoryImpl extends EmailRepository {
accountRequest,
cancelToken);
}
@override
Future<bool> moveToMailbox(AccountId accountId, MoveRequest moveRequest) {
return emailDataSource.moveToMailbox(accountId, moveRequest);
}
}